Test_Magus / agent.py
SergeyO7's picture
Update agent.py
355baca verified
raw
history blame
3.68 kB
from smolagents import CodeAgent, WikipediaSearchTool, LiteLLMModel, tool, load_tool # HfApiModel, OpenAIServerModel
import asyncio
import os
import yaml
# Simulated additional tools (implementation depends on external APIs or setup)
@tool
def GoogleSearchTool(query: str) -> str:
"""Tool for performing Google searches using Custom Search JSON API
Args:
query (str): Search query string to look up
Returns:
str: Formatted search results (simulated or real)
"""
def __init__(self):
self.api_key = os.environ.get("GOOGLE_API_KEY")
self.cse_id = os.environ.get("GOOGLE_CSE_ID")
if not self.api_key or not self.cse_id:
raise ValueError("GOOGLE_API_KEY and GOOGLE_CSE_ID must be set in environment variables.")
return f"Google search results for '{query}' (simulated)."
@tool
def ImageAnalysisTool(image_path: str) -> str:
"""Tool for analyzing images using computer vision
Args:
image_path: Path to image file
Returns:
Simulated image analysis results
"""
def analyze(self, image_path: str) -> str:
# Placeholder: Use Google Vision API or similar in real implementation
return f"Analyzed image at '{image_path}' (simulated description)."
@tool
def LocalFileAudioTool(file_path: str) -> str:
"""Tool for transcribing audio files
Args:
file_path: Path to audio file
Returns:
Simulated transcription text
"""
def transcribe(self, file_path: str) -> str:
# Placeholder: Use speech recognition library like SpeechRecognition in real setup
return f"Transcribed audio from '{file_path}' (simulated transcription)."
class MagAgent:
def __init__(self):
"""Initialize the MagAgent with search tools."""
print("Initializing MagAgent with search tools...")
model = LiteLLMModel(
model_id="gemini/gemini-2.0-flash-lite",
api_key= os.environ.get("GEMINI_KEY"),
max_tokens=8192
)
# Load prompt templates
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
self.agent = CodeAgent(
model= model,
tools=[
GoogleSearchTool(),
WikipediaSearchTool(),
ImageAnalysisTool(),
LocalFileAudioTool()
]
)
print("MagAgent initialized.")
async def __call__(self, question: str) -> str:
"""Process a question asynchronously using the MagAgent."""
print(f"MagAgent received question (first 50 chars): {question[:50]}...")
try:
# Define a task with fallback search logic
task = (
f"Answer the following question accurately and concisely: {question}\n"
)
response = await asyncio.to_thread(
self.agent.run,
task=task
)
# Ensure response is a string, fixing the integer error
response = str(response) if response is not None else "No answer found."
if not response or "No Wikipedia page found" in response:
# Fallback response if search fails
response = "Unable to retrieve exact data. Please refine the question or check external sources."
print(f"MagAgent response: {response[:50]}...")
return response
except Exception as e:
error_msg = f"Error processing question: {str(e)}. Check API key or network connectivity."
print(error_msg)
return error_msg