Skip to content
Draft
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ See the full history in [CHANGELOG.md](CHANGELOG.md).
| Kiro | Cookies / CLI | Monthly Credits, Overage |
| Vertex AI | gcloud OAuth | Cost |
| v0 | API Key | Billing quota, API rate limits, on-demand balance |
| Vercel AI Gateway | API Key | Team credit balance, lifetime spend |
| Augment | Cookies | Credits |
| OpenCode | Local Config | Usage |
| Kimi | Cookies | 5h Rate, Weekly |
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions apps/desktop-tauri/src/components/providers/providerIcons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ import stepfun from "./icons/ProviderIcon-stepfun.svg?raw";
import sub2api from "./icons/ProviderIcon-sub2api.svg?raw";
import t3chat from "./icons/ProviderIcon-t3chat.svg?raw";
import venice from "./icons/ProviderIcon-venice.svg?raw";
import vercel from "./icons/ProviderIcon-vercel.svg?raw";
import vertexai from "./icons/ProviderIcon-vertexai.svg?raw";
import warp from "./icons/ProviderIcon-warp.svg?raw";
import windsurf from "./icons/ProviderIcon-windsurf.svg?raw";
Expand Down Expand Up @@ -148,6 +149,7 @@ const RAW: Record<string, string> = {
sub2api: tint(sub2api),
t3chat: tint(t3chat),
venice: tint(venice),
vercel: tint(vercel),
vertexai: tint(vertexai),
warp: tint(warp),
windsurf: tint(windsurf),
Expand Down Expand Up @@ -230,6 +232,7 @@ export const PROVIDER_ICON_REGISTRY: Record<string, ProviderIcon> = {
stepfun: { id: "stepfun", brandColor: "#999999", fallbackLetter: "S", svgPath: RAW.stepfun },
sub2api: { id: "sub2api", brandColor: "#2dc6d8", fallbackLetter: "S", svgPath: RAW.sub2api },
venice: { id: "venice", brandColor: "#111827", fallbackLetter: "V", svgPath: RAW.venice },
vercel: { id: "vercel", brandColor: "#737373", fallbackLetter: "V", svgPath: RAW.vercel },
openaiapi: { id: "openaiapi", brandColor: "#10a37f", fallbackLetter: "O" },
chutes: { id: "chutes", brandColor: "#ff5c35", fallbackLetter: "C" },
litellm: { id: "litellm", brandColor: "#0ea5e9", fallbackLetter: "L" },
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop-tauri/src/surfaces/TrayPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const HAS_DASHBOARD = new Set([
"mimo", "minimax", "mistral", "nanogpt", "notion", "ollama", "openaiapi",
"opencode", "opencodego", "openrouter", "perplexity", "qoder", "codebuddy", "sakana", "stepfun",
"t3chat", "venice", "vertexai", "warp", "windsurf",
"xai", "zai", "fireworks", "meta", "muse", "nous",
"xai", "zai", "fireworks", "meta", "muse", "nous", "vercel",
]);
/** Provider IDs that have a status page URL in the backend */
const HAS_STATUS_PAGE = new Set([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ function providerSourceHintShort(
case "xai":
case "fireworks":
case "meta":
case "vercel":
return t("ProviderSourceApiShort");
case "kiro":
return t("ProviderSourceKiroEnvShort");
Expand Down
1 change: 1 addition & 0 deletions apps/desktop-tauri/src/test/providerCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export const TEST_PROVIDER_CATALOG: Array<[string, string]> = [
["crof", "Crof"],
["stepfun", "StepFun"],
["venice", "Venice"],
["vercel", "Vercel AI Gateway"],
["openaiapi", "OpenAI API"],
["grok", "Grok"],
["elevenlabs", "ElevenLabs"],
Expand Down
17 changes: 16 additions & 1 deletion rust/src/core/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ pub enum ProviderId {
Muse,
Replicate,
Nous,
Vercel,
}

impl ProviderId {
Expand Down Expand Up @@ -179,6 +180,7 @@ impl ProviderId {
ProviderId::Muse,
ProviderId::Replicate,
ProviderId::Nous,
ProviderId::Vercel,
]
}

Expand Down Expand Up @@ -226,6 +228,7 @@ impl ProviderId {
ProviderId::Meta => "meta",
ProviderId::Muse => "muse",
ProviderId::Nous => "nous",
ProviderId::Vercel => "vercel",
ProviderId::AiAnd => "aiand",
ProviderId::Windsurf => "windsurf",
ProviderId::Manus => "manus",
Expand Down Expand Up @@ -313,6 +316,7 @@ impl ProviderId {
ProviderId::Meta => "Meta",
ProviderId::Muse => "Muse Code",
ProviderId::Nous => "Nous Portal",
ProviderId::Vercel => "Vercel AI Gateway",
ProviderId::AiAnd => "ai&",
ProviderId::Windsurf => "Windsurf",
ProviderId::Manus => "Manus",
Expand Down Expand Up @@ -415,6 +419,7 @@ impl ProviderId {
ProviderId::Meta => None,
ProviderId::Muse => None,
ProviderId::Nous => None,
ProviderId::Vercel => None,
ProviderId::AiAnd => None,
ProviderId::Windsurf => None,
ProviderId::Doubao => None,
Expand Down Expand Up @@ -495,6 +500,9 @@ impl ProviderId {
"fireworks" | "fireworks-ai" | "fw" => Some(ProviderId::Fireworks),
"muse" | "muse-code" | "muse code" => Some(ProviderId::Muse),
"nous" | "nous-portal" | "nous portal" | "hermes" => Some(ProviderId::Nous),
"vercel" | "vercel-ai-gateway" | "vercel ai gateway" | "ai-gateway" | "ai gateway" => {
Some(ProviderId::Vercel)
}
"meta" | "metaspark" | "meta-spark" | "muse-spark" | "musespark" | "muse spark"
| "meta muse spark" => Some(ProviderId::Meta),
"aiand" | "ai&" | "ai-and" | "ai and" => Some(ProviderId::AiAnd),
Expand Down Expand Up @@ -958,6 +966,10 @@ pub fn cli_name_map() -> HashMap<&'static str, ProviderId> {
map.insert("nous-portal", ProviderId::Nous);
map.insert("nous portal", ProviderId::Nous);
map.insert("hermes", ProviderId::Nous);
map.insert("vercel-ai-gateway", ProviderId::Vercel);
map.insert("vercel ai gateway", ProviderId::Vercel);
map.insert("ai-gateway", ProviderId::Vercel);
map.insert("ai gateway", ProviderId::Vercel);
map.insert("metaspark", ProviderId::Meta);
map.insert("meta-spark", ProviderId::Meta);
map.insert("muse-spark", ProviderId::Meta);
Expand Down Expand Up @@ -1106,6 +1118,8 @@ pub fn brand_color(id: ProviderId) -> &'static str {
ProviderId::Muse => "#0668E1",
ProviderId::Replicate => "#000000",
ProviderId::Nous => "#D6A55C",
// Upstream uses white; a mid neutral keeps contrast on light and dark surfaces.
ProviderId::Vercel => "#737373",
}
}

Expand All @@ -1120,7 +1134,7 @@ mod tests {
#[test]
fn test_provider_id_all() {
let all = ProviderId::all();
assert_eq!(all.len(), 80);
assert_eq!(all.len(), 81);
assert!(all.contains(&ProviderId::Claude));
assert!(all.contains(&ProviderId::Codex));
assert!(all.contains(&ProviderId::Pi));
Expand Down Expand Up @@ -1181,6 +1195,7 @@ mod tests {
assert!(all.contains(&ProviderId::Replicate));
assert!(all.contains(&ProviderId::Muse));
assert!(all.contains(&ProviderId::Nous));
assert!(all.contains(&ProviderId::Vercel));
}

#[test]
Expand Down
7 changes: 4 additions & 3 deletions rust/src/core/provider_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ use crate::providers::{
NousProvider, OllamaProvider, OpenAIApiProvider, OpenCodeGoProvider, OpenCodeProvider,
OpenRouterProvider, PerplexityProvider, PiProvider, PoeProvider, QoderProvider,
QwenCloudProvider, ReplicateProvider, SakanaProvider, StepFunProvider, Sub2ApiProvider,
T3ChatProvider, TypeSafeProvider, V0Provider, VeniceProvider, VertexAIProvider, WarpProvider,
WayfinderProvider, WindsurfProvider, XaiProvider, ZaiProvider, ZedProvider, ZenMuxProvider,
ZoomMateProvider,
T3ChatProvider, TypeSafeProvider, V0Provider, VeniceProvider, VercelProvider, VertexAIProvider,
WarpProvider, WayfinderProvider, WindsurfProvider, XaiProvider, ZaiProvider, ZedProvider,
ZenMuxProvider, ZoomMateProvider,
};

/// Instantiate the concrete [`Provider`] implementation for a given [`ProviderId`].
Expand Down Expand Up @@ -111,6 +111,7 @@ pub fn instantiate(id: ProviderId) -> Box<dyn Provider> {
ProviderId::Meta => Box::new(MetaProvider::new()),
ProviderId::Muse => Box::new(MuseProvider::new()),
ProviderId::Nous => Box::new(NousProvider::new()),
ProviderId::Vercel => Box::new(VercelProvider::new()),
}
}

Expand Down
3 changes: 2 additions & 1 deletion rust/src/core/token_accounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,8 @@ impl TokenAccountSupport {
| ProviderId::Fireworks
| ProviderId::Meta
| ProviderId::Nous
| ProviderId::Muse => None,
| ProviderId::Muse
| ProviderId::Vercel => None,
}
}

Expand Down
2 changes: 2 additions & 0 deletions rust/src/providers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ pub mod t3chat;
pub mod typesafe;
pub mod v0;
pub mod venice;
pub mod vercel;
pub mod vertexai;
pub mod warp;
pub mod wayfinder;
Expand Down Expand Up @@ -162,6 +163,7 @@ pub use t3chat::T3ChatProvider;
pub use typesafe::TypeSafeProvider;
pub use v0::V0Provider;
pub use venice::VeniceProvider;
pub use vercel::VercelProvider;
pub use vertexai::VertexAIProvider;
pub use warp::WarpProvider;
pub use wayfinder::WayfinderProvider;
Expand Down
Loading