yukee1992 commited on
Commit
ba548c2
·
verified ·
1 Parent(s): 2e58a11

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +89 -19
app.py CHANGED
@@ -1,16 +1,64 @@
1
  from flask import Flask, request, jsonify
2
- from flask_cors import CORS # Add this import
3
  import logging
4
  import os
 
 
5
 
6
  app = Flask(__name__)
7
- CORS(app) # Add this to handle CORS issues
8
 
9
  # Configure logging
10
  logging.basicConfig(level=logging.INFO)
11
  logger = logging.getLogger(__name__)
12
 
13
- @app.route('/generate_script', methods=['POST', 'GET']) # Allow GET for testing
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  def generate_script():
15
  try:
16
  logger.info("Received request to /generate_script")
@@ -26,36 +74,58 @@ def generate_script():
26
  if not topics:
27
  return jsonify({"error": "No topics provided"}), 400
28
 
29
- # For now, return a mock response to test the connection
30
- mock_script = f"""VIRAL SCRIPT FOR: {topics[0]}
31
-
32
- Scene 1: Golden Hook
33
- - Visual: Eye-catching intro with text overlay "THIS WILL CHANGE EVERYTHING"
34
- - Voiceover: "What if I told you {topics[0].lower()} is about to revolutionize everything?"
35
 
36
- Scene 2: Valuable Content
37
- - Visual: Demonstrating key points with graphics
38
- - Voiceover: "Here are 3 ways {topics[0].lower()} is changing the game..."
 
 
 
39
 
40
- Scene 3: CTA
41
- - Visual: Call-to-action screen with links
42
- - Voiceover: "Like and follow for more insights!"
43
  """
44
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  return jsonify({
46
  "topic": topics[0],
47
- "script": mock_script,
48
  "full_topics": topics,
49
  "status": "success"
50
  })
51
 
52
  except Exception as e:
53
- logger.error(f"Error: {str(e)}")
54
  return jsonify({"error": str(e)}), 500
55
 
56
  @app.route('/health', methods=['GET'])
57
  def health():
58
- return jsonify({"status": "healthy", "message": "Server is running"})
 
 
 
 
59
 
60
  @app.route('/test', methods=['GET'])
61
  def test():
 
1
  from flask import Flask, request, jsonify
2
+ from flask_cors import CORS
3
  import logging
4
  import os
5
+ from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
6
+ import torch
7
 
8
  app = Flask(__name__)
9
+ CORS(app)
10
 
11
  # Configure logging
12
  logging.basicConfig(level=logging.INFO)
13
  logger = logging.getLogger(__name__)
14
 
15
+ # Initialize model variables
16
+ model_name = "google/gemma-1b-it"
17
+ tokenizer = None
18
+ model = None
19
+ generator = None
20
+
21
+ def initialize_model():
22
+ global tokenizer, model, generator
23
+
24
+ if tokenizer is None:
25
+ try:
26
+ # Get Hugging Face token from environment
27
+ hf_token = os.environ.get('HF_TOKEN')
28
+
29
+ if not hf_token:
30
+ logger.error("HF_TOKEN environment variable not set!")
31
+ raise ValueError("Hugging Face token not configured")
32
+
33
+ logger.info("Loading tokenizer...")
34
+ tokenizer = AutoTokenizer.from_pretrained(
35
+ model_name,
36
+ token=hf_token
37
+ )
38
+
39
+ logger.info("Loading model...")
40
+ model = AutoModelForCausalLM.from_pretrained(
41
+ model_name,
42
+ torch_dtype=torch.float16,
43
+ device_map="auto",
44
+ token=hf_token
45
+ )
46
+
47
+ logger.info("Creating pipeline...")
48
+ generator = pipeline(
49
+ "text-generation",
50
+ model=model,
51
+ tokenizer=tokenizer,
52
+ device=0 if torch.cuda.is_available() else -1
53
+ )
54
+
55
+ logger.info("Model loaded successfully!")
56
+
57
+ except Exception as e:
58
+ logger.error(f"Error loading model: {str(e)}")
59
+ raise
60
+
61
+ @app.route('/generate_script', methods=['POST', 'GET'])
62
  def generate_script():
63
  try:
64
  logger.info("Received request to /generate_script")
 
74
  if not topics:
75
  return jsonify({"error": "No topics provided"}), 400
76
 
77
+ # Initialize model (will load on first request)
78
+ initialize_model()
79
+
80
+ # Create prompt for Gemma
81
+ prompt = f"""Create a viral 1-minute video script about {topics[0]}.
 
82
 
83
+ REQUIREMENTS:
84
+ - Duration: Exactly 1 minute
85
+ - Include: Golden hook, valuable content, CTA
86
+ - Virtual descriptions for each scene
87
+ - Voiceover instructions for each scene
88
+ - Make it engaging and viral-worthy
89
 
90
+ SCRIPT STRUCTURE:
 
 
91
  """
92
+
93
+ # Generate script
94
+ logger.info("Generating script...")
95
+ result = generator(
96
+ prompt,
97
+ max_length=1024,
98
+ temperature=0.8,
99
+ do_sample=True,
100
+ top_p=0.9,
101
+ num_return_sequences=1
102
+ )
103
+
104
+ generated_text = result[0]['generated_text']
105
+
106
+ # Extract just the script part (remove the prompt)
107
+ script = generated_text.replace(prompt, "").strip()
108
+
109
+ logger.info("Script generated successfully!")
110
+
111
  return jsonify({
112
  "topic": topics[0],
113
+ "script": script,
114
  "full_topics": topics,
115
  "status": "success"
116
  })
117
 
118
  except Exception as e:
119
+ logger.error(f"Error generating script: {str(e)}")
120
  return jsonify({"error": str(e)}), 500
121
 
122
  @app.route('/health', methods=['GET'])
123
  def health():
124
+ return jsonify({
125
+ "status": "healthy",
126
+ "message": "Server is running",
127
+ "model_loaded": tokenizer is not None
128
+ })
129
 
130
  @app.route('/test', methods=['GET'])
131
  def test():