azmisahin commited on
Commit
ff49eed
·
verified ·
1 Parent(s): bf5baec

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -89
app.py CHANGED
@@ -1,90 +1,95 @@
1
- from functools import lru_cache
2
- import os
3
- from flask import Flask, request, jsonify, render_template
4
- from transformers import AutoTokenizer, AutoModelForCausalLM
5
- import torch
6
- import logging
7
- import time
8
-
9
- app = Flask(__name__)
10
- logging.basicConfig(level=logging.INFO)
11
- logger = logging.getLogger(__name__)
12
-
13
- # Önbellek dizini ayarı
14
- os.environ['TRANSFORMERS_CACHE'] = '/app/cache'
15
- os.makedirs('/app/cache', exist_ok=True)
16
-
17
- # Model konfigürasyonu
18
- MODEL_NAME = "redrussianarmy/gpt2-turkish-cased"
19
-
20
- @lru_cache(maxsize=1)
21
- def load_model():
22
- try:
23
- logger.info("Model yükleniyor...")
24
- tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
25
- model = AutoModelForCausalLM.from_pretrained(
26
- MODEL_NAME,
27
- torch_dtype=torch.float16
28
- )
29
- model = model.to('cpu')
30
- torch.set_num_threads(1)
31
- logger.info("Model başarıyla yüklendi")
32
- return model, tokenizer
33
- except Exception as e:
34
- logger.error(f"Model yükleme hatası: {str(e)}")
35
- raise RuntimeError(f"Model yüklenemedi: {str(e)}")
36
-
37
- @app.route('/')
38
- def home():
39
- return render_template('index.html') # DÜZELTİLDİ: 'templates/index.html' değil
40
-
41
- @app.route('/health')
42
- def health_check():
43
- try:
44
- load_model()
45
- return jsonify({"status": "healthy"}), 200
46
- except Exception as e:
47
- return jsonify({"status": "unhealthy", "error": str(e)}), 500
48
-
49
- @app.route('/generate', methods=['POST'])
50
- def generate():
51
- try:
52
- start_time = time.time()
53
- data = request.get_json()
54
- prompt = data.get('prompt', '')[:300] # 300 karakter sınır
55
-
56
- if not prompt:
57
- return jsonify({"error": "Prompt gereklidir", "success": False}), 400
58
-
59
- model, tokenizer = load_model()
60
- inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True).to('cpu')
61
-
62
- with torch.no_grad():
63
- outputs = model.generate(
64
- inputs.input_ids,
65
- attention_mask=inputs.attention_mask,
66
- max_length=100,
67
- do_sample=True,
68
- top_k=40,
69
- temperature=0.7,
70
- pad_token_id=tokenizer.eos_token_id
71
- )
72
-
73
- result = tokenizer.decode(outputs[0], skip_special_tokens=True)
74
- processing_time = round(time.time() - start_time, 2)
75
-
76
- return jsonify({
77
- "result": result,
78
- "success": True,
79
- "processing_time": processing_time
80
- })
81
-
82
- except Exception as e:
83
- logger.error(f"Hata: {str(e)}")
84
- return jsonify({
85
- "error": str(e),
86
- "success": False
87
- }), 500
88
-
89
- if __name__ == '__main__':
 
 
 
 
 
90
  app.run(host='0.0.0.0', port=7860, threaded=False)
 
1
+ from functools import lru_cache
2
+ import os
3
+ from flask import Flask, request, jsonify, render_template
4
+ from transformers import AutoTokenizer, AutoModelForCausalLM
5
+ import torch
6
+ import logging
7
+ import time
8
+
9
+ app = Flask(__name__)
10
+ logging.basicConfig(level=logging.INFO)
11
+ logger = logging.getLogger(__name__)
12
+
13
+ # Önbellek dizini ayarı
14
+ os.environ['TRANSFORMERS_CACHE'] = '/app/cache'
15
+ os.makedirs('/app/cache', exist_ok=True)
16
+
17
+ # Model konfigürasyonu
18
+ MODEL_NAME = "redrussianarmy/gpt2-turkish-cased"
19
+
20
+ @lru_cache(maxsize=1)
21
+ def load_model():
22
+ try:
23
+ logger.info("Model yükleniyor...")
24
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
25
+
26
+ # Pad token kontrolü ve ayarlama
27
+ if tokenizer.pad_token is None:
28
+ tokenizer.pad_token = tokenizer.eos_token
29
+
30
+ model = AutoModelForCausalLM.from_pretrained(
31
+ MODEL_NAME,
32
+ torch_dtype=torch.float16
33
+ )
34
+ model = model.to('cpu')
35
+ torch.set_num_threads(1)
36
+ logger.info("Model başarıyla yüklendi")
37
+ return model, tokenizer
38
+ except Exception as e:
39
+ logger.error(f"Model yükleme hatası: {str(e)}")
40
+ raise RuntimeError(f"Model yüklenemedi: {str(e)}")
41
+
42
+ @app.route('/')
43
+ def home():
44
+ return render_template('index.html')
45
+
46
+ @app.route('/health')
47
+ def health_check():
48
+ try:
49
+ load_model()
50
+ return jsonify({"status": "healthy"}), 200
51
+ except Exception as e:
52
+ return jsonify({"status": "unhealthy", "error": str(e)}), 500
53
+
54
+ @app.route('/generate', methods=['POST'])
55
+ def generate():
56
+ try:
57
+ start_time = time.time()
58
+ data = request.get_json()
59
+ prompt = data.get('prompt', '')[:300] # 300 karakter sınır
60
+
61
+ if not prompt:
62
+ return jsonify({"error": "Prompt gereklidir", "success": False}), 400
63
+
64
+ model, tokenizer = load_model()
65
+ inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True).to('cpu')
66
+
67
+ with torch.no_grad():
68
+ outputs = model.generate(
69
+ inputs.input_ids,
70
+ attention_mask=inputs.attention_mask,
71
+ max_length=100,
72
+ do_sample=True,
73
+ top_k=40,
74
+ temperature=0.7,
75
+ pad_token_id=tokenizer.pad_token_id # Düzeltildi: eos_token yerine pad_token
76
+ )
77
+
78
+ result = tokenizer.decode(outputs[0], skip_special_tokens=True)
79
+ processing_time = round(time.time() - start_time, 2)
80
+
81
+ return jsonify({
82
+ "result": result,
83
+ "success": True,
84
+ "processing_time": processing_time
85
+ })
86
+
87
+ except Exception as e:
88
+ logger.error(f"Hata: {str(e)}")
89
+ return jsonify({
90
+ "error": str(e),
91
+ "success": False
92
+ }), 500
93
+
94
+ if __name__ == '__main__':
95
  app.run(host='0.0.0.0', port=7860, threaded=False)