agents-workshop / app.py
antoniomtz's picture
Update app.py
ce3bf23 verified
import os
import json
import gradio as gr
import requests
from dotenv import load_dotenv
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI
# Load environment variables
load_dotenv()
# Get OpenRouter token
openrouter_token = os.getenv("OPENROUTER_API_KEY")
if not openrouter_token:
raise ValueError("OpenRouter token not found. Configure OPENROUTER_API_KEY in your environment variables")
# Define weather function with static data
def get_current_weather(location: str, unit: str = "fahrenheit") -> dict:
"""
Get the current weather in a given location
Args:
location (str): The city name, e.g. San Francisco, Tokyo
unit (str): The unit of temperature, either celsius or fahrenheit
Returns:
dict: Weather information including location, temperature and unit
"""
location = location.lower()
if "tokyo" in location:
return {"location": "Tokyo", "temperature": "10", "unit": "celsius"}
elif "san francisco" in location:
return {"location": "San Francisco", "temperature": "72", "unit": "fahrenheit"}
elif "paris" in location:
return {"location": "Paris", "temperature": "22", "unit": "celsius"}
else:
return {"location": location, "temperature": "unknown", "unit": unit}
# Create a tool for the agent
weather_tool = FunctionTool.from_defaults(
name="get_current_weather",
fn=get_current_weather,
description="Get the current weather in a given location"
)
# Custom OpenRouter implementation using OpenAI-compatible interface
class OpenRouterLLM(OpenAI):
def __init__(self, model_name="qwen/qwen-2.5-coder-32b-instruct:free", temperature=0.7, max_tokens=512, api_key=None):
# Initialize with custom base URL and model name
super().__init__(
model=model_name,
temperature=temperature,
max_tokens=max_tokens,
api_key=api_key,
api_base="https://openrouter.ai/api/v1",
additional_headers={
"HTTP-Referer": "weather-assistant-app",
"X-Title": "Weather Assistant"
}
)
# Configure the language model with OpenRouter
llm = OpenRouterLLM(
model_name="qwen/qwen-2.5-coder-32b-instruct:free",
temperature=0.7,
max_tokens=512,
api_key=openrouter_token
)
# Create the agent with an appropriate system prompt
agent = ReActAgent.from_tools(
[weather_tool],
llm=llm,
verbose=False
)
def respond(message, history):
# Execute the agent with user input
response = agent.chat(message)
return str(response)
# Create Gradio interface
with gr.Blocks(title="Weather Assistant") as demo:
gr.Markdown("# 🌤️ Weather Assistant")
gr.Markdown("### Ask about the weather in Tokyo, San Francisco, or Paris")
chatbot = gr.ChatInterface(
respond,
examples=[
"What's the weather like in Tokyo?",
"How's the weather in San Francisco?",
"Tell me about the current weather in Paris",
"What should I wear in Tokyo based on the weather?",
"Is it warm in San Francisco?"
],
title="Chat with Weather Assistant"
)
gr.Markdown("### Built with LlamaIndex and OpenRouter API")
# Launch the application
if __name__ == "__main__":
demo.launch()