agent / app.py
Hemavathineelirothu's picture
Upload app.py
3a817f5 verified
import os
import gradio as gr
from transformers import pipeline
# Set environment variable to avoid the OpenMP error
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
# Load a model from Hugging Face's Model Hub
generator = pipeline(model="gpt2")
# PlanAgent: Responsible for splitting the task and refining it
class PlanAgent:
def __init__(self):
self.tasks = []
def break_into_subtasks(self, user_query):
try:
prompt = f"Break down the following task into detailed, actionable steps:\n\nTask: {user_query}\n\nSubtasks:"
response = generator(prompt, max_length=150)
generated_text = response[0]['generated_text']
# Post-process to extract subtasks
subtasks = generated_text.strip().split("\n")
subtasks = [task.strip("- ") for task in subtasks if task] # Remove bullet points if they exist
self.tasks = subtasks
return subtasks
except Exception as e:
return [f"Error generating subtasks: {e}"]
def modify_task(self, task_index, new_task):
if 0 <= task_index < len(self.tasks):
self.tasks[task_index] = new_task
else:
return "Invalid task index."
def delete_task(self, task_index):
if 0 <= task_index < len(self.tasks):
del self.tasks[task_index]
else:
return "Invalid task index."
def add_task(self, new_task):
self.tasks.append(new_task)
def get_subtasks(self):
return self.tasks
# ToolAgent: Responsible for solving each subtask
class ToolAgent:
def solve_task(self, task):
try:
# Let's simulate task-solving by generating a response
prompt = f"How to solve the following task:\n\nTask: {task}\n\nSolution:"
response = generator(prompt, max_length=100)
solution = response[0]['generated_text']
return solution
except Exception as e:
return f"Error solving the task: {e}"
# Reflection: Feedback on the task result (simulated)
def reflection(subtask_result):
return f"Reflection on result: The solution seems {'adequate' if 'success' in subtask_result.lower() else 'inadequate'}."
# Initialize the agents
plan_agent = PlanAgent()
tool_agent = ToolAgent()
# Gradio interface functions
def break_down_task(user_input):
subtasks = plan_agent.break_into_subtasks(user_input)
return "\n".join(subtasks)
def solve_subtasks():
solved_tasks = []
subtasks = plan_agent.get_subtasks()
for task in subtasks:
solution = tool_agent.solve_task(task)
solved_tasks.append(f"Task: {task}\nSolution: {solution}")
return "\n\n".join(solved_tasks)
def modify_subtask(index, new_subtask):
index = int(index) - 1 # Convert to zero-indexed
result = plan_agent.modify_task(index, new_subtask)
if result is None:
return "\n".join(plan_agent.get_subtasks())
else:
return result
def add_subtask(new_task):
plan_agent.add_task(new_task)
return "\n".join(plan_agent.get_subtasks())
def delete_subtask(index):
index = int(index) - 1 # Convert to zero-indexed
result = plan_agent.delete_task(index)
if result is None:
return "\n".join(plan_agent.get_subtasks())
else:
return result
def feedback_loop():
solved_tasks = solve_subtasks()
reflection_results = []
for solution in solved_tasks.split("\n\n"):
reflection_results.append(reflection(solution))
return "\n\n".join(reflection_results)
# Create the Gradio interface
with gr.Blocks() as interface:
gr.Markdown("## Task Breakdown and Workflow Using PlanAgent and ToolAgent")
# Input for task
task_input = gr.Textbox(label="Enter a task you'd like to break into subtasks")
# Button to break task into subtasks
break_task_btn = gr.Button("Break Task into Subtasks")
# Output for subtasks
subtasks_output = gr.Textbox(label="Generated Subtasks", lines=10)
break_task_btn.click(break_down_task, inputs=task_input, outputs=subtasks_output)
# Solve subtasks
solve_btn = gr.Button("Solve Subtasks")
solve_output = gr.Textbox(label="Solutions to Subtasks", lines=10)
solve_btn.click(solve_subtasks, outputs=solve_output)
# Feedback loop for reflection
feedback_btn = gr.Button("Reflection Feedback")
feedback_output = gr.Textbox(label="Reflection Feedback", lines=10)
feedback_btn.click(feedback_loop, outputs=feedback_output)
# Modification input
modify_index = gr.Number(label="Subtask Index to Modify")
modify_input = gr.Textbox(label="New Subtask Description")
modify_btn = gr.Button("Modify Subtask")
modify_output = gr.Textbox(label="Subtasks after Modification", lines=10)
modify_btn.click(modify_subtask, inputs=[modify_index, modify_input], outputs=modify_output)
# Adding a new task
new_task_input = gr.Textbox(label="Add a New Subtask")
add_task_btn = gr.Button("Add Subtask")
add_task_output = gr.Textbox(label="Subtasks after Adding", lines=10)
add_task_btn.click(add_subtask, inputs=new_task_input, outputs=add_task_output)
# Deleting a task
delete_index = gr.Number(label="Subtask Index to Delete")
delete_btn = gr.Button("Delete Subtask")
delete_output = gr.Textbox(label="Subtasks after Deletion", lines=10)
delete_btn.click(delete_subtask, inputs=delete_index, outputs=delete_output)
# Launch the Gradio app
interface.launch()