feat: opencode console support
This commit is contained in:
@@ -66,6 +66,9 @@ pub struct AppArgs {
|
|||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
pub ollama_cloud_api_key: Vec<SecretString>,
|
pub ollama_cloud_api_key: Vec<SecretString>,
|
||||||
|
|
||||||
|
#[arg(long)]
|
||||||
|
pub opencode_console_api_key: Vec<SecretString>,
|
||||||
|
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
pub openrouter_api_key: Vec<SecretString>,
|
pub openrouter_api_key: Vec<SecretString>,
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ enum Provider {
|
|||||||
NovitaAi,
|
NovitaAi,
|
||||||
NvidiaNim,
|
NvidiaNim,
|
||||||
Ollama,
|
Ollama,
|
||||||
|
OpenCode,
|
||||||
OpenRouter,
|
OpenRouter,
|
||||||
VercelAiGateway,
|
VercelAiGateway,
|
||||||
ZAi,
|
ZAi,
|
||||||
@@ -129,6 +130,7 @@ impl Shortcut {
|
|||||||
"nvidia/nemotron-3.5-lightning-free".into(),
|
"nvidia/nemotron-3.5-lightning-free".into(),
|
||||||
),
|
),
|
||||||
(P::OpenRouter, "nvidia/nemotron-3.5-lightning:free".into()),
|
(P::OpenRouter, "nvidia/nemotron-3.5-lightning:free".into()),
|
||||||
|
(P::OpenCode, "nemotron-3.5-lightning-free".into()),
|
||||||
(P::ZAi, "glm-4.6v-flash".into()),
|
(P::ZAi, "glm-4.6v-flash".into()),
|
||||||
(P::ZAi, "glm-4.5-flash".into()),
|
(P::ZAi, "glm-4.5-flash".into()),
|
||||||
(P::OpenRouter, "poolside/laguna-xs.2:free".into()),
|
(P::OpenRouter, "poolside/laguna-xs.2:free".into()),
|
||||||
@@ -180,6 +182,7 @@ impl Shortcut {
|
|||||||
"nvidia/nemotron-3.5-super-vl-120b-a12b".into(),
|
"nvidia/nemotron-3.5-super-vl-120b-a12b".into(),
|
||||||
),
|
),
|
||||||
(P::OpenRouter, "nvidia/nemotron-3.5-super-vl:free".into()),
|
(P::OpenRouter, "nvidia/nemotron-3.5-super-vl:free".into()),
|
||||||
|
(P::OpenCode, "nemotron-3.5-super-vl-free".into()),
|
||||||
(P::Mistral, "mistral-medium-3.5".into()),
|
(P::Mistral, "mistral-medium-3.5".into()),
|
||||||
(P::Kilo, "inclusionai-ling-3-0-flash-free".into()),
|
(P::Kilo, "inclusionai-ling-3-0-flash-free".into()),
|
||||||
(P::NovitaAi, "inclusionai/ling-3.0-flash-vl".into()),
|
(P::NovitaAi, "inclusionai/ling-3.0-flash-vl".into()),
|
||||||
@@ -223,15 +226,19 @@ impl Shortcut {
|
|||||||
(P::NvidiaNim, "stepfun-ai/step-5-preview".into()),
|
(P::NvidiaNim, "stepfun-ai/step-5-preview".into()),
|
||||||
(P::CloudflareWorkersAi, "@cf/zai-org/glm-5.3-flash".into()),
|
(P::CloudflareWorkersAi, "@cf/zai-org/glm-5.3-flash".into()),
|
||||||
(P::NvidiaNim, "z-ai/glm-5-3-flash".into()),
|
(P::NvidiaNim, "z-ai/glm-5-3-flash".into()),
|
||||||
|
(P::OpenCode, "glm-5.3-flash-free".into()),
|
||||||
(P::HuggingFace, "zai-org/GLM-5.3-Flash".into()),
|
(P::HuggingFace, "zai-org/GLM-5.3-Flash".into()),
|
||||||
(P::HuggingFace, "zai-org/GLM-5.3-Flash-BF16".into()),
|
(P::HuggingFace, "zai-org/GLM-5.3-Flash-BF16".into()),
|
||||||
(P::VercelAiGateway, "openai/gpt-5.2".into()),
|
(P::VercelAiGateway, "openai/gpt-5.2".into()),
|
||||||
(P::NvidiaNim, "deepseek-ai/deepseek-v4.1-flash".into()),
|
(P::NvidiaNim, "deepseek-ai/deepseek-v4.1-flash".into()),
|
||||||
(P::HuggingFace, "deepseek-ai/DeepSeek-V4.1-Flash".into()),
|
(P::HuggingFace, "deepseek-ai/DeepSeek-V4.1-Flash".into()),
|
||||||
|
(P::OpenCode, "deepseek-v4.1-flash-free".into()),
|
||||||
(P::VercelAiGateway, "inclusionai/ling-3.1-flash".into()),
|
(P::VercelAiGateway, "inclusionai/ling-3.1-flash".into()),
|
||||||
(P::HuggingFace, "inclusionAI/Ling-3.1-flash".into()),
|
(P::HuggingFace, "inclusionAI/Ling-3.1-flash".into()),
|
||||||
(P::Ollama, "beam".into()),
|
(P::Ollama, "beam".into()),
|
||||||
|
(P::OpenCode, "beam-free".into()),
|
||||||
(P::VercelAiGateway, "xiaomi/mimo-v2.6-flash".into()),
|
(P::VercelAiGateway, "xiaomi/mimo-v2.6-flash".into()),
|
||||||
|
(P::OpenCode, "mimo-v2.6-flash-free".into()),
|
||||||
(P::HuggingFace, "XiaomiMiMo/MiMo-V2.6-Flash-RL".into()),
|
(P::HuggingFace, "XiaomiMiMo/MiMo-V2.6-Flash-RL".into()),
|
||||||
(P::Kilo, "nex-agi-nex-n2-5-pro-free".into()),
|
(P::Kilo, "nex-agi-nex-n2-5-pro-free".into()),
|
||||||
(P::VercelAiGateway, "xiaomi/mimo-v2.5".into()),
|
(P::VercelAiGateway, "xiaomi/mimo-v2.5".into()),
|
||||||
@@ -247,6 +254,7 @@ impl Shortcut {
|
|||||||
(P::Ollama, "nemotron-3-ultra".into()),
|
(P::Ollama, "nemotron-3-ultra".into()),
|
||||||
(P::NvidiaNim, "nvidia/nemotron-3-ultra-550b-a55b".into()),
|
(P::NvidiaNim, "nvidia/nemotron-3-ultra-550b-a55b".into()),
|
||||||
(P::Kilo, "nvidia-nemotron-3-ultra-550b-a55b-free".into()),
|
(P::Kilo, "nvidia-nemotron-3-ultra-550b-a55b-free".into()),
|
||||||
|
(P::OpenCode, "nemotron-3-ultra-free".into()),
|
||||||
],
|
],
|
||||||
|
|
||||||
S::XL => vec![
|
S::XL => vec![
|
||||||
@@ -254,6 +262,7 @@ impl Shortcut {
|
|||||||
(P::HuggingFace, "zai-org/GLM-5.3".into()),
|
(P::HuggingFace, "zai-org/GLM-5.3".into()),
|
||||||
(P::CloudflareWorkersAi, "@cf/zai-org/glm-5.3".into()),
|
(P::CloudflareWorkersAi, "@cf/zai-org/glm-5.3".into()),
|
||||||
(P::Mistral, "zai-glm-5-3".into()),
|
(P::Mistral, "zai-glm-5-3".into()),
|
||||||
|
(P::OpenCode, "muse-spark-1.3-contributor-free".into()),
|
||||||
(P::NvidiaNim, "moonshotai/kimi-k3".into()),
|
(P::NvidiaNim, "moonshotai/kimi-k3".into()),
|
||||||
(P::HuggingFace, "moonshotai/Kimi-K3".into()),
|
(P::HuggingFace, "moonshotai/Kimi-K3".into()),
|
||||||
(P::HuggingFace, "tencent/Hy4-preview".into()),
|
(P::HuggingFace, "tencent/Hy4-preview".into()),
|
||||||
@@ -261,6 +270,7 @@ impl Shortcut {
|
|||||||
(P::Mistral, "mistral-large-4".into()),
|
(P::Mistral, "mistral-large-4".into()),
|
||||||
(P::HuggingFace, "Qwen/Qwen3.8-2.4T-A95B".into()),
|
(P::HuggingFace, "Qwen/Qwen3.8-2.4T-A95B".into()),
|
||||||
(P::VercelAiGateway, "xiaomi/mimo-v2.5-pro".into()),
|
(P::VercelAiGateway, "xiaomi/mimo-v2.5-pro".into()),
|
||||||
|
(P::OpenCode, "longcat-2.5-preview-free".into()),
|
||||||
(P::OpenRouter, "thinkingmachines/inkling:free".into()),
|
(P::OpenRouter, "thinkingmachines/inkling:free".into()),
|
||||||
(P::HuggingFace, "thinkingmachines/Inkling".into()),
|
(P::HuggingFace, "thinkingmachines/Inkling".into()),
|
||||||
(P::VercelAiGateway, "thinkingmachines/inkling".into()),
|
(P::VercelAiGateway, "thinkingmachines/inkling".into()),
|
||||||
@@ -270,6 +280,8 @@ impl Shortcut {
|
|||||||
|
|
||||||
S::Experimental => vec![
|
S::Experimental => vec![
|
||||||
(P::OpenRouter, "space-bunny-alpha".into()),
|
(P::OpenRouter, "space-bunny-alpha".into()),
|
||||||
|
(P::OpenCode, "space-bunny-free".into()),
|
||||||
|
(P::OpenCode, "big-pickle".into()),
|
||||||
(P::VercelAiGateway, "stealth/glyph-cluster".into()),
|
(P::VercelAiGateway, "stealth/glyph-cluster".into()),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
@@ -479,6 +491,18 @@ pub async fn create_chat_completion(
|
|||||||
.build()
|
.build()
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
|
Provider::OpenCode => state
|
||||||
|
.app_args
|
||||||
|
.opencode_console_api_key
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.map(|api_key| {
|
||||||
|
Upstream::builder()
|
||||||
|
.url("https://opencode.ai/inference/openai/v1/chat/completions".parse().expect("TODO"))
|
||||||
|
.api_key(api_key)
|
||||||
|
.build()
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
Provider::VercelAiGateway => state
|
Provider::VercelAiGateway => state
|
||||||
.app_args
|
.app_args
|
||||||
.vercel_ai_gateway_api_key
|
.vercel_ai_gateway_api_key
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ pub enum Shortcut {
|
|||||||
enum Provider {
|
enum Provider {
|
||||||
CloudflareWorkersAi,
|
CloudflareWorkersAi,
|
||||||
LiquidAi,
|
LiquidAi,
|
||||||
|
OpenCode,
|
||||||
OpenRouter,
|
OpenRouter,
|
||||||
VercelAiGateway,
|
VercelAiGateway,
|
||||||
}
|
}
|
||||||
@@ -63,6 +64,7 @@ impl Shortcut {
|
|||||||
|
|
||||||
S::M => {
|
S::M => {
|
||||||
vec![
|
vec![
|
||||||
|
(P::OpenCode, "jev-1.13-free".into()),
|
||||||
(P::CloudflareWorkersAi, "clef".into()),
|
(P::CloudflareWorkersAi, "clef".into()),
|
||||||
(P::OpenRouter, "inception/mercury-decide:free".into()),
|
(P::OpenRouter, "inception/mercury-decide:free".into()),
|
||||||
]
|
]
|
||||||
@@ -138,6 +140,18 @@ pub async fn create_system_one(
|
|||||||
.build()
|
.build()
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
|
Provider::OpenCode => state
|
||||||
|
.app_args
|
||||||
|
.opencode_console_api_key
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.map(|api_key| {
|
||||||
|
Upstream::builder()
|
||||||
|
.url("https://opencode.ai/inference/systemone/v1/systemone".parse().expect("TODO"))
|
||||||
|
.api_key(api_key)
|
||||||
|
.build()
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
Provider::OpenRouter => state
|
Provider::OpenRouter => state
|
||||||
.app_args
|
.app_args
|
||||||
.openrouter_api_key
|
.openrouter_api_key
|
||||||
|
|||||||
Reference in New Issue
Block a user