ai-operations-copilot / cli /tool_agent.py
daniel1028's picture
Clean initial commit (no data, no secrets)
e77665f
import os
from urllib import response
from dotenv import load_dotenv
from openai import OpenAI
from backend.app.tools.tool_registry import ToolRegistry
from configs.logging_config import setup_logger
from configs.settings import config
load_dotenv()
logger = setup_logger("tool_agent")
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
MODEL_NAME = config["llm"]["model"]
class ToolAgent:
def __init__(self):
self.registry = ToolRegistry()
def decide_tool_llm(self, query, llm_model=MODEL_NAME):
tools = [
"analyze_revenue_trend",
"compare_regions",
"detect_anomalies"
]
prompt = f"""
You are an AI routing agent.
Available tools:
- analyze_revenue_trend: Detect revenue increase or decrease
- compare_regions: Compare performance across regions
- detect_anomalies: Find unusual revenue patterns
User Query:
{query}
Return ONLY one tool name from the list above.
If no tool is relevant, return "NONE".
"""
response = client.chat.completions.create(
model=llm_model,
messages=[{"role": "user", "content": prompt}]
)
tool_name = response.choices[0].message.content.strip()
# ✅ Normalize output
tool_name = tool_name.replace('"', '').strip()
# ✅ Validate tool
if tool_name not in tools:
logger.warning(f"Invalid tool from LLM: {tool_name}")
return None
return tool_name
def decide_tool(self, query):
query = query.lower()
keywords = {
"analyze_revenue_trend": ["trend", "drop", "increase"],
"compare_regions": ["region", "area"],
"detect_anomalies": ["anomaly", "anomalies", "outlier", "unusual"]
}
for tool, words in keywords.items():
if any(word in query for word in words):
return tool
def run(self, query):
logger.info(f"User Query: {query}")
tool_name = self.decide_tool_llm(query)
logger.info(f"Selected Tool: {tool_name}")
if tool_name is None:
logger.warning("No tool matched. Falling back to LLM.")
if tool_name:
tool = self.registry.get_tool(tool_name)
tool_result = tool()
logger.info(f"Tool Result: {tool_result}")
prompt = f"""
You are an AI Operations Copilot.
User Question:
{query}
Tool Output:
{tool_result}
Explain clearly using the tool output.
Provide:
- Summary
- Key Insight
- Suggested Action
"""
else:
prompt = f"""
User Question:
{query}
Respond normally.
"""
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": prompt}]
)
output = response.choices[0].message.content
logger.info(f"Response: {output}")
return output
def run_cli():
agent = ToolAgent()
print("=== Tool Agent ===")
print("Type 'exit' to quit\n")
while True:
query = input("Enter your query: ")
if query.lower() == "exit":
break
result = agent.run(query)
print(f"\nAgent Response:\n{result}\n")
if __name__ == "__main__":
run_cli()