Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions src/llm/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -512,8 +512,9 @@ impl SpacebotModel {

messages.extend(convert_messages_to_openai(&request.chat_history));

let api_model_name = self.remap_model_name_for_api();
let mut body = serde_json::json!({
"model": self.model_name,
"model": api_model_name,
"messages": messages,
});

Expand Down Expand Up @@ -616,8 +617,9 @@ impl SpacebotModel {

let input = convert_messages_to_openai_responses(&request.chat_history);

let api_model_name = self.remap_model_name_for_api();
let mut body = serde_json::json!({
"model": self.model_name,
"model": api_model_name,
"input": input,
});

Expand Down Expand Up @@ -819,6 +821,17 @@ impl SpacebotModel {
parse_openai_response(response_body, provider_display_name)
}

/// Remap model name for providers that require a different format in API calls.
fn remap_model_name_for_api(&self) -> String {
if self.provider == "zai-coding-plan" {
// Z.AI Coding Plan API expects "zai/glm-5" not "glm-5"
let model_name = self.model_name.strip_prefix("zai/").unwrap_or(&self.model_name);
format!("zai/{model_name}")
} else {
self.model_name.clone()
}
}

/// Generic OpenAI-compatible API call with optional bearer auth.
async fn call_openai_compatible_with_optional_auth(
&self,
Expand All @@ -838,8 +851,9 @@ impl SpacebotModel {

messages.extend(convert_messages_to_openai(&request.chat_history));

let api_model_name = self.remap_model_name_for_api();
let mut body = serde_json::json!({
"model": self.model_name,
"model": api_model_name,
"messages": messages,
});

Expand Down
Loading