From bcd705bc931fd410cb08a536686aa25b82d09ba2 Mon Sep 17 00:00:00 2001 From: "info@pi-farm.de" Date: Fri, 6 Mar 2026 16:29:38 +0000 Subject: [PATCH] main.py aktualisiert --- main.py | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 8d6ffa8..c4cea80 100644 --- a/main.py +++ b/main.py @@ -332,21 +332,49 @@ async def update_settings(request: Request): return {"status": "success"} @app.get("/api/models") -async def get_models(provider: str): +async def get_models(provider: str, url: str = None): try: - if provider == "ollama": - url = OLLAMA_BASE_URL.replace("/v1", "").rstrip("/") + 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: - r = await client.get(f"{url}/api/tags", timeout=5.0) - return {"models": [m["name"] for m in r.json().get("models", [])]} + 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": + if not OPENAI_API_KEY or "hier" in OPENAI_API_KEY: return {"models": []} + # Hier greift das Backend auf deinen OpenAI API-Key zu + import openai client = openai.AsyncOpenAI(api_key=OPENAI_API_KEY) - r = await client.models.list() - return {"models": sorted([m.id for m in r.data if "gpt" in m.id or "o1" in m.id])} + 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": + if not GOOGLE_API_KEY: + return {"models": ["API-Key fehlt"]} + client = genai.Client(api_key=GOOGLE_API_KEY) - return {"models": sorted([m.name.replace("models/", "") for m in client.models.list() if 'generateContent' in m.supported_actions])} - except: return {"models": []} + models = [] + + # Im neuen SDK (google-genai) heißt das Feld 'supported_actions' + for m in client.models.list(): + if 'generateContent' in m.supported_actions: + # Wir nehmen den Namen und entfernen das 'models/' Präfix + model_name = m.name.replace("models/", "") + models.append(model_name) + + models.sort() + + 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 if __name__ == "__main__": import uvicorn