u-kuro commited on
Commit
690a7c1
·
1 Parent(s): c55d979

removed some debug functions and preload. also made auto political text generation to be capped in 1 sentence and lessen max_new_token to 40.

Browse files
Files changed (4) hide show
  1. Dockerfile +1 -1
  2. app.py +20 -46
  3. requirements.txt +0 -2
  4. templates/index.html +0 -1
Dockerfile CHANGED
@@ -15,4 +15,4 @@ RUN python -c "import nltk; nltk.download('punkt'); nltk.download('punkt_tab')"
15
  RUN python -c "from transformers import pipeline; pipeline('text-generation', model='gpt2')"
16
 
17
  COPY --chown=user . /app
18
- CMD ["gunicorn", "-w", "2", "--preload", "--capture-output", "--log-level", "debug", "-b", "0.0.0.0:7860", "app:app"]
 
15
  RUN python -c "from transformers import pipeline; pipeline('text-generation', model='gpt2')"
16
 
17
  COPY --chown=user . /app
18
+ CMD ["gunicorn", "-w", "1", "-b", "0.0.0.0:7860", "app:app"]
app.py CHANGED
@@ -13,25 +13,16 @@ app = Flask(__name__)
13
  tokenizer = None
14
  model = None
15
  generator = None
16
- startup_errors = []
17
-
18
- try:
19
- print("Loading sentiment model...")
20
- tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, token=TOKEN)
21
- model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME, token=TOKEN)
22
- model.eval()
23
- print("Sentiment model loaded!")
24
- except Exception as e:
25
- startup_errors.append({"stage": "sentiment_model", "error": traceback.format_exc()})
26
- print(f"Sentiment model failed: {e}")
27
-
28
- try:
29
- print("Loading generation model...")
30
- generator = pipeline('text-generation', model='gpt2', device=-1)
31
- print("Generation model loaded!")
32
- except Exception as e:
33
- startup_errors.append({"stage": "generation_model", "error": traceback.format_exc()})
34
- print(f"Generation model failed: {e}")
35
 
36
  POLITICAL_SEEDS = [
37
  "The Senate voted",
@@ -78,9 +69,13 @@ def is_political(text, seed):
78
  def trim_to_sentences(text, seed):
79
  body = text[len(seed):].strip() if text.startswith(seed) else text.strip()
80
  full = (seed + ' ' + body).strip()
81
- last_punct = max(full.rfind('.'), full.rfind('!'), full.rfind('?'))
82
- if last_punct > len(seed):
83
- full = full[:last_punct + 1]
 
 
 
 
84
  return full.strip()
85
 
86
  def validate_and_clean_text(text):
@@ -118,27 +113,6 @@ def get_sentiment_score(text):
118
  def get_sentiment_label(score):
119
  return {-1: "Negative", 0: "Neutral", 1: "Positive"}.get(score, "Unknown")
120
 
121
- @app.route('/debug')
122
- def debug():
123
- info = {
124
- 'startup_errors': startup_errors,
125
- 'model_loaded': model is not None,
126
- 'tokenizer_loaded': tokenizer is not None,
127
- 'generator_loaded': generator is not None,
128
- 'MODEL_NAME': os.environ.get('MODEL_NAME', 'NOT SET'),
129
- 'HF_TOKEN_set': bool(os.environ.get('HF_TOKEN')),
130
- }
131
- try:
132
- info['nltk_test'] = sent_tokenize("Hello world. This is a test.")
133
- except Exception:
134
- info['nltk_error'] = traceback.format_exc()
135
- if model is not None:
136
- try:
137
- info['sentiment_test'] = get_sentiment_score("This is a test.")
138
- except Exception:
139
- info['sentiment_error'] = traceback.format_exc()
140
- return jsonify(info)
141
-
142
  @app.route('/generate', methods=['POST'])
143
  def generate():
144
  if generator is None:
@@ -150,7 +124,7 @@ def generate():
150
  seed = random.choice(POLITICAL_SEEDS)
151
  output = generator(
152
  seed,
153
- max_new_tokens=80,
154
  temperature=0.95,
155
  top_p=0.92,
156
  repetition_penalty=1.35,
@@ -162,7 +136,7 @@ def generate():
162
  result_text = trimmed
163
  break
164
  return jsonify({'text': result_text or trimmed})
165
- except Exception as e:
166
  return jsonify({'error': f'Generation failed: {traceback.format_exc()}'}), 500
167
 
168
  @app.route('/predict', methods=['POST'])
@@ -185,7 +159,7 @@ def predict():
185
  'original_text': text,
186
  'cleaned_text': cleaned_text
187
  })
