File size: 2,634 Bytes
7907a6b
 
b85f47e
 
 
 
 
7907a6b
b85f47e
7907a6b
b85f47e
 
 
 
 
 
 
 
 
 
7907a6b
 
 
 
 
 
 
 
 
b85f47e
 
 
 
 
 
 
f634431
b85f47e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fdebccf
b85f47e
 
 
 
 
 
 
 
 
 
 
 
fdebccf
 
 
b85f47e
fdebccf
b85f47e
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import traceback
import requests
from fastapi import Request
from fastapi.responses import JSONResponse
from intent_api import execute_intent
from parse_llm_blocks import parse_llm_blocks
from log import log
from llm_request import request_spark_model  # ✅ yeni util

async def handle_chat(msg, request: Request, app, service_config, session):
    try:
        user_input = msg.user_input.strip()
        log(f"💬 Kullanıcı input'u: '{user_input}'")

        project_name = session.project_name
        system_prompt = service_config.system_prompt

        # Chat history'ye user mesajını ekle
        session.chat_history.append({"role": "user", "content": user_input})

        # === Spark microservice'e LLM çağrısı
        llm_response = request_spark_model(
            service_config.llm_inference_service_url,
            project_name,
            user_input,
            system_prompt,
            session.chat_history
        )
        log(f"🤖 Spark cevabı: {llm_response}")

        # === LLM cevabını parse et
        parsed = parse_llm_blocks(llm_response)
        intent = parsed["intent"]
        params = parsed["params"]
        missing = parsed["missing"]
        action_json = parsed["action_json"]
        answer = parsed["answer"]

        # Chat history'ye assistant cevabını ekle
        session.chat_history.append({"role": "assistant", "content": llm_response})

        # === INTENT yok → direkt cevap
        if intent == "NONE":
            session.awaiting_variable = None
            session.last_intent = None
            session.variables.clear()
            return {"response": answer}

        # === INTENT varsa → parametreleri güncelle
        session.last_intent = intent
        session.variables.update(params)

        # Eksik parametre varsa → kullanıcıdan istenecek
        if missing:
            session.awaiting_variable = missing[0]
            return {"response": f"Lütfen {', '.join(missing)} bilgisini belirtir misin?"}

        # === API çağrısı yap
        log("🚀 execute_intent() çağrılıyor...")
        result = execute_intent(
            intent,
            user_input,
            session.__dict__,
            project_name,
            service_config
        )

        if "reply" in result:
            return {"response": result["reply"]}
        elif "fallback" in result:
            return {"response": result["fallback"]}
        else:
            return {"response": "Beklenmeyen bir hata oluştu."}

    except Exception as e:
        traceback.print_exc()
        return JSONResponse(content={"error": str(e)}, status_code=500)