Update fine_tune_inference_test.py
Browse files- fine_tune_inference_test.py +87 -1
fine_tune_inference_test.py
CHANGED
@@ -73,4 +73,90 @@ def chat(msg: Message):
|
|
73 |
|
74 |
full_prompt = ""
|
75 |
for turn in chat_history:
|
76 |
-
full_prompt += f"Kullanıcı: {turn['user']}\nAsistan: {turn['bot]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
|
74 |
full_prompt = ""
|
75 |
for turn in chat_history:
|
76 |
+
full_prompt += f"Kullanıcı: {turn['user']}\nAsistan: {turn['bot']}\n"
|
77 |
+
full_prompt += f"Kullanıcı: {user_input}\nAsistan:"
|
78 |
+
|
79 |
+
result = pipe(full_prompt, max_new_tokens=200, do_sample=True, temperature=0.7)
|
80 |
+
answer = result[0]["generated_text"][len(full_prompt):].strip()
|
81 |
+
chat_history.append({"user": user_input, "bot": answer})
|
82 |
+
log(f"🗨️ Soru: {user_input} → Yanıt: {answer[:60]}...")
|
83 |
+
return {"answer": answer, "chat_history": chat_history}
|
84 |
+
except Exception as e:
|
85 |
+
log(f"❌ /chat sırasında hata oluştu: {e}")
|
86 |
+
return {"error": str(e)}
|
87 |
+
|
88 |
+
def setup_model():
|
89 |
+
try:
|
90 |
+
global pipe
|
91 |
+
|
92 |
+
log("📦 Fine-tune zip indiriliyor...")
|
93 |
+
zip_path = hf_hub_download(
|
94 |
+
repo_id=FINE_TUNE_REPO,
|
95 |
+
filename=FINE_TUNE_ZIP,
|
96 |
+
repo_type="model",
|
97 |
+
token=HF_TOKEN
|
98 |
+
)
|
99 |
+
|
100 |
+
extract_dir = "/app/extracted"
|
101 |
+
os.makedirs(extract_dir, exist_ok=True)
|
102 |
+
|
103 |
+
with zipfile.ZipFile(zip_path, "r") as zip_ref:
|
104 |
+
zip_ref.extractall(extract_dir)
|
105 |
+
log("📂 Zip başarıyla açıldı.")
|
106 |
+
|
107 |
+
log("🔁 Tokenizer yükleniyor...")
|
108 |
+
tokenizer = AutoTokenizer.from_pretrained(os.path.join(extract_dir, "output"))
|
109 |
+
|
110 |
+
log("🧠 Base model indiriliyor...")
|
111 |
+
base_model = AutoModelForCausalLM.from_pretrained(
|
112 |
+
MODEL_BASE,
|
113 |
+
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32
|
114 |
+
)
|
115 |
+
|
116 |
+
log("➕ LoRA adapter uygulanıyor...")
|
117 |
+
model = PeftModel.from_pretrained(base_model, os.path.join(extract_dir, "output"))
|
118 |
+
|
119 |
+
log("📚 RAG dataseti yükleniyor...")
|
120 |
+
rag = load_dataset(
|
121 |
+
RAG_DATA_REPO,
|
122 |
+
data_files=RAG_DATA_FILE,
|
123 |
+
split="train",
|
124 |
+
token=HF_TOKEN
|
125 |
+
)
|
126 |
+
log(f"🔍 RAG boyutu: {len(rag)}")
|
127 |
+
|
128 |
+
log("🚀 Pipeline oluşturuluyor...")
|
129 |
+
pipe = pipeline(
|
130 |
+
"text-generation",
|
131 |
+
model=model,
|
132 |
+
tokenizer=tokenizer,
|
133 |
+
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
|
134 |
+
device=0 if torch.cuda.is_available() else -1
|
135 |
+
)
|
136 |
+
log("✅ Model ve pipeline başarıyla yüklendi.")
|
137 |
+
except Exception as e:
|
138 |
+
log(f"❌ setup_model() sırasında hata oluştu: {e}")
|
139 |
+
|
140 |
+
# ✅ Sağlık kontrolü (Hugging Face runtime için şart)
|
141 |
+
@app.get("/health")
|
142 |
+
def health():
|
143 |
+
return {"status": "ok"}
|
144 |
+
|
145 |
+
def run_health_server():
|
146 |
+
try:
|
147 |
+
log("🩺 Health check endpoint başlatılıyor...")
|
148 |
+
uvicorn.run(app, host="0.0.0.0", port=7860)
|
149 |
+
except Exception as e:
|
150 |
+
log(f"❌ Health server başlatılamadı: {e}")
|
151 |
+
|
152 |
+
# ✅ Uygulama başlangıcı
|
153 |
+
threading.Thread(target=setup_model, daemon=True).start()
|
154 |
+
|
155 |
+
# 🧘 Eğitim sonrası uygulama restart olmasın diye bekleme
|
156 |
+
log("⌛ Model yükleniyor, istekler için hazır olunacak...")
|
157 |
+
while True:
|
158 |
+
try:
|
159 |
+
import time
|
160 |
+
time.sleep(60)
|
161 |
+
except Exception as e:
|
162 |
+
log(f"❌ Ana bekleme döngüsünde hata: {e}")
|