188
- except Exception as e:
189
  return jsonify({'error': f'An error occurred: {traceback.format_exc()}'}), 500
190
 
191
  def load_base64_from_file(filename):
 
13
  tokenizer = None
14
  model = None
15
  generator = None
16
+
17
+ print("Loading sentiment model...")
18
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, token=TOKEN)
19
+ model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME, token=TOKEN)
20
+ model.eval()
21
+ print("Sentiment model loaded!")
22
+
23
+ print("Loading generation model...")
24
+ generator = pipeline('text-generation', model='gpt2', device=-1)
25
+ print("Generation model loaded!")
 
 
 
 
 
 
 
 
 
26
 
27
  POLITICAL_SEEDS = [
28
  "The Senate voted",
 
69
  def trim_to_sentences(text, seed):
70
  body = text[len(seed):].strip() if text.startswith(seed) else text.strip()
71
  full = (seed + ' ' + body).strip()
72
+ first_punct = -1
73
+ for i, ch in enumerate(full):
74
+ if i > len(seed) and ch in '.!?':
75
+ first_punct = i
76
+ break
77
+ if first_punct != -1:
78
+ full = full[:first_punct + 1]
79
  return full.strip()
80
 
81
  def validate_and_clean_text(text):
 
113
  def get_sentiment_label(score):
114
  return {-1: "Negative", 0: "Neutral", 1: "Positive"}.get(score, "Unknown")
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  @app.route('/generate', methods=['POST'])
117
  def generate():
118
  if generator is None:
 
124
  seed = random.choice(POLITICAL_SEEDS)
125
  output = generator(
126
  seed,
127
+ max_new_tokens=40,
128
  temperature=0.95,
129
  top_p=0.92,
130
  repetition_penalty=1.35,
 
136
  result_text = trimmed
137
  break
138
  return jsonify({'text': result_text or trimmed})
139
+ except:
140
  return jsonify({'error': f'Generation failed: {traceback.format_exc()}'}), 500
141
 
142
  @app.route('/predict', methods=['POST'])
 
159
  'original_text': text,
160
  'cleaned_text': cleaned_text
161
  })
162
+ except:
163
  return jsonify({'error': f'An error occurred: {traceback.format_exc()}'}), 500
164
 
165
  def load_base64_from_file(filename):
requirements.txt CHANGED
@@ -2,7 +2,5 @@ gunicorn==23.0.0
2
  Flask==3.0.3
3
  transformers==4.46.3
4
  torch==2.4.1
5
- accelerate==0.34.2
6
- numpy==1.24.4
7
  python-dotenv==1.0.1
8
  nltk==3.9.1
 
2
  Flask==3.0.3
3
  transformers==4.46.3
4
  torch==2.4.1
 
 
5
  python-dotenv==1.0.1
6
  nltk==3.9.1
templates/index.html CHANGED
@@ -308,7 +308,6 @@
308
  </div>
309
  <div class="error hide" id="error"></div>
310
  </div>
311
- <p class="startup-note">⏳ Auto generating political text may take up to 30 seconds on free hosting.</p>
312
  </div>
313
 
314
  <script>
 
308
  </div>
309
  <div class="error hide" id="error"></div>
310
  </div>
 
311
  </div>
312
 
313
  <script>