Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -3,74 +3,62 @@ from flask import Flask, request, jsonify
|
|
3 |
from transformers import AutoTokenizer, AutoModelForCausalLM
|
4 |
import torch
|
5 |
import logging
|
6 |
-
from functools import lru_cache
|
7 |
|
8 |
app = Flask(__name__)
|
9 |
logging.basicConfig(level=logging.INFO)
|
10 |
logger = logging.getLogger(__name__)
|
11 |
|
12 |
-
#
|
13 |
-
MODEL_NAME = "
|
14 |
-
ALTERNATIVE_MODEL = "savasy/bert-base-turkish-uncased" # Yedek model
|
15 |
-
CACHE_DIR = "/app/cache" # Dockerfile ile uyumlu
|
16 |
|
17 |
-
@lru_cache(maxsize=1)
|
18 |
def load_model():
|
19 |
-
logger.info("Model yükleniyor...")
|
20 |
try:
|
21 |
-
|
22 |
-
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME
|
23 |
-
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
25 |
return model, tokenizer
|
26 |
except Exception as e:
|
27 |
-
logger.error(f"
|
28 |
-
|
29 |
-
# Yedek modeli dene
|
30 |
-
logger.info("Yedek model deniyor...")
|
31 |
-
tokenizer = AutoTokenizer.from_pretrained(ALTERNATIVE_MODEL, cache_dir=CACHE_DIR)
|
32 |
-
model = AutoModelForCausalLM.from_pretrained(ALTERNATIVE_MODEL, cache_dir=CACHE_DIR)
|
33 |
-
logger.info("Yedek model başarıyla yüklendi")
|
34 |
-
return model, tokenizer
|
35 |
-
except Exception as alt_e:
|
36 |
-
logger.error(f"Yedek model hatası: {str(alt_e)}")
|
37 |
-
raise RuntimeError("Hiçbir model yüklenemedi")
|
38 |
|
39 |
-
@app.route('/
|
40 |
-
def
|
41 |
-
|
42 |
-
model, _ = load_model()
|
43 |
-
return jsonify({"status": "healthy", "model": MODEL_NAME if model else ALTERNATIVE_MODEL})
|
44 |
-
except Exception as e:
|
45 |
-
return jsonify({"status": "unhealthy", "error": str(e)}), 500
|
46 |
|
47 |
@app.route('/generate', methods=['POST'])
|
48 |
def generate():
|
49 |
try:
|
50 |
data = request.get_json()
|
51 |
-
prompt = data.get('prompt', '')
|
|
|
52 |
if not prompt:
|
53 |
return jsonify({"error": "Prompt gereklidir"}), 400
|
54 |
|
55 |
model, tokenizer = load_model()
|
56 |
-
inputs = tokenizer(prompt, return_tensors="pt")
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
|
68 |
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
69 |
return jsonify({"result": result})
|
70 |
|
71 |
except Exception as e:
|
72 |
-
logger.error(f"
|
73 |
-
return jsonify({"error":
|
74 |
|
75 |
if __name__ == '__main__':
|
76 |
-
app.run(host='0.0.0.0', port=7860)
|
|
|
3 |
from transformers import AutoTokenizer, AutoModelForCausalLM
|
4 |
import torch
|
5 |
import logging
|
|
|
6 |
|
7 |
app = Flask(__name__)
|
8 |
logging.basicConfig(level=logging.INFO)
|
9 |
logger = logging.getLogger(__name__)
|
10 |
|
11 |
+
# Daha küçük bir Türkçe model seçimi (CPU dostu)
|
12 |
+
MODEL_NAME = "savasy/turkish-gpt2" # 300MB boyutunda
|
|
|
|
|
13 |
|
|
|
14 |
def load_model():
|
|
|
15 |
try:
|
16 |
+
logger.info("Küçük Türkçe model yükleniyor...")
|
17 |
+
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
|
18 |
+
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
|
19 |
+
|
20 |
+
# CPU optimizasyonu
|
21 |
+
model = model.to('cpu')
|
22 |
+
torch.set_num_threads(1) # Tek çekirdek kullan
|
23 |
+
|
24 |
+
logger.info("Model başarıyla yüklendi")
|
25 |
return model, tokenizer
|
26 |
except Exception as e:
|
27 |
+
logger.error(f"Model yükleme hatası: {str(e)}")
|
28 |
+
raise RuntimeError("Model yüklenemedi")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
+
@app.route('/')
|
31 |
+
def home():
|
32 |
+
return "Türkçe GPT-2 API Çalışıyor"
|
|
|
|
|
|
|
|
|
33 |
|
34 |
@app.route('/generate', methods=['POST'])
|
35 |
def generate():
|
36 |
try:
|
37 |
data = request.get_json()
|
38 |
+
prompt = data.get('prompt', '')[:500] # 500 karakterle sınırla
|
39 |
+
|
40 |
if not prompt:
|
41 |
return jsonify({"error": "Prompt gereklidir"}), 400
|
42 |
|
43 |
model, tokenizer = load_model()
|
44 |
+
inputs = tokenizer(prompt, return_tensors="pt").to('cpu')
|
45 |
|
46 |
+
# CPU için optimize edilmiş üretim
|
47 |
+
outputs = model.generate(
|
48 |
+
inputs.input_ids,
|
49 |
+
max_length=100, # Daha kısa çıktı
|
50 |
+
do_sample=True,
|
51 |
+
top_k=40,
|
52 |
+
temperature=0.7,
|
53 |
+
pad_token_id=tokenizer.eos_token_id
|
54 |
+
)
|
55 |
|
56 |
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
57 |
return jsonify({"result": result})
|
58 |
|
59 |
except Exception as e:
|
60 |
+
logger.error(f"Hata: {str(e)}")
|
61 |
+
return jsonify({"error": "İşlem sırasında hata oluştu"}), 500
|
62 |
|
63 |
if __name__ == '__main__':
|
64 |
+
app.run(host='0.0.0.0', port=7860, threaded=False) # threaded=False CPU için daha iyi
|