Vibow commited on
Commit
0d5de25
Β·
verified Β·
1 Parent(s): da7a49f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -0
app.py CHANGED
@@ -6,6 +6,7 @@ import json
6
  import requests
7
  from datetime import datetime, timedelta, timezone
8
  from flask import Flask, request, jsonify, Response
 
9
 
10
  app = Flask(__name__)
11
  app.secret_key = os.getenv("FLASK_SECRET_KEY")
@@ -15,6 +16,7 @@ GROQ_API_KEY_1 = os.getenv("GROQ_API_KEY_1")
15
  GROQ_API_KEY_2 = os.getenv("GROQ_API_KEY_2")
16
  GROQ_API_KEY_3 = os.getenv("GROQ_API_KEY_3")
17
  SERPAPI_KEY = os.getenv("SERPAPI_KEY")
 
18
 
19
  # ==== URL ====
20
  GROQ_URL_CHAT = "https://api.groq.com/openai/v1/chat/completions"
@@ -190,7 +192,30 @@ def stream_chat(prompt: str, history=None):
190
  yield delta
191
  except:
192
  continue
 
 
 
 
 
 
 
 
 
193
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  # =========================
195
  # πŸš€ Chat Endpoint (Text + Voice)
196
  # =========================
@@ -245,7 +270,37 @@ def chat():
245
  yield chunk
246
 
247
  return Response(generate(), mimetype="text/plain")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  # =========================
250
  # ▢️ Run
251
  # =========================
 
6
  import requests
7
  from datetime import datetime, timedelta, timezone
8
  from flask import Flask, request, jsonify, Response
9
+ from huggingface_hub import InferenceClient
10
 
11
  app = Flask(__name__)
12
  app.secret_key = os.getenv("FLASK_SECRET_KEY")
 
16
  GROQ_API_KEY_2 = os.getenv("GROQ_API_KEY_2")
17
  GROQ_API_KEY_3 = os.getenv("GROQ_API_KEY_3")
18
  SERPAPI_KEY = os.getenv("SERPAPI_KEY")
19
+ HF_TOKEN = os.getenv("HF_TOKEN")
20
 
21
  # ==== URL ====
22
  GROQ_URL_CHAT = "https://api.groq.com/openai/v1/chat/completions"
 
192
  yield delta
193
  except:
194
  continue
195
+ # =========================
196
+ # 🎬 Text-to-Video (HF + fal-ai)
197
+ # =========================
198
+ def generate_video(prompt: str, model="Wan-AI/Wan2.2-T2V-A14B-Diffusers"):
199
+ try:
200
+ print(f"[VIDEO] 🎬 Generating video for prompt: {prompt}")
201
+ client = InferenceClient(provider="fal-ai", api_key=HF_TOKEN)
202
+
203
+ video_bytes = client.text_to_video(prompt=prompt, model=model)
204
 
205
+ if not video_bytes:
206
+ print("[VIDEO] ❌ Empty response from HF model")
207
+ return None
208
+
209
+ file_name = f"/tmp/video_{int(time.time())}.mp4"
210
+ with open(file_name, "wb") as f:
211
+ f.write(video_bytes)
212
+ print(f"[VIDEO] βœ… Video saved to {file_name}")
213
+ return file_name
214
+
215
+ except Exception as e:
216
+ print(f"[VIDEO] ❌ Error: {e}")
217
+ return None
218
+
219
  # =========================
220
  # πŸš€ Chat Endpoint (Text + Voice)
221
  # =========================
 
270
  yield chunk
271
 
272
  return Response(generate(), mimetype="text/plain")
273
+ # =========================
274
+ # 🎞️ Video Endpoint
275
+ # =========================
276
+ @app.route("/video", methods=["POST"])
277
+ def video():
278
+ try:
279
+ data = request.get_json(force=True)
280
+ prompt = data.get("prompt", "")
281
+ if not prompt:
282
+ return jsonify({"error": "Missing prompt"}), 400
283
+
284
+ # Jalankan text-to-video
285
+ video_path = generate_video(prompt)
286
+
287
+ if not video_path or not os.path.exists(video_path):
288
+ return jsonify({"error": "Failed to generate video"}), 500
289
 
290
+ # Encode ke base64 biar mudah dikirim via API
291
+ with open(video_path, "rb") as f:
292
+ video_b64 = base64.b64encode(f.read()).decode()
293
+
294
+ print(f"[VIDEO] πŸŽ₯ Returning base64 video ({len(video_b64)} chars)")
295
+
296
+ return jsonify({
297
+ "prompt": prompt,
298
+ "video_base64": f"data:video/mp4;base64,{video_b64}"
299
+ })
300
+
301
+ except Exception as e:
302
+ print(f"[VIDEO] ❌ Exception in endpoint: {e}")
303
+ return jsonify({"error": str(e)}), 500
304
  # =========================
305
  # ▢️ Run
306
  # =========================