Spaces:
Sleeping
Sleeping
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() | |