jdmorzan's picture
Update app.py
39de946 verified
# app.py
import asyncio
import gradio as gr
from typing import List, Tuple
from agents import FileSearchTool, Agent, ModelSettings, TResponseInputItem, Runner, RunConfig, trace
import os
from dotenv import load_dotenv
load_dotenv()
VECTOR_STORE_ID = os.getenv("VECTOR_STORE_ID")
WORKFLOW_ID = os.getenv("WORKFLOW_ID")
# --- Tools & Agent setup ---
file_search = FileSearchTool(
vector_store_ids=[VECTOR_STORE_ID]
)
my_agent = Agent(
name="My agent",
instructions=(
"Ante la pregunta del alumno sobre su calendario academico, consulta la herramienta de reglamentos_upn y por favor respondele como si fueras Yoda. "
),
model="gpt-4.1-mini",
tools=[file_search],
model_settings=ModelSettings(
temperature=1,
top_p=1,
max_tokens=2048,
store=True
)
)
def _to_items_from_history(history: List[Tuple[str, str]]) -> List[TResponseInputItem]:
"""Convert Gradio chat history to Agent format."""
items: List[TResponseInputItem] = []
for user_msg, assistant_msg in history:
if user_msg:
items.append({
"role": "user",
"content": [{"type": "input_text", "text": user_msg}],
})
if assistant_msg:
items.append({
"role": "assistant",
"content": [{"type": "output_text", "text": assistant_msg}],
})
return items
async def agent_reply(message: str, history: List[Tuple[str, str]]):
"""Handler for Gradio ChatInterface."""
conversation_items = _to_items_from_history(history)
conversation_items.append({
"role": "user",
"content": [{"type": "input_text", "text": message}],
})
with trace("Gradio message"):
result = await Runner.run(
my_agent,
input=conversation_items,
run_config=RunConfig(trace_metadata={
"__trace_source__": "agent-builder",
"workflow_id": WORKFLOW_ID
})
)
return result.final_output_as(str)
# --- Updated Gradio ChatInterface ---
demo = gr.ChatInterface(
fn=agent_reply,
title="My agent (FileSearch-powered)",
description=(
"Este chat usa un agente con FileSearchTool. "
"Escribe tu pregunta y el agente buscará primero en el file search antes de responder."
),
examples=["¿Qué me puedes contar del reglamento?", "¿Puedo copiar"],
theme="soft",
submit_btn="Enviar"
# Removed clear_btn as it's not a valid parameter
)
# If you need to run the app
if __name__ == "__main__":
demo.launch()