import warnings warnings.filterwarnings('ignore') from crewai import Agent, Task, Crew from crewai_tools import ( #DirectoryReadTool, #FileReadTool, #SerperDevTool, #WebsiteSearchTool, #DOCXSearchTool, #RagTool, TXTSearchTool ) from datetime import datetime import os from utils import get_openai_api_key openai_api_key = get_openai_api_key() os.environ["OPENAI_MODEL_NAME"] = 'gpt-3.5-turbo' os.environ["OPENAI_API_KEY"] = "sk-proj-8nKBOgxInYCIqidcdSu7T3BlbkFJWac8qZbpFOE2TSn0OpId" def call_crew_kickoff(str_current_datetime): # Instantiate tools #meeting_trans_docs_tool = DirectoryReadTool(directory='./meeting-transcription') #brd_temp_docs_tool = DirectoryReadTool(directory='./brd-template') #file_tool = FileReadTool() #web_rag_tool = WebsiteSearchTool() #docx_search_tool = DOCXSearchTool() #rag_tool = RagTool() mt_tool = TXTSearchTool(txt='./meeting-transcription/meeting-transcript_' + str_current_datetime + '.txt') brd_tool = TXTSearchTool(txt='./brd-template/brd-template.txt') text_parsing_agent = Agent( role="Text Interpreter", goal="Parse and interpret the raw text input, structuring it into manageable sections" "or data points that are relevant for analysis and processing.", backstory="You excel at deciphering complex textual data. You act as the first line of analysis," "turning unstructured text into organized segments. You should enhance efficiency in data" "handling and support subsequent stages of data processing.", tools=[mt_tool], allow_delegation=True, verbose=True ) data_extraction_agent = Agent( role="Data Extraction Agent", goal="Identify and extract essential data points, statistics," "and specific information from the parsed text that are crucial" "for drafting a Business Requirements Document.", backstory="You should tackle the challenge of sifting through detailed textual data to" "find relevant information. You should be doing it with precision and speed, equipped" "with capabilities to recognize and categorize data efficiently, making it invaluable" "for projects requiring quick turnaround and accurate data handling.", tools=[mt_tool, brd_tool], allow_delegation=True, verbose=True ) brd_compiler_agent = Agent( role="BRD Compiler", goal="Assemble the extracted data into a well-structured Business Requirements Document," "ensuring that it is clear, coherent, and formatted according to standards.", backstory="You are a meticulous Business Requirement Document compiler, You should alleviate" "the burdens of manual document assembly. Ensure that all documents are crafted with" "precision, adhering to organizational standards, and ready for stakeholder review. You" "should be automating routine documentation tasks, thus allowing human team members to focus" "on more strategic activities.", tools=[brd_tool], allow_delegation=True, verbose=True ) text_parsing = Task( description=( "1. Open and read the contents of the input text file.\n" "2. Analyze the document structure to identify headings, subheadings, and key paragraphs.\n" "3. Extract text under each identified section, ensuring context is preserved.\n" "4. Format the extracted text into a JSON structure with labels indicating the type" "of content (e.g., heading, detail)." ), expected_output="Structured JSON object containing separated sections of" "text with labels based on their content type.", agent=text_parsing_agent, ) data_extraction = Task( description=( "1. Take the JSON structured data from the Text Parsing Agent.\n" "2. Identify and extract specific data points like project goals, technical requirements," "and stakeholder information.\n" "3. Organize the extracted data into relevant categories for easy access and use.\n" "4. Format all extracted data into a structured form suitable for document generation," "ensuring it's ready for template insertion.\n" ), expected_output="A comprehensive list of key data points organized by category, ready for use in document generation.", agent=data_extraction_agent, ) compile_brd = Task( description=( "1. Accept the structured and categorized data from the Data Extraction Agent.\n" "2. Open and read the BRD template for data insertion.\n" "3. Insert the received data into the respective sections of the BRD template.\n" "4. Apply formatting rules to ensure the document is professional and adheres to standards.\n" "5. Save the populated and formatted document as a new markdown file, marking the task as complete.\n" ), expected_output="A complete Business Requirements Document in markdown format, ready for review and distribution.", agent=brd_compiler_agent, output_file='generated-brd/brd_' + str_current_datetime + '.md', # The final blog post will be saved here ) crew = Crew( agents=[text_parsing_agent, data_extraction_agent, brd_compiler_agent], tasks=[text_parsing, data_extraction, compile_brd], verbose=2 ) result = crew.kickoff(inputs={'datetime': str_current_datetime}) import gradio as gr def process_file(input_file): current_datetime = datetime.now().strftime("%Y-%m-%d %H-%M-%S") print("Current date & time : ", current_datetime) # convert datetime obj to string str_current_datetime = str(current_datetime) fh = open(input_file, 'rb') #data = fh.read() # Ensure the target directory exists output_dir = "meeting-transcription" if not os.path.exists(output_dir): os.makedirs(output_dir) # Save the uploaded file to the specified folder with the specified name input_filepath = os.path.join(output_dir, "meeting-transcript_" + str_current_datetime + ".txt") with open(input_filepath, "wb") as file: file.write(fh.read()) fh.close() call_crew_kickoff(str_current_datetime) # Example of processing: adding Markdown formatting. Replace this with your actual processing. #processed_text = "# Processed Output\n\n" + "\n".join(f"- {line}" for line in text.splitlines()) output_filename = "generated-brd/brd_" + str_current_datetime + ".md" #with open(output_filename, "w") as file: # file.write(processed_text) # Read the contents of the generated Markdown file with open(output_filename, "r") as md_file: markdown_content = md_file.read() # Return both the filename for download and the Markdown content for display return output_filename, markdown_content with gr.Blocks() as demo: with gr.Row(): file_input = gr.File(label="Upload a text file") download_btn = gr.File(label="Download Processed File in Markdown", file_count="single") with gr.Row(): markdown_output = gr.Markdown() file_input.change(process_file, inputs=file_input, outputs=[download_btn, markdown_output]) demo.launch(share=True)