feat: Display default model in dropdowns and consolidate Git settings menu (#135)
* types: add commitMessageModel to DesktopSettings * store: add commitMessageModel state and fetch logic * lib: implement persistence for commitMessageModel setting * ui: create GitSettings component for model selection * ui: add Git section to OpenChamber settings sidebar * ui: register GitSectionContent in OpenChamberPage * server: use commitMessageModel setting for AI generation * tauri: sanitize commitMessageModel in settings commands * tauri: use commitMessageModel for desktop message generation * build: update lockfile and package configuration * refactor(openchamber): improve default model parsing with fallback logic * feat(openchamber): improve model selection fallback logic * refactor: move worktree settings into git section * refactor(openchamber): merge worktree into git section * refactor[worktree]: simplify empty state layout * revert: rollback bun.lock and package.json to main * feat(git): restrict model selection to OpenCode provider
This commit is contained in:
@@ -2089,13 +2089,30 @@ Diff summary:
|
||||
{}"#,
|
||||
diff_summaries
|
||||
);
|
||||
|
||||
let settings = state.settings().load().await.unwrap_or(serde_json::Value::Null);
|
||||
let raw_model = settings.get("commitMessageModel")
|
||||
.and_then(|v| v.as_str())
|
||||
.unwrap_or("");
|
||||
|
||||
let model_candidate = raw_model
|
||||
.split('/')
|
||||
.last()
|
||||
.unwrap_or(raw_model)
|
||||
.trim();
|
||||
|
||||
let model = if model_candidate.is_empty() {
|
||||
"big-pickle"
|
||||
} else {
|
||||
model_candidate
|
||||
};
|
||||
|
||||
// 3. Call API
|
||||
let client = Client::new();
|
||||
let res = client
|
||||
.post("https://opencode.ai/zen/v1/chat/completions")
|
||||
.json(&serde_json::json!({
|
||||
"model": "big-pickle",
|
||||
"model": model,
|
||||
"messages": [{ "role": "user", "content": prompt }],
|
||||
"max_tokens": 3000,
|
||||
"stream": false,
|
||||
|
||||
@@ -257,6 +257,14 @@ fn sanitize_settings_update(payload: &Value) -> Value {
|
||||
result_obj.insert("defaultAgent".to_string(), json!(trimmed));
|
||||
}
|
||||
}
|
||||
if let Some(Value::String(s)) = obj.get("commitMessageModel") {
|
||||
let trimmed = s.trim();
|
||||
if trimmed.is_empty() {
|
||||
result_obj.insert("commitMessageModel".to_string(), Value::Null);
|
||||
} else {
|
||||
result_obj.insert("commitMessageModel".to_string(), json!(trimmed));
|
||||
}
|
||||
}
|
||||
|
||||
// Boolean fields
|
||||
if let Some(Value::Bool(b)) = obj.get("useSystemTheme") {
|
||||
|
||||
Reference in New Issue
Block a user