From d450b318c0db03135e4ba6122d15acce529ceba8 Mon Sep 17 00:00:00 2001 From: vahidrezvani Date: Wed, 25 Feb 2026 11:59:36 +0330 Subject: [PATCH] add kia ai chat tools 1 --- src/services/chatbot.py | 18 +++++++++++++++--- src/services/kiaai/chat.py | 6 ++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/services/chatbot.py b/src/services/chatbot.py index 7b5d038..ca9d733 100644 --- a/src/services/chatbot.py +++ b/src/services/chatbot.py @@ -171,10 +171,11 @@ def audio_loader(content, query: str, audio: [str | None, str | None]): return content def chatbot_workflow(bot, now): + is_kia_model = bot.model.startswith("kia/") + print(f"[chatbot_workflow] START | model='{bot.model}' | is_kia={is_kia_model} | web_search={bot.web_search}") - print(f"[get_model] Using model: {bot}") model = get_model(model=bot.model) - print(f"[get_model] Using model: {model}") + print(f"[chatbot_workflow] Model initialized: {type(model).__name__}") trimmer = get_trimmer() if bot.web_search: @@ -182,9 +183,13 @@ def chatbot_workflow(bot, now): async def call_model(state: MessagesState): kwargs = {} - if "gemini" not in bot.model: + is_kia = bot.model.startswith("kia/") + if "gemini" not in bot.model and not is_kia: kwargs["stream_usage"] = True + if is_kia: + print(f"[KiaAI] call_model invoked | model='{bot.model}' | stream_usage disabled") + trimmed_messages = await trimmer.ainvoke(state["messages"]) input_messages = [ SystemMessage( @@ -199,6 +204,13 @@ def chatbot_workflow(bot, now): response = await model.ainvoke(input=input_messages, **kwargs) + if is_kia: + print(f"[KiaAI] Response received | type={type(response).__name__}") + print(f"[KiaAI] content='{response.content[:200] if response.content else None}'") + print(f"[KiaAI] usage_metadata={response.usage_metadata}") + print(f"[KiaAI] additional_kwargs={response.additional_kwargs}") + print(f"[KiaAI] tool_calls={response.tool_calls}") + ai_msg_created_at = datetime.now(UTC).isoformat() response.additional_kwargs["created_at"] = ai_msg_created_at diff --git a/src/services/kiaai/chat.py b/src/services/kiaai/chat.py index 3c2e64b..9973913 100644 --- a/src/services/kiaai/chat.py +++ b/src/services/kiaai/chat.py @@ -47,11 +47,17 @@ class KiaAIService: if reasoning_effort and model_name in REASONING_MODELS: model_kwargs["reasoning_effort"] = reasoning_effort + print(f"[KiaAI] Initializing model='{model_name}' | base_url='{base_url}' | reasoning_effort='{reasoning_effort}'") + + # streaming=False is REQUIRED: KIA API returns chunks with choices=null + # which causes TypeError in LangChain's _convert_chunk_to_generation_chunk. + # Disabling streaming forces LangChain to use the non-streaming endpoint. return ChatOpenAI( model=model_name, api_key=settings.kia_api_key, base_url=base_url, model_kwargs=model_kwargs, + streaming=False, )