diff --git a/src/ai_client.py b/src/ai_client.py
index 9d6f1d0b..95a5aac0 100644
--- a/src/ai_client.py
+++ b/src/ai_client.py
@@ -2570,6 +2570,7 @@ def _send_grok(md_content: str, user_message: str, base_dir: str,
Runs synchronously in the caller thread; synchronizes Grok history using _grok_history_lock.
"""
from src.openai_compatible import OpenAICompatibleRequest, _classify_openai_compatible_error
+ from src.openai_schemas import ChatMessage
try:
client = _ensure_grok_client()
tools: list[Metadata] | None = _get_deepseek_tools() or None
@@ -2586,8 +2587,9 @@ def _send_grok(md_content: str, user_message: str, base_dir: str,
_grok_history.append({"role": "user", "content": user_content})
def _build_grok_request(_round_idx: int) -> OpenAICompatibleRequest:
with _grok_history_lock:
- messages: list[Metadata] = [{"role": "system", "content": f"{_get_combined_system_prompt()}\n\n\n{md_content}\n"}]
- messages.extend(_grok_history)
+ history_msgs: list[ChatMessage] = [ChatMessage(role=m["role"], content=m["content"]) for m in _grok_history]
+ messages: list[ChatMessage] = [ChatMessage(role="system", content=f"{_get_combined_system_prompt()}\n\n\n{md_content}\n")]
+ messages.extend(history_msgs)
extra_body: Metadata = {}
if caps.web_search:
extra_body["search_parameters"] = {"mode": "auto"}
@@ -2655,6 +2657,7 @@ def _send_minimax(md_content: str, user_message: str, base_dir: str,
Runs synchronously in the caller thread; synchronizes MiniMax history using _minimax_history_lock.
"""
from src.openai_compatible import OpenAICompatibleRequest
+ from src.openai_schemas import ChatMessage
try:
_ensure_minimax_client()
tools: list[Metadata] | None = _get_deepseek_tools() or None
@@ -2665,8 +2668,9 @@ def _send_minimax(md_content: str, user_message: str, base_dir: str,
_minimax_history.append({"role": "user", "content": user_message})
def _build_minimax_request(_round_idx: int) -> OpenAICompatibleRequest:
with _minimax_history_lock:
- messages: list[Metadata] = [{"role": "system", "content": f"{_get_combined_system_prompt()}\n\n\n{md_content}\n"}]
- messages.extend(_minimax_history)
+ history_msgs: list[ChatMessage] = [ChatMessage(role=m["role"], content=m["content"]) for m in _minimax_history]
+ messages: list[ChatMessage] = [ChatMessage(role="system", content=f"{_get_combined_system_prompt()}\n\n\n{md_content}\n")]
+ messages.extend(history_msgs)
return OpenAICompatibleRequest(
messages=messages, model=_model, temperature=_temperature, top_p=_top_p,
max_tokens=min(_max_tokens, 8192), stream=stream, stream_callback=stream_callback,
@@ -2895,6 +2899,7 @@ def _send_llama(md_content: str, user_message: str, base_dir: str,
Runs synchronously in the caller thread; synchronizes history using _llama_history_lock.
"""
from src.openai_compatible import OpenAICompatibleRequest, _classify_openai_compatible_error
+ from src.openai_schemas import ChatMessage
try:
if "localhost" in _llama_base_url or "127.0.0.1" in _llama_base_url:
return _send_llama_native(md_content, user_message, base_dir, file_items, discussion_history, stream, pre_tool_callback, qa_callback, stream_callback, patch_callback)
@@ -2912,8 +2917,9 @@ def _send_llama(md_content: str, user_message: str, base_dir: str,
_llama_history.append({"role": "user", "content": user_content})
def _build_llama_request(_round_idx: int) -> OpenAICompatibleRequest:
with _llama_history_lock:
- messages: list[Metadata] = [{"role": "system", "content": f"{_get_combined_system_prompt()}\n\n\n{md_content}\n"}]
- messages.extend(_llama_history)
+ history_msgs: list[ChatMessage] = [ChatMessage(role=m["role"], content=m["content"]) for m in _llama_history]
+ messages: list[ChatMessage] = [ChatMessage(role="system", content=f"{_get_combined_system_prompt()}\n\n\n{md_content}\n")]
+ messages.extend(history_msgs)
return OpenAICompatibleRequest(
messages=messages, model=_model, temperature=_temperature, top_p=_top_p,
max_tokens=_max_tokens, stream=stream, stream_callback=stream_callback,