from typing import List
from schemas.goal_schema import Goal
from agent_utils.llm_interface import call_llm
from schemas.agent_schema import Agent
def find_best_goal(user_input: str, available_goals: List[Goal]) -> Goal:
goal_list_str = "\n".join(
f"{goal.name}: {goal.description}" for goal in available_goals
)
prompt = f"""
You are helping a user choose a goal that best fits their situation.
User said: "{user_input}"
Here are the available goals:
{goal_list_str}
Return ONLY the most relevant goal name (e.g., "order_coffee").
"""
response = call_llm(prompt).strip().splitlines()[0].split()[0]
match = next((g for g in available_goals if g.name == response), None)
return match or available_goals[0] # fallback
def find_best_matching_agent(goal: Goal, available_agents: List[Agent]) -> Agent:
agent_list_str = "\n".join(
f"{agent.name}: {agent.personality}, {agent.style}" for agent in available_agents
)
prompt = f"""
Given the user’s goal: "{goal.description}"
Choose the best agent from this list to help with that goal:
{agent_list_str}
Return ONLY the agent name (e.g., "Jamie").
"""
response = call_llm(prompt).strip().splitlines()[0].split()[0]
match = next((a for a in available_agents if a.name == response), None)
return match or available_agents[0]