Spaces:
Sleeping
Sleeping
File size: 3,736 Bytes
707ec96 289e125 707ec96 289e125 707ec96 ae68c70 707ec96 ae68c70 289e125 f95f6a4 289e125 c0705f0 707ec96 c0705f0 f95f6a4 c0705f0 f95f6a4 289e125 f95f6a4 289e125 f95f6a4 ae68c70 94b323b 9142873 707ec96 289e125 f5dcbeb 707ec96 94b323b 707ec96 f95f6a4 060bc2f 289e125 060bc2f 289e125 f95f6a4 707ec96 f95f6a4 707ec96 f95f6a4 707ec96 f95f6a4 707ec96 f95f6a4 707ec96 6f06d33 707ec96 289e125 707ec96 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# app.py
import os
from fastapi import FastAPI
from dotenv import load_dotenv
from huggingface_hub.inference._mcp.agent import Agent
import gradio as gr
import uvicorn
from fastapi.responses import RedirectResponse
from fastapi.middleware.cors import CORSMiddleware
from typing import Optional, Literal
load_dotenv()
HF_TOKEN = os.getenv("HF_TOKEN")
HF_MODEL = os.getenv("HF_MODEL", "google/gemma-2-2b")
app = FastAPI(title="Model Card Chatbot")
app.add_middleware(
CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]
)
agent_instance: Optional[Agent] = None
DEFAULT_PROVIDER: Literal['hf-inference'] = "hf-inference"
async def get_agent():
global agent_instance
if agent_instance is None and HF_TOKEN:
print("🔧 Creating Agent...")
try:
agent = Agent(
model=HF_MODEL,
provider=DEFAULT_PROVIDER,
api_key=HF_TOKEN,
servers=[{
"type": "stdio",
"config": {
"command": "python",
"args": ["mcp_server.py"],
"cwd": ".",
"env": {"HF_TOKEN": HF_TOKEN}
}
}]
)
await agent.load_tools()
agent_instance = agent
print("✅ Agent is ready!")
except Exception as e:
print(f"❌ Failed to create agent: {str(e)}")
return agent_instance
@app.on_event("startup")
async def startup_event():
await get_agent()
def chat_function(user_message, history, model_id):
global agent_instance
prompt = f"""
You're an assistant helping with Hugging Face model cards.
First, run the tool `read_model_card` on repo_id `{model_id}` to get the model card.
Then answer this user question based on the model card:
User question: {user_message}
"""
try:
response = ""
outputs = agent_instance.run(prompt)
for output in outputs:
if hasattr(output, "content") and output.content:
response = output.content
if not response:
response = "⚠️ Sorry, no answer generated."
# Append as new OpenAI-style message
history = history + [{"role": "user", "content": user_message}]
history.append({"role": "assistant", "content": response})
except Exception as e:
history = history + [{"role": "user", "content": user_message}]
history.append({"role": "assistant", "content": f"⚠️ Error: {str(e)}"})
return history, ""
def create_gradio_app():
with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo"), title="🤖 Model Card Chatbot") as demo:
gr.Markdown("""
# 🤖 **Model Card Chatbot**
_Ask anything about a Hugging Face model's card_
""")
chatbot = gr.Chatbot(label="Chat", type="messages", show_copy_button=True, height=400)
with gr.Row():
model_id = gr.Textbox(label="Model ID", value="google/gemma-2-2b", scale=2)
user_input = gr.Textbox(
label="Your Question",
placeholder="e.g., What dataset was it trained on?",
scale=4
)
ask_button = gr.Button("🔍 Ask", scale=1)
ask_button.click(
fn=chat_function,
inputs=[user_input, chatbot, model_id],
outputs=[chatbot, user_input]
)
return demo
gradio_app = create_gradio_app()
app = gr.mount_gradio_app(app, gradio_app, path="/")
@app.get("/")
async def root():
return RedirectResponse("/")
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=7860, reload=True)
|