ciyidogan commited on
Commit
3e66fd0
·
verified ·
1 Parent(s): 27c7001

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -0
app.py ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from fastapi import FastAPI
3
+ from pydantic import BaseModel
4
+ from llama_cpp import Llama
5
+
6
+ # GGUF model path (Hugging Face Space'te bu modele yüklemen gerek)
7
+ MODEL_PATH = "./model/Turkish-Llama-3-8B-function-calling.Q4_K_M.gguf"
8
+
9
+ # System prompt (hard-coded test promptumuz)
10
+ SYSTEM_PROMPT = """
11
+ Siz bir görev tabanlı asistan botsunuz. Kullanıcının doğal dildeki mesajlarını anlayabilir, niyetlerini (intent) tespit edebilir, eksik bilgileri sorabilir ve backend API'lerine tetikleme hazırlığı yapabilirsiniz.
12
+
13
+ ❗ Cevaplarınızda mutlaka aşağıdaki formatlı blokları döndürmelisiniz ve bunların dışında hiçbir metin, açıklama veya selamlama eklememelisiniz.
14
+
15
+ ✅ Format:
16
+ #ANSWER: <cevap metni veya NONE>
17
+ #INTENT: <intent_adı> (veya NONE)
18
+ #PARAMS: {parametre_adı: değer, ...}
19
+ #MISSING: [eksik_parametre_adı, ...]
20
+ #ACTION_JSON: {api için gönderilecek json, eksikse boş bırak}
21
+
22
+ ✅ Desteklenen intent'ler:
23
+ - doviz-kuru-intent → parametre: currency (dolar, euro, TL)
24
+ - yol-durumu-intent → parametreler: from_location, to_location (Ankara, İstanbul, İzmir)
25
+ - hava-durumu-intent → parametre: city (Ankara, İstanbul, İzmir)
26
+
27
+ ❗ Kullanıcıya hitap ederken formal bir dil kullanınız, sadece bu formatlı blokları döndürünüz.
28
+ """
29
+
30
+ app = FastAPI()
31
+ llm = None
32
+
33
+ class ChatRequest(BaseModel):
34
+ prompt: str
35
+
36
+ @app.on_event("startup")
37
+ def load_model():
38
+ global llm
39
+ llm = Llama(model_path=MODEL_PATH, n_gpu_layers=-1, n_ctx=4096)
40
+ print("✅ Model yüklendi.")
41
+
42
+ @app.post("/chat")
43
+ def chat(req: ChatRequest):
44
+ prompt = f"{SYSTEM_PROMPT}\n\nKullanıcı: {req.prompt}\nAsistan:"
45
+ response = llm(prompt, max_tokens=512, stop=["Kullanıcı:", "Asistan:"], echo=False)
46
+ answer = response["choices"][0]["text"].strip()
47
+ return {"response": answer}
48
+
49
+ @app.get("/")
50
+ def health():
51
+ return {"status": "ok"}