diff --git a/packages/cost/models/providers/crusoe.ts b/packages/cost/models/providers/crusoe.ts new file mode 100644 index 0000000000..2bb260a66f --- /dev/null +++ b/packages/cost/models/providers/crusoe.ts @@ -0,0 +1,33 @@ +import { BaseProvider } from "./base"; +import type { Endpoint, RequestParams } from "../types"; + +export class CrusoeProvider extends BaseProvider { + readonly displayName = "Crusoe"; + readonly baseUrl = "https://api.inference.crusoecloud.com/v1/"; + readonly auth = "api-key" as const; + readonly pricingPages = ["https://www.crusoe.ai/cloud/pricing"]; + readonly modelPages = [ + "https://docs.crusoecloud.com/managed-inference/overview", + ]; + + buildUrl(endpoint: Endpoint, requestParams: RequestParams): string { + return `${this.baseUrl}chat/completions`; + } + + async buildErrorMessage(response: Response): Promise<{ + message: string; + details?: any; + }> { + try { + const respJson = (await response.json()) as any; + return { + message: + respJson.error?.message || + respJson.detail || + `Request failed with status ${response.status}`, + }; + } catch (error) { + return { message: `Request failed with status ${response.status}` }; + } + } +} diff --git a/packages/cost/models/providers/index.ts b/packages/cost/models/providers/index.ts index 963717d50d..03be5ccead 100644 --- a/packages/cost/models/providers/index.ts +++ b/packages/cost/models/providers/index.ts @@ -12,6 +12,7 @@ import { GoogleProvider } from "./google"; import { GroqProvider } from "./groq"; import { HeliconeProvider } from "./helicone"; import { MistralProvider } from "./mistral"; +import { CrusoeProvider } from "./crusoe"; import { NebiusProvider } from "./nebius"; import { NovitaProvider } from "./novita"; import { OpenAIProvider } from "./openai"; @@ -36,6 +37,7 @@ export const providers = { groq: new GroqProvider(), helicone: new HeliconeProvider(), mistral: new MistralProvider(), + crusoe: new CrusoeProvider(), nebius: new NebiusProvider(), novita: new NovitaProvider(), openai: new OpenAIProvider(), @@ -80,6 +82,7 @@ export const ResponsesAPIEnabledProviders: ModelProviderName[] = [ "cerebras", "groq", "mistral", + "crusoe", "nebius", "novita", "openrouter", diff --git a/packages/cost/models/providers/priorities.ts b/packages/cost/models/providers/priorities.ts index 38df67014c..aec3d0dc17 100644 --- a/packages/cost/models/providers/priorities.ts +++ b/packages/cost/models/providers/priorities.ts @@ -32,6 +32,7 @@ export const PROVIDER_PRIORITIES: Record = { fireworks: 4, groq: 4, mistral: 4, + crusoe: 4, nebius: 4, novita: 4, diff --git a/packages/cost/providers/crusoe/index.ts b/packages/cost/providers/crusoe/index.ts new file mode 100644 index 0000000000..024f6874f8 --- /dev/null +++ b/packages/cost/providers/crusoe/index.ts @@ -0,0 +1,144 @@ +import { ModelRow } from "../../interfaces/Cost"; + +export const costs: ModelRow[] = [ + { + model: { + operator: "equals", + value: "zai/GLM-5.2", + }, + cost: { + prompt_token: 0.0000014, + completion_token: 0.0000044, + }, + }, + { + model: { + operator: "equals", + value: "zai/GLM-5.1", + }, + cost: { + prompt_token: 0.0000012, + completion_token: 0.0000044, + }, + }, + { + model: { + operator: "equals", + value: "openai/gpt-oss-120b", + }, + cost: { + prompt_token: 0.00000005, + completion_token: 0.0000002, + }, + }, + { + model: { + operator: "equals", + value: "google/gemma-4-31b-it", + }, + cost: { + prompt_token: 0.00000014, + completion_token: 0.0000004, + }, + }, + { + model: { + operator: "equals", + value: "moonshotai/Kimi-K2.6", + }, + cost: { + prompt_token: 0.0000007, + completion_token: 0.0000035, + }, + }, + { + model: { + operator: "equals", + value: "meta-llama/Llama-3.3-70B-Instruct", + }, + cost: { + prompt_token: 0.00000025, + completion_token: 0.00000075, + }, + }, + { + model: { + operator: "equals", + value: "deepseek-ai/DeepSeek-V3-0324", + }, + cost: { + prompt_token: 0.0000005, + completion_token: 0.0000015, + }, + }, + { + model: { + operator: "equals", + value: "deepseek-ai/DeepSeek-V4-Pro", + }, + cost: { + prompt_token: 0.00000174, + completion_token: 0.00000348, + }, + }, + { + model: { + operator: "equals", + value: "deepseek-ai/Deepseek-V4-Flash", + }, + cost: { + prompt_token: 0.00000014, + completion_token: 0.00000028, + }, + }, + { + model: { + operator: "equals", + value: "Qwen/Qwen3-235B-A22B-Instruct-2507", + }, + cost: { + prompt_token: 0.00000022, + completion_token: 0.0000008, + }, + }, + { + model: { + operator: "equals", + value: "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B", + }, + cost: { + prompt_token: 0.00000005, + completion_token: 0.0000002, + }, + }, + { + model: { + operator: "equals", + value: "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B", + }, + cost: { + prompt_token: 0.0000003, + completion_token: 0.0000024, + }, + }, + { + model: { + operator: "equals", + value: "nvidia/Nemotron-3-Nano-Omni-Reasoning-30B-A3B", + }, + cost: { + prompt_token: 0.0000003, + completion_token: 0.00000183, + }, + }, + { + model: { + operator: "equals", + value: "nvidia/Nemotron-3.5-Lightning-30B-A3B", + }, + cost: { + prompt_token: 0.00000005, + completion_token: 0.00000003, + }, + }, +]; diff --git a/packages/cost/providers/mappings.ts b/packages/cost/providers/mappings.ts index 7e856b54c5..b85d67631f 100644 --- a/packages/cost/providers/mappings.ts +++ b/packages/cost/providers/mappings.ts @@ -8,6 +8,7 @@ import { costs as llamaCosts } from "./llama"; import { costs as nvidiaCosts } from "./nvidia"; import { costs as cohereCosts } from "./cohere"; import { costs as deepseekCosts } from "./deepseek"; +import { costs as crusoeCosts } from "./crusoe"; import { costs as fireworksAICosts } from "./fireworks"; import { costs as groqCosts } from "./groq"; import { costs as mistralCosts } from "./mistral"; @@ -73,6 +74,9 @@ const deepseek = /^https:\/\/api\.deepseek\.com/; const x = /^https:\/\/api\.x\.ai/; const avianPattern = /^https:\/\/api\.avian\.io/; +// https://api.inference.crusoecloud.com +const crusoe = /^https:\/\/api\.inference\.crusoecloud\.com/; + //https://api.tokenfactory.nebius.com const nebius = /^https:\/\/api\.tokenfactory\.nebius\.com/; @@ -122,6 +126,7 @@ export const providersNames = [ "DEEPSEEK", "X", "AVIAN", + "CRUSOE", "NEBIUS", "NOVITA", "OPENPIPE", @@ -171,6 +176,11 @@ export const providers: { provider: "AZURE", costs: [...azureCosts, ...openAIProvider.costs], }, + { + pattern: crusoe, + provider: "CRUSOE", + costs: crusoeCosts, + }, { pattern: nebius, provider: "NEBIUS",