Spaces:
Runtime error
Runtime error
import base64 | |
import io | |
import gradio as gr | |
from fastapi import FastAPI | |
from fastapi.middleware.cors import CORSMiddleware | |
from pydantic import BaseModel | |
from agent import function_caller | |
from client import HybridClient | |
app = FastAPI() | |
hclient = HybridClient() | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], | |
allow_credentials=True, | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
class ChatQuery(BaseModel): | |
query: str | |
collection: str | |
async def chat(query: ChatQuery): | |
result = await function_caller(query.query, query.collection, hclient) | |
if isinstance(result, str): | |
return {"text": result} | |
elif isinstance(result, bytes) or (isinstance(result, str) and result.startswith("data:audio")): | |
if isinstance(result, bytes): | |
audio_b64 = base64.b64encode(result).decode() | |
else: | |
audio_b64 = result.split(",")[1] # Remove the "data:audio/wav;base64," prefix | |
return {"audio": audio_b64} | |
else: | |
return {"error": "Unexpected result type"} | |
async def gradio_interface(input_text, grade, subject, chapter): | |
collection = f"{grade}_{subject.lower()}_{chapter}" | |
response = await chat(ChatQuery(query=input_text, collection=collection)) | |
if "text" in response: | |
return response["text"], None | |
elif "audio" in response: | |
audio_data = base64.b64decode(response["audio"]) | |
return "Audio response generated", (44100, io.BytesIO(audio_data)) | |
else: | |
return "Unexpected response format", None | |
iface = gr.Interface( | |
fn=gradio_interface, | |
inputs=[ | |
gr.Textbox(lines=2, placeholder="Enter your question here..."), | |
gr.Dropdown(choices=["1", "2", "3", "4", "5", "6", "7", "9", "10", "11", "12"], label="Grade", value="9", interactive=True), | |
gr.Dropdown(choices=["Math", "Science", "History"], label="Subject", value="Science", interactive=True), | |
gr.Dropdown(choices=["1", "2", "3", "4", "5", "6", "7", "9", "10", "11", "12", "13", "14", "15", "16"], label="Chapter", value="11", interactive=True), | |
], | |
outputs=[gr.Textbox(label="Response"), gr.Audio(label="Audio Response")], | |
title="Agentic RAG Chatbot", | |
description="Ask a question and get an answer from the chatbot. The response may be text or audio.", | |
) | |
app = gr.mount_gradio_app(app, iface, path="/") | |
if __name__ == "__main__": | |
import uvicorn | |
uvicorn.run(app, host="0.0.0.0", port=8000) | |