from fastapi import FastAPI, Request, Form from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates import requests import json import argparse import uvicorn # Diese Import-Zeile ist wichtig! app = FastAPI() templates = Jinja2Templates(directory="templates") OLLAMA_API_URL = "http://localhost:11434/api/generate" # Passe dies bei Bedarf an deine Ollama-URL an @app.get("/", response_class=HTMLResponse) async def read_root(request: Request): """ Zeigt das Haupt-Webinterface mit dem Eingabefeld an. """ return templates.TemplateResponse( "index.html", {"request": request, "response": None} ) @app.post("/generate", response_class=HTMLResponse) async def generate_text(request: Request, prompt: str = Form(...)): """ Verarbeitet die Anfrage, sendet sie an Ollama und zeigt die Antwort an. """ headers = {"Content-Type": "application/json"} payload = { "model": "llama3.2-vision", # Passe dies an das Modell an, das du mit Ollama verwendest (z.B. "mistral", "phi3") "prompt": prompt, "stream": False, # Setze dies auf True, wenn du gestreamte Antworten verarbeiten möchtest } response_text = "Fehler bei der Kommunikation mit dem LLM." try: ollama_response = requests.post( OLLAMA_API_URL, headers=headers, data=json.dumps(payload) ) ollama_response.raise_for_status() # Löst einen HTTPError für schlechte Antworten (4xx oder 5xx) aus data = ollama_response.json() if "response" in data: response_text = data["response"] else: response_text = f"Unerwartete Antwort von Ollama: {data}" except requests.exceptions.ConnectionError: response_text = "Konnte keine Verbindung zum Ollama-Server herstellen. Stelle sicher, dass er läuft und unter der richtigen Adresse erreichbar ist." except requests.exceptions.RequestException as e: response_text = f"Ein Fehler ist aufgetreten: {e}" return templates.TemplateResponse( "index.html", {"request": request, "response": response_text, "prompt_value": prompt}, ) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("-p", "--port", dest="port", help="The port to use. Default: 8000", type=int, default=8000 ) args = parser.parse_args() uvicorn.run(app, host="0.0.0.0", port=args.port)