Wiki-Quellcode von API bauen

Zuletzt geändert von René Schmidt am 2025/03/17 22:08

Zeige letzte Bearbeiter
1 **~1. Vorbereitung von OpenWhisper**
2
3 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.
4
5 **2. Einrichtung eines API-Dienstes für OpenWhisper**
6
7 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.
8
9 [[docs.openwebui.com>>url:https://docs.openwebui.com/tutorials/text-to-speech/openedai-speech-integration/?utm_source=chatgpt.com]]
10
11 **Schritte zur Einrichtung von openedai-speech:**
12
13 a. **Repository klonen:**
14
15 ==== **Schritt 2: Benötigte Pakete installieren** ====
16
17 Falls noch nicht geschehen, installiere Flask oder FastAPI:
18
19 pip install flask fastapi uvicorn pydantic
20
21 Schritt 3: API-Skript erstellen
22
23 Erstelle eine Datei whisper_api.py im Verzeichnis Whisper-Web-UI:
24
25 from fastapi import FastAPI, File, UploadFile
26 import whisper
27 import uvicorn
28 import os
29
30 app = FastAPI()
31 model = whisper.load_model("base")  # Oder "medium", "large", je nach Leistung
32
33 @app.post("/v1/audio/transcriptions")
34 async def transcribe_audio(file: UploadFile = File(...)):
35 audio_path = f"temp/{file.filename}"
36 os.makedirs("temp", exist_ok=True)
37
38 with open(audio_path, "wb") as buffer:
39 buffer.write(await file.read())
40
41 result = model.transcribe(audio_path)
42 os.remove(audio_path)
43
44 return {"text": result["text"]}
45
46 if ~_~_name~_~_ == "~_~_main~_~_":
47 uvicorn.run(app, host="0.0.0.0", port=5000)
48
49 Schritt 4: API starten
50
51 Starte den API-Server mit:
52
53 python whisper_api.py
54
55 Nun läuft die API unter http:~/~/192.168.10.217:5000.
56 3. OpenWebUI mit Whisper verbinden
57
58 Nun muss OpenWebUI so konfiguriert werden, dass es diese Whisper-API nutzt.
59
60 Admin-Oberfläche von OpenWebUI öffnen:
61 http:~/~/192.168.10.210:8080/admin
62
63 Zu den STT-Einstellungen gehen
64
65 Folgende Werte eintragen:
66 API Base URL: http:~/~/192.168.10.217:5000/v1
67 API Key: Nicht notwendig (oder einen Dummy-Key verwenden)
68 Speech-to-Text Model: Whisper-Base, Whisper-Medium etc.
69
70 Speichern und testen.
71
72 Zusätzliche Hinweise
73
74 Falls die Ports durch Firewalls blockiert sind, öffne Port 5000 auf der Whisper-VM mit:
75
76 sudo ufw allow 5000/tcp
77
78
79
80 == **Lösung: Fehlende API-Routen hinzufügen** ==
81
82 Öffne deine whisper_api.py und füge diese fehlenden Routen hinzu:
83
84 from fastapi import FastAPI, File, UploadFile
85 import whisper
86 import uvicorn
87 import os
88
89 app = FastAPI()
90 model = whisper.load_model("base")  # Wähle das gewünschte Modell
91
92 # OpenAI-kompatible Endpunkte
93 @app.get("/v1/models")
94 def get_models():
95 return {
96 "object": "list",
97 "data": [
98 {
99 "id": "whisper-1",
100 "object": "model",
101 "created": 1677610602,
102 "owned_by": "local",
103 }
104 ]
105 }
106
107 @app.get("/v1/api/tags")  # Route, die OpenWebUI erwartet
108 def get_tags():
109 return {"tags": ["whisper", "stt", "speech"]}
110
111 @app.get("/v1/api/version")  # Falls OpenWebUI nach der API-Version fragt
112 def get_version():
113 return {"version": "1.0"}
114
115 @app.post("/v1/audio/transcriptions")
116 async def transcribe_audio(file: UploadFile = File(...)):
117 audio_path = f"temp/{file.filename}"
118 os.makedirs("temp", exist_ok=True)
119
120 with open(audio_path, "wb") as buffer:
121 buffer.write(await file.read())
122
123 result = model.transcribe(audio_path)
124 os.remove(audio_path)
125
126 return {
127 "text": result["text"],
128 "model": "whisper-1",
129 "language": result["language"],
130 }
131
132 if ~_~_name~_~_ == "~_~_main~_~_":
133 uvicorn.run(app, host="0.0.0.0", port=5000)
134
135
136 {{{
137 }}}
138
139 {{{
140 }}}
141
142 {{{
143 }}}