From afc7775820cf1f06bdce9bb4bb2b3eb18ae3dc01 Mon Sep 17 00:00:00 2001 From: "info@pi-farm.de" Date: Thu, 5 Mar 2026 22:47:08 +0000 Subject: [PATCH] main.py aktualisiert --- main.py | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 427fc1f..7677199 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,7 @@ import sqlite3 import asyncio import openai import re +import httpx from google import genai from google.genai import types import json @@ -258,7 +259,42 @@ async def update_settings(request: Request): set_key(ENV_FILE, "OLLAMA_BASE_URL", ollama_url) return {"status": "success"} - + +@app.get("/api/models") +async def get_models(provider: str, url: str = None): + try: + models = [] + + if provider == "ollama" and url: + # Das Backend hat keine CORS-Probleme und fragt Ollama direkt + clean_url = url.replace("/v1", "").rstrip("/") + async with httpx.AsyncClient() as client: + response = await client.get(f"{clean_url}/api/tags", timeout=5.0) + data = response.json() + models = [m["name"] for m in data.get("models", [])] + + elif provider == "openai": + # Hier greift das Backend auf deinen OpenAI API-Key zu + import openai + client = openai.AsyncOpenAI(api_key=OPENAI_API_KEY) + response = await client.models.list() + # Nur GPT-Modelle filtern, um die Liste sauber zu halten + models = [m.id for m in response.data if "gpt" in m.id or "o1" in m.id] + models.sort() + + elif provider == "google": + # Hier greift das Backend auf deinen Google API-Key zu + import google.generativeai as genai + genai.configure(api_key=GOOGLE_API_KEY) + # Holt alle verfügbaren Modelle, die Text generieren können + models = [m.name.replace("models/", "") for m in genai.list_models() if "generateContent" in m.supported_generation_methods] + + return {"models": models} + + except Exception as e: + print(f"Fehler beim Abrufen der Modelle für {provider}: {str(e)}") + return {"models": []} # Gibt eine leere Liste zurück -> Frontend nutzt Fallback + # --- WebSockets --- @app.websocket("/ws/install_logs")