From b37d1587705b60cbee1daa1668fda37fbfa05a60 Mon Sep 17 00:00:00 2001 From: Steve Androulakis Date: Sat, 15 Feb 2025 12:12:39 -0800 Subject: [PATCH] renaming workflows and activities --- activities/tool_activities.py | 6 +-- api/main.py | 12 ++--- backup_sessions.json | 50 +++++++++++++++++++ models/data_types.py | 4 +- scripts/end_chat.py | 6 +-- scripts/get_history.py | 4 +- scripts/run_worker.py | 8 +-- ...ool_workflow.py => agent_goal_workflow.py} | 16 +++--- 8 files changed, 80 insertions(+), 26 deletions(-) create mode 100644 backup_sessions.json rename workflows/{tool_workflow.py => agent_goal_workflow.py} (97%) diff --git a/activities/tool_activities.py b/activities/tool_activities.py index f08f202..35910a4 100644 --- a/activities/tool_activities.py +++ b/activities/tool_activities.py @@ -25,7 +25,7 @@ if os.environ.get("LLM_PROVIDER") == "ollama": class ToolActivities: @activity.defn - async def validate_llm_prompt( + async def agent_validatePrompt( self, validation_input: ValidationInput ) -> ValidationResult: """ @@ -78,7 +78,7 @@ class ToolActivities: prompt=validation_prompt, context_instructions=context_instructions ) - result = self.prompt_llm(prompt_input) + result = self.agent_toolPlanner(prompt_input) return ValidationResult( validationResult=result.get("validationResult", False), @@ -86,7 +86,7 @@ class ToolActivities: ) @activity.defn - def prompt_llm(self, input: ToolPromptInput) -> dict: + def agent_toolPlanner(self, input: ToolPromptInput) -> dict: llm_provider = os.environ.get("LLM_PROVIDER", "openai").lower() print(f"LLM provider: {llm_provider}") diff --git a/api/main.py b/api/main.py index f18e03d..128c1f7 100644 --- a/api/main.py +++ b/api/main.py @@ -4,8 +4,8 @@ from temporalio.client import Client from temporalio.exceptions import TemporalError from temporalio.api.enums.v1 import WorkflowExecutionStatus -from workflows.tool_workflow import ToolWorkflow -from models.data_types import CombinedInput, ToolWorkflowParams +from workflows.agent_goal_workflow import AgentGoalWorkflow +from models.data_types import CombinedInput, AgentGoalWorkflowParams from tools.goal_registry import goal_match_train_invoice from fastapi.middleware.cors import CORSMiddleware from shared.config import get_temporal_client, TEMPORAL_TASK_QUEUE @@ -94,7 +94,7 @@ async def get_conversation_history(): async def send_prompt(prompt: str): # Create combined input combined_input = CombinedInput( - tool_params=ToolWorkflowParams(None, None), + tool_params=AgentGoalWorkflowParams(None, None), agent_goal=goal_match_train_invoice, ) @@ -102,7 +102,7 @@ async def send_prompt(prompt: str): # Start (or signal) the workflow await temporal_client.start_workflow( - ToolWorkflow.run, + AgentGoalWorkflow.run, combined_input, id=workflow_id, task_queue=TEMPORAL_TASK_QUEUE, @@ -141,7 +141,7 @@ async def end_chat(): async def start_workflow(): # Create combined input combined_input = CombinedInput( - tool_params=ToolWorkflowParams(None, None), + tool_params=AgentGoalWorkflowParams(None, None), agent_goal=goal_match_train_invoice, ) @@ -149,7 +149,7 @@ async def start_workflow(): # Start the workflow with the starter prompt from the goal await temporal_client.start_workflow( - ToolWorkflow.run, + AgentGoalWorkflow.run, combined_input, id=workflow_id, task_queue=TEMPORAL_TASK_QUEUE, diff --git a/backup_sessions.json b/backup_sessions.json new file mode 100644 index 0000000..3efdb56 --- /dev/null +++ b/backup_sessions.json @@ -0,0 +1,50 @@ +{ + "$schema": "https://cdn.statically.io/gh/nguyenngoclongdev/cdn/main/schema/v10/terminal-keeper.json", + "theme": "tribe", + "active": "default", + "activateOnStartup": false, + "keepExistingTerminals": false, + "sessions": { + "default": [ + [ + { + "name": "frontend", + "autoExecuteCommands": true, + "commands": [ + "cd frontend && npx vite" + ] + }, + { + "name": "uvicorn", + "autoExecuteCommands": true, + "commands": [ + "poetry run uvicorn api.main:app --reload" + ] + } + ], + [ + { + "name": "agent worker", + "autoExecuteCommands": true, + "commands": [ + "poetry run python scripts/run_worker.py" + ] + }, + { + "name": "trains worker", + "autoExecuteCommands": true, + "commands": [ + "poetry run python scripts/run_legacy_worker.py" + ] + } + ], + { + "name": "trains_api", + "autoExecuteCommands": true, + "commands": [ + "poetry run python thirdparty/train_api.py" + ] + } + ] + } +} \ No newline at end of file diff --git a/models/data_types.py b/models/data_types.py index abe8799..6f331a1 100644 --- a/models/data_types.py +++ b/models/data_types.py @@ -4,14 +4,14 @@ from models.tool_definitions import AgentGoal @dataclass -class ToolWorkflowParams: +class AgentGoalWorkflowParams: conversation_summary: Optional[str] = None prompt_queue: Optional[Deque[str]] = None @dataclass class CombinedInput: - tool_params: ToolWorkflowParams + tool_params: AgentGoalWorkflowParams agent_goal: AgentGoal diff --git a/scripts/end_chat.py b/scripts/end_chat.py index c379eeb..4651d26 100644 --- a/scripts/end_chat.py +++ b/scripts/end_chat.py @@ -1,7 +1,7 @@ import asyncio -from workflows.tool_workflow import ToolWorkflow +from workflows.agent_goal_workflow import AgentGoalWorkflow async def main(): @@ -10,10 +10,10 @@ async def main(): workflow_id = "agent-workflow" - handle = client.get_workflow_handle_for(ToolWorkflow.run, workflow_id) + handle = client.get_workflow_handle_for(AgentGoalWorkflow.run, workflow_id) # Sends a signal to the workflow - await handle.signal(ToolWorkflow.end_chat) + await handle.signal(AgentGoalWorkflow.end_chat) if __name__ == "__main__": diff --git a/scripts/get_history.py b/scripts/get_history.py index 1015023..b31d616 100644 --- a/scripts/get_history.py +++ b/scripts/get_history.py @@ -1,7 +1,7 @@ import asyncio from shared.config import get_temporal_client -from workflows.tool_workflow import ToolWorkflow +from workflows.agent_goal_workflow import AgentGoalWorkflow async def main(): @@ -12,7 +12,7 @@ async def main(): handle = client.get_workflow_handle(workflow_id) # Queries the workflow for the conversation history - history = await handle.query(ToolWorkflow.get_conversation_history) + history = await handle.query(AgentGoalWorkflow.get_conversation_history) print("Conversation History") print(history) diff --git a/scripts/run_worker.py b/scripts/run_worker.py index d83f547..fb88ff1 100644 --- a/scripts/run_worker.py +++ b/scripts/run_worker.py @@ -5,7 +5,7 @@ import concurrent.futures from temporalio.worker import Worker from activities.tool_activities import ToolActivities, dynamic_tool_activity -from workflows.tool_workflow import ToolWorkflow +from workflows.agent_goal_workflow import AgentGoalWorkflow from shared.config import get_temporal_client, TEMPORAL_TASK_QUEUE @@ -21,10 +21,10 @@ async def main(): worker = Worker( client, task_queue=TEMPORAL_TASK_QUEUE, - workflows=[ToolWorkflow], + workflows=[AgentGoalWorkflow], activities=[ - activities.prompt_llm, - activities.validate_llm_prompt, + activities.agent_validatePrompt, + activities.agent_toolPlanner, dynamic_tool_activity, ], activity_executor=activity_executor, diff --git a/workflows/tool_workflow.py b/workflows/agent_goal_workflow.py similarity index 97% rename from workflows/tool_workflow.py rename to workflows/agent_goal_workflow.py index 95a8081..0eec89c 100644 --- a/workflows/tool_workflow.py +++ b/workflows/agent_goal_workflow.py @@ -11,7 +11,11 @@ from models.data_types import ConversationHistory, NextStep, ValidationInput with workflow.unsafe.imports_passed_through(): from activities.tool_activities import ToolActivities from prompts.agent_prompt_generators import generate_genai_prompt - from models.data_types import CombinedInput, ToolWorkflowParams, ToolPromptInput + from models.data_types import ( + CombinedInput, + AgentGoalWorkflowParams, + ToolPromptInput, + ) from shared.config import TEMPORAL_LEGACY_TASK_QUEUE @@ -31,7 +35,7 @@ class ToolData(TypedDict, total=False): @workflow.defn -class ToolWorkflow: +class AgentGoalWorkflow: """Workflow that manages tool execution with user confirmation and conversation history.""" def __init__(self) -> None: @@ -111,7 +115,7 @@ class ToolWorkflow: prompt=summary_prompt, context_instructions=summary_context ) self.conversation_summary = await workflow.start_activity_method( - ToolActivities.prompt_llm, + ToolActivities.agent_toolPlanner, summary_input, schedule_to_close_timeout=LLM_ACTIVITY_SCHEDULE_TO_CLOSE_TIMEOUT, ) @@ -121,7 +125,7 @@ class ToolWorkflow: workflow.continue_as_new( args=[ CombinedInput( - tool_params=ToolWorkflowParams( + tool_params=AgentGoalWorkflowParams( conversation_summary=self.conversation_summary, prompt_queue=self.prompt_queue, ), @@ -178,7 +182,7 @@ class ToolWorkflow: agent_goal=agent_goal, ) validation_result = await workflow.execute_activity( - ToolActivities.validate_llm_prompt, + ToolActivities.agent_validatePrompt, args=[validation_input], schedule_to_close_timeout=LLM_ACTIVITY_SCHEDULE_TO_CLOSE_TIMEOUT, start_to_close_timeout=LLM_ACTIVITY_START_TO_CLOSE_TIMEOUT, @@ -208,7 +212,7 @@ class ToolWorkflow: ) tool_data = await workflow.execute_activity( - ToolActivities.prompt_llm, + ToolActivities.agent_toolPlanner, prompt_input, schedule_to_close_timeout=LLM_ACTIVITY_SCHEDULE_TO_CLOSE_TIMEOUT, start_to_close_timeout=LLM_ACTIVITY_START_TO_CLOSE_TIMEOUT,