main.py aktualisiert

This commit is contained in:
2026-03-05 10:24:15 +00:00
parent 5c75669f8a
commit d089955435

31
main.py
View File

@@ -13,6 +13,10 @@ from fastapi import FastAPI, WebSocket, BackgroundTasks, Request, Form, WebSocke
from fastapi.responses import RedirectResponse from fastapi.responses import RedirectResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from dotenv import load_dotenv
# Lade Umgebungsvariablen aus der .env Datei
load_dotenv()
app = FastAPI() app = FastAPI()
static_path = os.path.join(os.path.dirname(__file__), "static") static_path = os.path.join(os.path.dirname(__file__), "static")
@@ -23,12 +27,16 @@ SSH_KEY = os.path.expanduser("~/.ssh/id_rsa")
DB_PATH = "cluster.db" DB_PATH = "cluster.db"
chat_history = [] chat_history = []
# --- KI KONFIGURATION --- # --- KI KONFIGURATION (Werte aus .env laden) ---
AI_PROVIDER = "google" # "openai", "google" oder "ollama" AI_PROVIDER = os.getenv("AI_PROVIDER", "google").lower()
OPENAI_API_KEY = "dein-key" OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "")
GOOGLE_API_KEY = "dein-key" GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY", "")
OLLAMA_BASE_URL = "http://x.x.x.x:11434/v1" # IP deines Ollama-Servers OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL", "http://127.0.0.1:11434/v1")
# Modelle aus .env laden (mit Standardwerten als Fallback)
GOOGLE_MODEL = os.getenv("GOOGLE_MODEL", "gemini-2.5-flash")
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o")
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "llama3")
def get_system_prompt(): def get_system_prompt():
conn = get_db() conn = get_db()
@@ -48,7 +56,7 @@ async def get_ai_response(user_input, system_prompt):
# 1. Die neue User-Nachricht dem Gedächtnis hinzufügen # 1. Die neue User-Nachricht dem Gedächtnis hinzufügen
chat_history.append({"role": "user", "content": user_input}) chat_history.append({"role": "user", "content": user_input})
# 2. Gedächtnis auf die letzten 10 Nachrichten begrenzen # 2. Gedächtnis auf die letzten 30 Nachrichten begrenzen
chat_history = chat_history[-30:] chat_history = chat_history[-30:]
ai_msg = "" ai_msg = ""
@@ -59,16 +67,20 @@ async def get_ai_response(user_input, system_prompt):
messages = [{"role": "system", "content": system_prompt}] + chat_history messages = [{"role": "system", "content": system_prompt}] + chat_history
url = OLLAMA_BASE_URL if AI_PROVIDER == "ollama" else None url = OLLAMA_BASE_URL if AI_PROVIDER == "ollama" else None
key = "ollama" if AI_PROVIDER == "ollama" else OPENAI_API_KEY key = "ollama" if AI_PROVIDER == "ollama" else OPENAI_API_KEY
model_to_use = OLLAMA_MODEL if AI_PROVIDER == "ollama" else OPENAI_MODEL
client = openai.OpenAI(base_url=url, api_key=key) client = openai.OpenAI(base_url=url, api_key=key)
response = client.chat.completions.create( response = client.chat.completions.create(
model="gpt-4o" if AI_PROVIDER == "openai" else "llama3", model=model_to_use,
messages=messages messages=messages
) )
ai_msg = response.choices[0].message.content ai_msg = response.choices[0].message.content
elif AI_PROVIDER == "google": elif AI_PROVIDER == "google":
# Für Google Gemini # Für Google Gemini
if not GOOGLE_API_KEY:
return "Fehler: GOOGLE_API_KEY fehlt in der .env Datei!"
client = genai.Client(api_key=GOOGLE_API_KEY) client = genai.Client(api_key=GOOGLE_API_KEY)
# Wir müssen unser Array in das spezielle Google-Format umwandeln # Wir müssen unser Array in das spezielle Google-Format umwandeln
@@ -83,7 +95,7 @@ async def get_ai_response(user_input, system_prompt):
# Chat MIT dem übersetzten Gedächtnis starten # Chat MIT dem übersetzten Gedächtnis starten
chat = client.chats.create( chat = client.chats.create(
model='gemini-2.5-flash', model=GOOGLE_MODEL,
config=types.GenerateContentConfig(system_instruction=system_prompt), config=types.GenerateContentConfig(system_instruction=system_prompt),
history=google_history history=google_history
) )
@@ -101,9 +113,6 @@ async def get_ai_response(user_input, system_prompt):
return ai_msg return ai_msg
# return "Fehler: Kein KI-Provider konfiguriert."
# --- DATENBANK INITIALISIERUNG --- # --- DATENBANK INITIALISIERUNG ---
def init_db(): def init_db():
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)