Spaces:
Paused
Paused
| from fastapi import Request | |
| from fastapi.responses import JSONResponse | |
| import traceback | |
| from llm_model import Message, LLMModel | |
| from intent_api import execute_intent | |
| from parse_llm_blocks import parse_llm_blocks | |
| from log import log | |
| async def handle_chat(msg: Message, request: Request, app, service_config, session, llm_model: LLMModel): | |
| try: | |
| user_input = msg.user_input.strip() | |
| log(f"💬 Kullanıcı input'u: '{user_input}'") | |
| project_name = session.project_name | |
| project_config = service_config.get_project_llm_config(project_name) | |
| system_prompt = service_config.system_prompt | |
| # Chat history'ye user mesajını ekle | |
| session.chat_history.append({"role": "user", "content": user_input}) | |
| # === LLM çağrısı | |
| llm_response = await llm_model.generate_response_with_messages(session.chat_history, project_config, system_prompt) | |
| log(f"🤖 LLM 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.get("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) | |