models-manager/src/collaboration_mode_presets.rs
59 lines
use codex_collaboration_mode_templates::DEFAULT as COLLABORATION_MODE_DEFAULT;use codex_collaboration_mode_templates::PLAN as COLLABORATION_MODE_PLAN;use codex_protocol::config_types::CollaborationModeMask;use codex_protocol::config_types::ModeKind;use codex_protocol::config_types::TUI_VISIBLE_COLLABORATION_MODES;use codex_protocol::openai_models::ReasoningEffort;use codex_utils_template::Template;use std::sync::LazyLock;const KNOWN_MODE_NAMES_TEMPLATE_KEY: &str = "KNOWN_MODE_NAMES";static COLLABORATION_MODE_DEFAULT_TEMPLATE: LazyLock<Template> = LazyLock::new(|| { Template::parse(COLLABORATION_MODE_DEFAULT) .unwrap_or_else(|err| panic!("collaboration mode default template must parse: {err}"))});pub fn builtin_collaboration_mode_presets() -> Vec<CollaborationModeMask> { vec![plan_preset(), default_preset()]}fn plan_preset() -> CollaborationModeMask { CollaborationModeMask { name: ModeKind::Plan.display_name().to_string(), mode: Some(ModeKind::Plan), model: None, reasoning_effort: Some(Some(ReasoningEffort::Medium)), developer_instructions: Some(Some(COLLABORATION_MODE_PLAN.to_string())), }}fn default_preset() -> CollaborationModeMask { CollaborationModeMask { name: ModeKind::Default.display_name().to_string(), mode: Some(ModeKind::Default), model: None, reasoning_effort: None, developer_instructions: Some(Some(default_mode_instructions())), }}fn default_mode_instructions() -> String { let known_mode_names = format_mode_names(&TUI_VISIBLE_COLLABORATION_MODES); COLLABORATION_MODE_DEFAULT_TEMPLATE .render([(KNOWN_MODE_NAMES_TEMPLATE_KEY, known_mode_names.as_str())]) .unwrap_or_else(|err| panic!("collaboration mode default template must render: {err}"))}fn format_mode_names(modes: &[ModeKind]) -> String { let mode_names: Vec<&str> = modes.iter().map(|mode| mode.display_name()).collect(); match mode_names.as_slice() { [] => "none".to_string(), [mode_name] => (*mode_name).to_string(), [first, second] => format!("{first} and {second}"), [..] => mode_names.join(", "), }}#[cfg(test)]#[path = "collaboration_mode_presets_tests.rs"]mod tests;