Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| import os | |
| import gradio as gr | |
| from crewai import Agent, Task, Crew, Process, LLM | |
| # ========== LLM WRAPPER SETUP ========== | |
| # Configure your OpenAI API key via environment variable | |
| openai_api_key = os.getenv("OPEN_API_KEY") | |
| if not openai_api_key: | |
| raise RuntimeError("Please set the OPENAI_API_KEY environment variable.") | |
| # Instantiate the LLM wrapper | |
| llm = LLM(model="openai/gpt-4o", api_key=openai_api_key) | |
| # ========== AGENT DEFINITIONS ========== | |
| parser_agent = Agent( | |
| role="Parser Agent", | |
| goal="Understand and structure unstructured user thoughts", | |
| backstory=( | |
| "You're great at breaking down user inputs into project insights, " | |
| "actionable tasks, and mood notes." | |
| ), | |
| llm=llm, | |
| verbose=False | |
| ) | |
| memory_agent = Agent( | |
| role="Memory Checker Agent", | |
| goal="Identify recurring topics in past logs", | |
| backstory=( | |
| "You're responsible for detecting topics mentioned multiple times." | |
| ), | |
| llm=llm, | |
| verbose=False | |
| ) | |
| executor_agent = Agent( | |
| role="Execution Agent", | |
| goal="Confirm actions and simulate execution based on insights", | |
| backstory=( | |
| "You're the executor: propose confirmations and mock-execute tasks." | |
| ), | |
| llm=llm, | |
| verbose=False | |
| ) | |
| # ========== BUSINESS LOGIC ========== | |
| def process_thoughts(thought_dump: str) -> str: | |
| """ | |
| Run the CrewAI workflow: parse, check memory, and execute. | |
| Returns the final summary string. | |
| """ | |
| # Define the Task | |
| main_task = Task( | |
| description=( | |
| """You will coordinate the understanding of the following user brain-dump: | |
| --- START OF USER THOUGHTS --- | |
| {thought_dump} | |
| --- END --- | |
| Step 1: Ask the Parser Agent to extract: | |
| - Any project-related insights | |
| - Actionable tasks | |
| - Health or mood notes | |
| Step 2: Ask the Memory Agent to check for repeating patterns in the thoughts (like repeated mentioned words) | |
| Step 3: Based on the parsed output and memory findings, ask the Execution Agent to: | |
| - Propose a confirmation message to the user | |
| - If the user agrees (simulate yes), execute the corresponding actions (print logs as mock) | |
| Finally, return the final actions taken. | |
| """ | |
| ), | |
| expected_output="A summary of actions executed like tasks created, insights logged, and health notes recorded.", | |
| agent=executor_agent | |
| ) | |
| # Build and run the Crew | |
| crew = Crew( | |
| agents=[parser_agent, memory_agent, executor_agent], | |
| tasks=[main_task], | |
| process=Process.sequential, | |
| verbose=False | |
| ) | |
| result = crew.kickoff({"thought_dump":thought_dump}) | |
| return result | |
| # ========== Gradio UI ========== | |
| with gr.Blocks(title="ThoughtBridge AI") as demo: | |
| gr.Markdown("# ThoughtBridge AI: Bridge your mind’s streams into actionable insights") | |
| inp = gr.Textbox( | |
| lines=8, | |
| placeholder="Enter your brain-dump here...", | |
| label="Your Thoughts" | |
| ) | |
| out = gr.Textbox( | |
| lines=10, | |
| label="Results" | |
| ) | |
| run_btn = gr.Button("Process") | |
| run_btn.click( | |
| fn=process_thoughts, | |
| inputs=inp, | |
| outputs=out | |
| ) | |
| # Launch the app | |
| if __name__ == "__main__": | |
| demo.launch() | |