fugusashi / app.py
GautamKishore's picture
Fix Gradio 6 API — add api_name and client usage
beb22ec verified
Raw
History Blame Contribute Delete
4.05 kB
import gradio as gr
import numpy as np
import sys
import os
import json
import time
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "src"))
from fugusashi.coordinator import CMAESRouter, Task
from fugusashi.dataset import PreferenceDataset, seed_default_dataset
from fugusashi.federated import FederatedRouter, RoutingExplainer
# Initialize components
router = CMAESRouter(population_size=16, n_generations=30)
ds = PreferenceDataset(data_dir="/tmp/hf_space")
seed_default_dataset(ds)
tasks = [Task(p.prompt, p.category) for p in ds.preferences]
router.evolve(tasks, fast=True)
explainer = RoutingExplainer()
def route_prompt(prompt, strategy):
if not prompt:
return "Please enter a prompt."
if strategy == "CMA-ES Coordinator":
result = router.route(prompt)
explanation = explainer.explain(prompt, result, result.scores)
return explanation
else:
available = {
"gpt-oss-120b": {"cost_per_input_token": 0, "cost_per_output_token": 0, "capabilities": ["chat", "code", "reasoning"]},
"nemotron-3-ultra": {"cost_per_input_token": 0, "cost_per_output_token": 0, "capabilities": ["chat", "code", "reasoning"]},
"hermes-3-405b": {"cost_per_input_token": 0, "cost_per_output_token": 0, "capabilities": ["chat", "reasoning", "creative"]},
"lfm-2.5-1.2b": {"cost_per_input_token": 0, "cost_per_output_token": 0, "capabilities": ["chat", "code"]},
}
from fugusashi.router import EnsembleRouter
ensemble = EnsembleRouter()
result = ensemble.route(prompt, [{"role": "user", "content": prompt}], available)
explanation = explainer.explain(prompt, type('obj', (), {'model': result.model, 'confidence': result.confidence, 'scores': result.scores, 'strategy': result.strategy, 'latency_ms': result.latency_ms})(), result.scores)
return explanation
def get_stats():
stats = router.get_stats()
return f"""**CMA-ES Coordinator Stats**
- Generation: {stats['generation']}
- Best fitness: {stats['best_fitness']:.4f}
- Sigma: {stats['sigma']:.4f}
- Models: {', '.join(stats['model_names'])}
- Training tasks: {stats['history_length']}
"""
with gr.Blocks(
title="Fugusashi Router Demo",
theme=gr.themes.Soft(primary_hue="red"),
) as demo:
gr.Markdown("# Fugusashi — Intelligent Model Router")
gr.Markdown("*Like Sakana Fugu. But Free. And Yours.*")
with gr.Row():
with gr.Column():
prompt = gr.Textbox(
label="Prompt",
placeholder="Write a Python function to sort a list...",
lines=3,
)
strategy = gr.Radio(
["CMA-ES Coordinator", "Ensemble (Cost+Similarity)"],
value="CMA-ES Coordinator",
label="Routing Strategy",
)
route_btn = gr.Button("Route")
with gr.Column():
output = gr.Markdown(label="Routing Decision")
route_btn.click(fn=route_prompt, inputs=[prompt, strategy], outputs=[output])
with gr.Row():
stats_btn = gr.Button("Show Coordinator Stats")
stats_output = gr.Markdown()
stats_btn.click(fn=get_stats, outputs=[stats_output])
gr.Markdown("## Try these prompts")
examples = [
["Write a Python class for a binary tree", "CMA-ES Coordinator"],
["What is 2+2?", "CMA-ES Coordinator"],
["Explain quantum entanglement simply", "CMA-ES Coordinator"],
["Write a bash script to backup files", "CMA-ES Coordinator"],
["Tell me a joke", "CMA-ES Coordinator"],
["Explain the theory of relativity", "CMA-ES Coordinator"],
]
gr.Examples(examples=examples, inputs=[prompt, strategy])
gr.Markdown("""
## API Usage
```bash
pip install gradio_client
from gradio_client import Client
client = Client("eulogik/fugusashi")
result = client.predict("Write a Python function", "CMA-ES Coordinator", api_name="/route_prompt")
```
""")
demo.launch()