oncu / app.py
ciyidogan's picture
Create app.py
3e66fd0 verified
raw
history blame
1.87 kB
import os
from fastapi import FastAPI
from pydantic import BaseModel
from llama_cpp import Llama
# GGUF model path (Hugging Face Space'te bu modele yüklemen gerek)
MODEL_PATH = "./model/Turkish-Llama-3-8B-function-calling.Q4_K_M.gguf"
# System prompt (hard-coded test promptumuz)
SYSTEM_PROMPT = """
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.
❗ 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.
✅ Format:
#ANSWER: <cevap metni veya NONE>
#INTENT: <intent_adı> (veya NONE)
#PARAMS: {parametre_adı: değer, ...}
#MISSING: [eksik_parametre_adı, ...]
#ACTION_JSON: {api için gönderilecek json, eksikse boş bırak}
✅ Desteklenen intent'ler:
- doviz-kuru-intent → parametre: currency (dolar, euro, TL)
- yol-durumu-intent → parametreler: from_location, to_location (Ankara, İstanbul, İzmir)
- hava-durumu-intent → parametre: city (Ankara, İstanbul, İzmir)
❗ Kullanıcıya hitap ederken formal bir dil kullanınız, sadece bu formatlı blokları döndürünüz.
"""
app = FastAPI()
llm = None
class ChatRequest(BaseModel):
prompt: str
@app.on_event("startup")
def load_model():
global llm
llm = Llama(model_path=MODEL_PATH, n_gpu_layers=-1, n_ctx=4096)
print("✅ Model yüklendi.")
@app.post("/chat")
def chat(req: ChatRequest):
prompt = f"{SYSTEM_PROMPT}\n\nKullanıcı: {req.prompt}\nAsistan:"
response = llm(prompt, max_tokens=512, stop=["Kullanıcı:", "Asistan:"], echo=False)
answer = response["choices"][0]["text"].strip()
return {"response": answer}
@app.get("/")
def health():
return {"status": "ok"}