main.py aktualisiert

This commit is contained in:
2026-03-06 16:29:38 +00:00
parent a6fcedcee9
commit bcd705bc93

46
main.py
View File

@@ -332,21 +332,49 @@ async def update_settings(request: Request):
return {"status": "success"} return {"status": "success"}
@app.get("/api/models") @app.get("/api/models")
async def get_models(provider: str): async def get_models(provider: str, url: str = None):
try: try:
if provider == "ollama": models = []
url = OLLAMA_BASE_URL.replace("/v1", "").rstrip("/")
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: async with httpx.AsyncClient() as client:
r = await client.get(f"{url}/api/tags", timeout=5.0) response = await client.get(f"{clean_url}/api/tags", timeout=5.0)
return {"models": [m["name"] for m in r.json().get("models", [])]} data = response.json()
models = [m["name"] for m in data.get("models", [])]
elif provider == "openai": 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) client = openai.AsyncOpenAI(api_key=OPENAI_API_KEY)
r = await client.models.list() response = await client.models.list()
return {"models": sorted([m.id for m in r.data if "gpt" in m.id or "o1" in m.id])} # 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": elif provider == "google":
if not GOOGLE_API_KEY:
return {"models": ["API-Key fehlt"]}
client = genai.Client(api_key=GOOGLE_API_KEY) 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])} models = []
except: return {"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__": if __name__ == "__main__":
import uvicorn import uvicorn