hashiruAI / tools /ask_agent_tool.py
Harshil Patel
add budget manager and bug fixes
8cf77a3
raw
history blame
2.75 kB
import importlib
from CEO.budget_manager import BudgetManager
__all__ = ['AskAgent']
class AskAgent():
dependencies = ["ollama==0.4.7",
"pydantic==2.11.1",
"pydantic_core==2.33.0"]
inputSchema = {
"name": "AskAgent",
"description": "Asks an AI agent a question and gets a response. The agent must be created using the AgentCreator tool before using this tool.",
"parameters": {
"type": "object",
"properties": {
"agent_name": {
"type": "string",
"description": "Name of the AI agent that is to be asked a question. This name cannot have spaces or special characters. It should be a single word.",
},
"prompt": {
"type": "string",
"description": "This is the prompt that will be used to ask the agent a question. It should be a string that describes the question to be asked.",
}
},
"required": ["agent_name", "prompt"],
}
}
def does_agent_exist(self, ollama, agent_name):
all_agents = [a.model for a in ollama.list().models]
if agent_name in all_agents or f'{agent_name}:latest' in all_agents:
return True
return False
def run(self, **kwargs):
print("Asking agent a question")
agent_name = kwargs.get("agent_name")
prompt = kwargs.get("prompt")
ollama = importlib.import_module("ollama")
agent_question_cost = 20
budget_manager = BudgetManager()
print("budget_manager_instance:", budget_manager)
if not budget_manager.can_spend(agent_question_cost):
return {
"status": "error",
"message": f"Do not have enough budget to ask the agent a question. Asking the agent costs {agent_question_cost} but only {budget_manager.get_current_remaining_budget()} is remaining",
"output": None
}
if not self.does_agent_exist(ollama, agent_name):
print("Agent does not exist")
return {
"status": "error",
"message": "Agent does not exists",
"output": None
}
agent_response = ollama.chat(
model=agent_name,
messages=[{"role": "user", "content": prompt}],
)
print("Agent response", agent_response.message.content)
return {
"status": "success",
"message": "Agent has replied to the given prompt",
"output": agent_response.message.content,
"current_expense": budget_manager.get_current_expense()
}