mjschock's picture
Refactor app.py to import main from main_v2.py, enhancing modularity. Introduce main_v2.py with a new agent implementation, including OpenTelemetry integration and YAML-based prompt templates. Update requirements.txt to reflect the latest smolagents version. Add tasks.json for VSCode to streamline development workflows.
a60b872 unverified
raw
history blame
3.13 kB
import importlib
import logging
import os
import requests
import yaml
from dotenv import find_dotenv, load_dotenv
from litellm._logging import _disable_debugging
from openinference.instrumentation.smolagents import SmolagentsInstrumentor
from phoenix.otel import register
# from smolagents import CodeAgent, LiteLLMModel, LiteLLMRouterModel
from smolagents import CodeAgent, LiteLLMModel
from smolagents.default_tools import DuckDuckGoSearchTool, VisitWebpageTool
from smolagents.monitoring import LogLevel
from agents import create_data_analysis_agent, create_media_agent, create_web_agent
from utils import extract_final_answer
_disable_debugging()
# Configure OpenTelemetry with Phoenix
register()
SmolagentsInstrumentor().instrument()
logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
load_dotenv(find_dotenv())
API_BASE = os.getenv("API_BASE")
API_KEY = os.getenv("API_KEY")
MODEL_ID = os.getenv("MODEL_ID")
model = LiteLLMModel(
api_base=API_BASE,
api_key=API_KEY,
model_id=MODEL_ID,
)
web_agent = create_web_agent(model)
data_agent = create_data_analysis_agent(model)
media_agent = create_media_agent(model)
prompt_templates = yaml.safe_load(
importlib.resources.files("smolagents.prompts")
.joinpath("code_agent.yaml")
.read_text()
)
agent = CodeAgent(
# add_base_tools=True,
additional_authorized_imports=[
"json",
"pandas",
"numpy",
"re",
# "requests"
# "urllib.request",
],
# max_steps=10,
# managed_agents=[web_agent, data_agent, media_agent],
model=model,
prompt_templates=prompt_templates,
tools=[
# web_search,
# perform_calculation,
DuckDuckGoSearchTool(max_results=1),
VisitWebpageTool(max_output_length=256),
],
step_callbacks=None,
verbosity_level=LogLevel.ERROR,
)
agent.visualize()
def main(task: str):
result = agent.run(
additional_args=None,
images=None,
max_steps=3,
reset=True,
stream=False,
task=task,
)
logger.info(f"Result: {result}")
return extract_final_answer(result)
if __name__ == "__main__":
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
api_url = DEFAULT_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
response = requests.get(questions_url, timeout=15)
response.raise_for_status()
questions_data = response.json()
for question_data in questions_data[:1]:
file_name = question_data["file_name"]
level = question_data["Level"]
question = question_data["question"]
task_id = question_data["task_id"]
logger.info(f"Question: {question}")
# logger.info(f"Level: {level}")
if file_name:
logger.info(f"File Name: {file_name}")
# logger.info(f"Task ID: {task_id}")
final_answer = main(question)
logger.info(f"Final Answer: {final_answer}")
logger.info("--------------------------------")