ManojParvatham's picture
Upload 5 files
ab9ff53 verified
import base64
import os
from pathlib import Path
from textwrap import dedent
from smolagents import CodeAgent, DuckDuckGoSearchTool, LiteLLMModel, VisitWebpageTool
from .tools import RetrieveCSVStorageTool, SpeechRecognitionTool, VisualQATool, WikiTool, fetch_text_content, read_excel
def configure_open_telemetry() -> None:
try:
from openinference.instrumentation.smolagents import SmolagentsInstrumentor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
except ImportError:
print("OpenTelemetry packages are not installed. Please install them to enable tracing.")
return None
try:
langfuse_public_key = os.environ["LANGFUSE_PUBLIC_KEY"]
langfuse_secret_key = os.environ["LANGFUSE_SECRET_KEY"]
except KeyError:
print("LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY must be set in the environment variables.")
return None
LANGFUSE_AUTH = base64.b64encode(f"{langfuse_public_key}:{langfuse_secret_key}".encode()).decode()
os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "https://cloud.langfuse.com/api/public/otel"
os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = f"Authorization=Basic {LANGFUSE_AUTH}"
trace_provider = TracerProvider()
trace_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter()))
SmolagentsInstrumentor().instrument(tracer_provider=trace_provider)
configure_open_telemetry()
wiki_storage_tool = RetrieveCSVStorageTool(
table_name="wiki",
init_storage=True,
storage_path="./storage",
)
wiki_agent = CodeAgent(
name="wiki_agent",
description= """A wiki agent that can search and retrieve information from Wikipedia.
It is specialized for handling wikipedia articles, and is recommended over web_agent for retrieving information from wikipedia.""",
model=LiteLLMModel(model_id="openrouter/qwen/qwen-2.5-coder-32b-instruct"),
tools=[
DuckDuckGoSearchTool(),
wiki_storage_tool,
WikiTool(storage=wiki_storage_tool.get_storage()),
],
max_steps=10,
additional_authorized_imports=["pandas"],
)
web_agent = CodeAgent(
name="web_agent",
description="A web agent that can search and visit webpages.",
model=LiteLLMModel(model_id="openrouter/qwen/qwen-2.5-coder-32b-instruct"),
tools=[
DuckDuckGoSearchTool(max_results=10),
VisitWebpageTool(),
],
verbosity_level=2,
max_steps=10,
)
manager_agent = CodeAgent(
name = "manager_agent",
model=LiteLLMModel(
model_id="openrouter/qwen/qwq-32b",
),
tools=[
fetch_text_content, # fetch text content from a URL
SpeechRecognitionTool(), # Audio to text
VisualQATool(), # Visual Question Answering
read_excel, # Read Excel files
],
managed_agents=[
wiki_agent,
web_agent,
],
additional_authorized_imports=["pandas", "requests"],
planning_interval=5,
verbosity_level=2,
max_steps=15,
)
def parse_file_name(file_base_url: str, file_name: str) -> str:
if file_name == "":
return "not provided"
return file_base_url + Path(file_name).stem
def prepare_for_input(question: dict, file_base_url: str) -> str:
input_text = dedent(f"""\
Question:
{question["question"]}
If necessary, use the following file (they may not be provided)
file_type: {Path(question["file_name"]).suffix}
file: {parse_file_name(file_base_url, question["file_name"])}
Video analysis tools are currently unavailable.
If the question is about analyzing the video (e.g. questions about Youtube link and mp4), answer 'No Answer'.""")
return input_text