///|
pub struct Model {
name : String
description : String?
model_name : String
model_type : Type
api_key : String
base_url : String
safe_zone_tokens : Int
supports_anthropic_prompt_caching : Bool
supports_apply_patch : Bool
access_token : String?
account_id : String?
refresh_token : String?
id_token : String?
} derive(ToJson, Eq, Show)///|
pub(all) enum Provider {
OpenAI
Anthropic
CodexOAuth
Copilot
Qwen
Kimi
KimiCoding
}///|
pub(all) enum Type {
SaaS(Provider)
}///|
pub(all) enum CommonModels {
Qwen3CoderPlus
Qwen3CoderFlash
Grok4Fast
GrokCodeFast1
ClaudeHaiku4_5
ClaudeSonnet4_5
ClaudeOpus4_5
Gpt5Codex
Gpt5
Gpt5Mini
Gpt5Nano
KimiK2_0905
Glm4_6
MinimaxM2
DeepseekV3_2
}///|
pub(all) enum CopilotModels {
Gpt4_1
Gpt4o
Gpt5
Gpt5Mini
Gpt5Codex
Gpt5_1
Gpt5_1Codex
Gpt5_1CodexMax
Gpt5_1CodexMini
Gpt5_2
O3
O3Mini
O4Mini
Claude3_5Sonnet
Claude3_7Sonnet
ClaudeHaiku4_5
ClaudeOpus4_5
Gemini2_0Flash
Gemini2_5Pro
GrokCodeFast1
// ... more models
}///|
pub(all) enum CodexModels {
Gpt5_6Sol
Gpt5_4 // Explicit legacy compatibility only
Gpt5_3Codex
}pub fn Model::new(
api_key~ : String,
base_url~ : String,
name~ : String,
safe_zone_tokens~ : Int,
model_name? : String,
model_type? : Type,
description? : String,
supports_anthropic_prompt_caching? : Bool,
// OAuth fields for CodexOAuth provider
access_token? : String,
account_id? : String,
refresh_token? : String,
id_token? : String,
) -> Model// OpenRouter models
pub fn open_router_model(
api_key~ : String,
name? : CommonModels,
) -> Model
// GitHub Copilot models
pub fn copilot_model(
copilot_token~ : String,
github_token~ : String,
name? : CopilotModels,
) -> Model
// Codex OAuth models
pub fn codex_oauth_model(
access_token~ : String,
account_id~ : String,
refresh_token~ : String,
id_token? : String,
name? : CodexModels,
) -> Model
// Qwen models
pub fn qwen_model(
api_key~ : String,
name? : QwenModels,
) -> Model
// Kimi models
pub fn kimi_model(api_key~ : String, name? : KimiModels) -> Model
pub fn kimi_coding_model(api_key~ : String, name? : KimiCodingModels) -> Modelpub async fn load(
home? : StringView,
cwd? : StringView,
name? : String,
) -> Model?type Loader
pub async fn Loader::new(
home? : StringView,
cwd? : StringView,
) -> Self
pub async fn Loader::get_model(Self, name? : String) -> Model?
pub async fn Loader::models(Self) -> ArrayView[Model]// Using OpenRouter
///|
let model = @model.open_router_model(
api_key="sk-or-...",
name=@model.CommonModels::ClaudeSonnet4_5,
)
// Using GitHub Copilot
///|
let model = @model.copilot_model(
copilot_token="ghu_...",
github_token="ghp_...",
name=@model.CopilotModels::Gpt5_1,
)
// Custom model configuration
///|
let model = @model.Model::new(
api_key="your-api-key",
base_url="https://api.example.com/v1",
name="custom-model",
safe_zone_tokens=128000,
model_name="custom-model-v1",
)
// Load from configuration file
///|
let model = @model.load(name="my-model"){
"providers": {
"openrouter": {
"baseUrl": "https://openrouter.ai/api/v1",
"apiKey": "sk-or-...",
"models": [
{ "id": "claude-sonnet", "name": "anthropic/claude-sonnet-4.5" }
]
}
}
}pub(all) enum CommonModels {
Qwen3CoderPlus
Qwen3CoderFlash
Grok4Fast
GrokCodeFast1
ClaudeHaiku4_5
ClaudeSonnet4_5
ClaudeOpus4_5
Gpt5Codex
Gpt5
Gpt5Mini
Gpt5Nano
KimiK2_0905
Glm4_6
MinimaxM2
DeepseekV3_2
}impl Show for CommonModelspub(all) enum CopilotModels {
Gpt4_1
Gpt4o
Gpt5
Gpt5Mini
Gpt5Codex
Gpt5_1
Gpt5_1Codex
Gpt5_1CodexMax
Gpt5_1CodexMini
Gpt5_2
O3
O3Mini
O4Mini
Claude3_5Sonnet
Claude3_7Sonnet
Claude3_7SonnetThought
ClaudeHaiku4_5
ClaudeOpus4
ClaudeOpus4_5
ClaudeOpus41
ClaudeSonnet4
ClaudeSonnet4_5
Gemini2_0Flash
Gemini2_5Pro
Gemini3FlashPreview
Gemini3ProPreview
GrokCodeFast1
}impl Show for CopilotModelspub(all) enum KimiModels {
KimiK2_0905
KimiK2P5
MoonshotV1_8k
MoonshotV1_32k
MoonshotV1_128k
}impl Show for KimiModelstype Loaderpub struct Model {
name : String
description : String?
model_name : String
model_type : Type
api_key : String
base_url : String
safe_zone_tokens : Int
supports_anthropic_prompt_caching : Bool
supports_apply_patch : Bool
access_token : String?
account_id : String?
refresh_token : String?
id_token : String?
} derive(Eq, ToJson, Debug)#as_free_fn
fn Model::new(api_key~ : String, base_url~ : String, name~ : String, safe_zone_tokens~ : Int, model_name? : String, model_type? : Type, description? : String, supports_anthropic_prompt_caching? : Bool, access_token? : String, account_id? : String, refresh_token? : String, id_token? : String) -> Modelpub struct ModelConfig {
id : String
name : String?
reasoning : Bool?
input : Array[String]?
cost : CostConfig?
contextWindow : Int?
maxTokens : Int?
} derive(ToJson, Debug)impl FromJson for ModelConfigpub struct ProviderConfig {
baseUrl : String?
api : String?
models : Array[ModelConfig]
apiKey : String?
} derive(ToJson, Debug)impl FromJson for ProviderConfigpub(all) enum QwenModels {
Qwen3CoderPlus
Qwen3CoderFlash
Qwen3_235B_A22B
Qwen3_32B
QwenMax
QwenPlus
QwenTurbo
QwenLong
}impl Show for QwenModelsfn codex_oauth_model(access_token~ : String, account_id~ : String, refresh_token~ : String, id_token? : String, name? : CodexModels) -> ModelDependencies