API bauen

Last modified by René Schmidt on 2025/03/17 22:08

1. Vorbereitung von OpenWhisper

Stellen Sie sicher, dass Ihre OpenWhisper-Installation auf der VM mit der IP-Adresse 192.168.10.217 läuft und über den Port 7860 erreichbar ist. Da OpenWhisper auf Gradio basiert, sollte die Weboberfläche unter http://192.168.10.217:7860 zugänglich sein.

2. Einrichtung eines API-Dienstes für OpenWhisper

Um OpenWhisper in OpenWebUI zu integrieren, benötigen Sie einen API-Dienst, der die Funktionen von OpenWhisper über eine RESTful API bereitstellt. Ein Beispiel hierfür ist das openedai-speech Projekt, das eine OpenAI-kompatible API für TTS bereitstellt.

docs.openwebui.com

Schritte zur Einrichtung von openedai-speech:

a. Repository klonen:

Schritt 2: Benötigte Pakete installieren

Falls noch nicht geschehen, installiere Flask oder FastAPI:

pip install flask fastapi uvicorn pydantic

Schritt 3: API-Skript erstellen

Erstelle eine Datei whisper_api.py im Verzeichnis Whisper-Web-UI:

from fastapi import FastAPI, File, UploadFile
import whisper
import uvicorn
import os

app = FastAPI()
model = whisper.load_model("base")  # Oder "medium", "large", je nach Leistung

@app.post("/v1/audio/transcriptions")
async def transcribe_audio(file: UploadFile = File(...)):
    audio_path = f"temp/{file.filename}"
    os.makedirs("temp", exist_ok=True)

    with open(audio_path, "wb") as buffer:
        buffer.write(await file.read())

    result = model.transcribe(audio_path)
    os.remove(audio_path)

    return {"text": result["text"]}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=5000)

Schritt 4: API starten

Starte den API-Server mit:

python whisper_api.py

Nun läuft die API unter http://192.168.10.217:5000.
3. OpenWebUI mit Whisper verbinden

Nun muss OpenWebUI so konfiguriert werden, dass es diese Whisper-API nutzt.

    Admin-Oberfläche von OpenWebUI öffnen:
    http://192.168.10.210:8080/admin

    Zu den STT-Einstellungen gehen

    Folgende Werte eintragen:
        API Base URL: http://192.168.10.217:5000/v1
        API Key: Nicht notwendig (oder einen Dummy-Key verwenden)
        Speech-to-Text Model: Whisper-Base, Whisper-Medium etc.

    Speichern und testen.

Zusätzliche Hinweise

    Falls die Ports durch Firewalls blockiert sind, öffne Port 5000 auf der Whisper-VM mit:

sudo ufw allow 5000/tcp

Lösung: Fehlende API-Routen hinzufügen

Öffne deine whisper_api.py und füge diese fehlenden Routen hinzu:

from fastapi import FastAPI, File, UploadFile
import whisper
import uvicorn
import os

app = FastAPI()
model = whisper.load_model("base")  # Wähle das gewünschte Modell

# OpenAI-kompatible Endpunkte
@app.get("/v1/models")
def get_models():
    return {
        "object": "list",
        "data": [
            {
                "id": "whisper-1",
                "object": "model",
                "created": 1677610602,
                "owned_by": "local",
            }
        ]
    }

@app.get("/v1/api/tags")  # Route, die OpenWebUI erwartet
def get_tags():
    return {"tags": ["whisper", "stt", "speech"]}

@app.get("/v1/api/version")  # Falls OpenWebUI nach der API-Version fragt
def get_version():
    return {"version": "1.0"}

@app.post("/v1/audio/transcriptions")
async def transcribe_audio(file: UploadFile = File(...)):
    audio_path = f"temp/{file.filename}"
    os.makedirs("temp", exist_ok=True)

    with open(audio_path, "wb") as buffer:
        buffer.write(await file.read())

    result = model.transcribe(audio_path)
    os.remove(audio_path)

    return {
        "text": result["text"],
        "model": "whisper-1",
        "language": result["language"],
    }

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=5000)