Mahmous commited on
Commit
4780332
·
verified ·
1 Parent(s): 633ef51

Update api.py

Browse files
Files changed (1) hide show
  1. api.py +93 -0
api.py CHANGED
@@ -134,6 +134,16 @@ def system_prompt_fallback() -> str:
134
  "Bleibe menschlich und authentisch in deiner Ausdrucksweise."
135
  )
136
 
 
 
 
 
 
 
 
 
 
 
137
 
138
 
139
 
@@ -165,6 +175,89 @@ def health():
165
  }
166
  )
167
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  @app.route("/ask", methods=["POST", "OPTIONS"])
169
  def ask():
170
  if request.method == "OPTIONS":
 
134
  "Bleibe menschlich und authentisch in deiner Ausdrucksweise."
135
  )
136
 
137
+ def system_prompt_youtube_script() -> str:
138
+ return (
139
+ "Du bist **Javid Niazi-Hoffmann**, erfolgreicher Unternehmer und Mentor bei J&P Mentoring. "
140
+ "Du erstellst **starke YouTube-Video-Skripte auf Deutsch**. "
141
+ "Sprich immer auf **Deutsch**, sei klar, inspirierend und bodenständig. "
142
+ "Schreibe so, dass der Text direkt vom Teleprompter abgelesen werden kann – "
143
+ "mit natürlicher Sprache, kurzen Sätzen und klaren Übergängen. "
144
+ "Nutze Du-Ansprache, sei motivierend und ergebnisorientiert."
145
+ )
146
+
147
 
148
 
149
 
 
175
  }
176
  )
177
 
178
+ @app.route("/youtube-script", methods=["POST", "OPTIONS"])
179
+ def youtube_script():
180
+ # Handle CORS preflight
181
+ if request.method == "OPTIONS":
182
+ return ("", 204)
183
+
184
+ if client is None:
185
+ return jsonify({"error": "⚠️ No language model initialized."}), 500
186
+
187
+ try:
188
+ data = request.get_json(force=True) or {}
189
+ except Exception:
190
+ return jsonify({"error": "Invalid JSON body."}), 400
191
+
192
+ # Expecting these keys from the frontend
193
+ topic = (data.get("topic") or "").strip()
194
+ duration_minutes = (data.get("duration_minutes") or "").strip()
195
+ tone = (data.get("tone") or "").strip()
196
+ target_audience = (data.get("target_audience") or "").strip()
197
+
198
+ if not topic:
199
+ return jsonify({"error": "Video topic is required."}), 400
200
+
201
+ # Fallback defaults
202
+ if not duration_minutes:
203
+ duration_minutes = "10"
204
+ if not tone:
205
+ tone = "inspirierend, klar, authentisch"
206
+ if not target_audience:
207
+ target_audience = "Menschen, die finanziell und persönlich wachsen wollen"
208
+
209
+ # Build user prompt for GPT
210
+ user_prompt = f"""
211
+ Erstelle ein ausführliches YouTube-Video-Skript auf Deutsch.
212
+
213
+ Thema: {topic}
214
+ Ziel-Videolänge: ca. {duration_minutes} Minuten
215
+ Tonfall: {tone}
216
+ Zielgruppe: {target_audience}
217
+
218
+ Struktur des Skripts:
219
+ 1. Starker Hook in den ersten 5–10 Sekunden (sofortige Aufmerksamkeit, großes Versprechen).
220
+ 2. Kurze Begrüßung und Positionierung von Javid Niazi-Hoffmann.
221
+ 3. Klar strukturierter Hauptteil mit mehreren Abschnitten:
222
+ - Erkläre das Thema verständlich.
223
+ - Nutze Beispiele, Metaphern oder kurze Stories.
224
+ - Gib konkrete Tipps oder Schritte.
225
+ 4. Übergänge zwischen den Abschnitten, damit das Skript natürlich fließt.
226
+ 5. Starker Call-to-Action am Ende
227
+ (z.B. Kanal abonnieren, Kommentar schreiben, kostenloses Erstgespräch, Link in der Beschreibung).
228
+
229
+ Format:
230
+ - Schreibe den Text als gesprochenes Skript in der Du-Form.
231
+ - Markiere die Abschnitte mit kurzen Zwischenüberschriften (z.B. [HOOK], [EINSTIEG], [TIPP 1], [CTA]).
232
+ - Kein Fließtext-Roman, sondern gut lesbare Absätze.
233
+ """
234
+
235
+ try:
236
+ response = client.chat.completions.create(
237
+ model="gpt-4o",
238
+ messages=[
239
+ {"role": "system", "content": system_prompt_youtube_script()},
240
+ {"role": "user", "content": user_prompt},
241
+ ],
242
+ max_tokens=1500,
243
+ )
244
+ script_text = response.choices[0].message.content.strip()
245
+ except Exception as e:
246
+ traceback.print_exc()
247
+ return jsonify({"error": f"⚠️ LLM call failed: {e}"}), 500
248
+
249
+ # Response for the frontend
250
+ return jsonify(
251
+ {
252
+ "topic": topic,
253
+ "duration_minutes": duration_minutes,
254
+ "tone": tone,
255
+ "target_audience": target_audience,
256
+ "script": script_text,
257
+ }
258
+ ), 200
259
+
260
+
261
  @app.route("/ask", methods=["POST", "OPTIONS"])
262
  def ask():
263
  if request.method == "OPTIONS":