yukee1992 commited on
Commit
c8d2196
·
verified ·
1 Parent(s): 46f387c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +86 -0
app.py ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
3
+ import torch
4
+ import logging
5
+ from pytrends.request import TrendReq
6
+
7
+ app = Flask(__name__)
8
+ logging.basicConfig(level=logging.INFO)
9
+
10
+ # Initialize model (will load on first request)
11
+ model_name = "google/gemma-1b-it"
12
+ tokenizer = None
13
+ model = None
14
+ generator = None
15
+
16
+ def initialize_model():
17
+ global tokenizer, model, generator
18
+ if tokenizer is None:
19
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
20
+ model = AutoModelForCausalLM.from_pretrained(
21
+ model_name,
22
+ torch_dtype=torch.float16,
23
+ device_map="auto"
24
+ )
25
+ generator = pipeline(
26
+ "text-generation",
27
+ model=model,
28
+ tokenizer=tokenizer,
29
+ device=0 if torch.cuda.is_available() else -1
30
+ )
31
+
32
+ @app.route('/generate_script', methods=['POST'])
33
+ def generate_script():
34
+ try:
35
+ initialize_model()
36
+
37
+ data = request.json
38
+ topics = data.get('topics', [])
39
+
40
+ if not topics:
41
+ return jsonify({"error": "No topics provided"}), 400
42
+
43
+ # Create prompt for Gemma
44
+ prompt = f"""Create a viral 1-minute video script about {topics[0]}.
45
+
46
+ REQUIREMENTS:
47
+ - Duration: Exactly 1 minute
48
+ - Include: Golden hook, valuable content, CTA
49
+ - Virtual descriptions for each scene
50
+ - Voiceover instructions for each scene
51
+ - Make it engaging and viral-worthy
52
+
53
+ SCRIPT STRUCTURE:
54
+ """
55
+
56
+ # Generate script
57
+ result = generator(
58
+ prompt,
59
+ max_length=1024,
60
+ temperature=0.8,
61
+ do_sample=True,
62
+ top_p=0.9,
63
+ num_return_sequences=1
64
+ )
65
+
66
+ generated_text = result[0]['generated_text']
67
+
68
+ # Extract just the script part (remove the prompt)
69
+ script = generated_text.replace(prompt, "").strip()
70
+
71
+ return jsonify({
72
+ "topic": topics[0],
73
+ "script": script,
74
+ "full_topics": topics
75
+ })
76
+
77
+ except Exception as e:
78
+ logging.error(f"Error generating script: {str(e)}")
79
+ return jsonify({"error": str(e)}), 500
80
+
81
+ @app.route('/health', methods=['GET'])
82
+ def health():
83
+ return jsonify({"status": "healthy"})
84
+
85
+ if __name__ == '__main__':
86
+ app.run(host='0.0.0.0', port=7860, debug=False)