Spaces:
Sleeping
Sleeping
| """ | |
| OpenRouter Chatbot – elenco dinamico completo | |
| Run: gradio app.py | |
| """ | |
| import os | |
| import functools | |
| import requests | |
| import gradio as gr | |
| # ------------------------------------------------------------------ | |
| # Configurazione | |
| # ------------------------------------------------------------------ | |
| OPENROUTER_API_KEY = os.getenv( | |
| "OPENROUTER_API_KEY", | |
| "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" | |
| ) | |
| # ------------------------------------------------------------------ | |
| # Utility per ottenere l’elenco modelli | |
| # ------------------------------------------------------------------ | |
| def fetch_models() -> list[str]: | |
| """ | |
| Restituisce la lista completa di modelli offerti da OpenRouter. | |
| Il decorator @lru_cache la memorizza in cache per tutta la durata | |
| del processo (si aggiorna solo al riavvio del container). | |
| """ | |
| headers = {"Authorization": f"Bearer {OPENROUTER_API_KEY}"} | |
| try: | |
| resp = requests.get( | |
| "https://openrouter.ai/api/v1/models", | |
| headers=headers, | |
| timeout=15 | |
| ) | |
| resp.raise_for_status() | |
| data = resp.json() | |
| models = sorted(m["id"] for m in data["data"]) | |
| return models | |
| except Exception as e: | |
| gr.Warning(f"Impossibile scaricare l’elenco modelli: {e}") | |
| return ["openai/gpt-4-turbo"] # fallback statico | |
| # ------------------------------------------------------------------ | |
| # Funzione di chiamata al modello | |
| # ------------------------------------------------------------------ | |
| def chat_with_openrouter(prompt: str, model: str): | |
| headers = { | |
| "Authorization": f"Bearer {OPENROUTER_API_KEY}", | |
| "Content-Type": "application/json" | |
| } | |
| payload = { | |
| "model": model, | |
| "messages": [{"role": "user", "content": prompt}], | |
| "max_tokens": 4096, | |
| "temperature": 0.7, | |
| } | |
| try: | |
| resp = requests.post( | |
| "https://openrouter.ai/api/v1/chat/completions", | |
| headers=headers, | |
| json=payload, | |
| timeout=60 | |
| ) | |
| resp.raise_for_status() | |
| return resp.json()["choices"][0]["message"]["content"] | |
| except Exception as e: | |
| return f"❌ Errore: {e}" | |
| # ------------------------------------------------------------------ | |
| # Interfaccia Gradio | |
| # ------------------------------------------------------------------ | |
| def build_interface(): | |
| models = fetch_models() | |
| with gr.Blocks(title="NotExistChatter – Tutti i modelli") as demo: | |
| gr.Markdown("🤖project Adam🤖") | |
| gr.Markdown("Il menù mostra **tutti** i modelli disponibili.") | |
| with gr.Row(): | |
| model_dropdown = gr.Dropdown( | |
| choices=models, | |
| value=models[0] if models else None, | |
| label="Modello", | |
| allow_custom_value=False, | |
| interactive=True | |
| ) | |
| prompt_box = gr.Textbox( | |
| label="Prompt", | |
| placeholder="Scrivi qui il tuo messaggio...", | |
| lines=4, | |
| max_lines=10 | |
| ) | |
| output_box = gr.Textbox( | |
| label="Risposta", | |
| interactive=False, | |
| lines=15, | |
| max_lines=20 | |
| ) | |
| send_btn = gr.Button("Invia", variant="primary") | |
| send_btn.click( | |
| fn=chat_with_openrouter, | |
| inputs=[prompt_box, model_dropdown], | |
| outputs=output_box | |
| ) | |
| prompt_box.submit( | |
| fn=chat_with_openrouter, | |
| inputs=[prompt_box, model_dropdown], | |
| outputs=output_box | |
| ) | |
| return demo | |
| # Lancia l’interfaccia | |
| if __name__ == "__main__": | |
| build_interface().launch() |