Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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 docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@
"getting-started/integration-method/mistral",
"getting-started/integration-method/nebius",
"getting-started/integration-method/novita",
"getting-started/integration-method/saladcloud",
{
"group": "Nvidia",
"pages": [
Expand Down
37 changes: 37 additions & 0 deletions docs/getting-started/integration-method/saladcloud.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
title: "SaladCloud Integration"
sidebarTitle: "SaladCloud"
description: "Use SaladCloud AI Gateway through Helicone AI Gateway."
"twitter:title": "SaladCloud Integration - Helicone OSS LLM Observability"
---

SaladCloud AI Gateway is OpenAI-compatible. Route to SaladCloud through Helicone by saving your SaladCloud API key in Provider Keys and selecting the `qwen3.6-35b-a3b/saladcloud` model route.

<Steps>
<Step title="Create your API keys">
Create a Helicone API key from the [Developer](https://helicone.ai/developer) page and a SaladCloud AI Gateway API key from the [SaladCloud portal](https://portal.salad.com/).
</Step>
<Step title="Add SaladCloud as a provider key">
In Helicone, add a new Provider Key for SaladCloud and paste your SaladCloud API key.
</Step>
<Step title="Call Helicone AI Gateway">

```bash
curl https://ai-gateway.helicone.ai/v1/chat/completions \
-H "Authorization: Bearer $HELICONE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.6-35b-a3b/saladcloud",
"messages": [
{
"role": "user",
"content": "Hello from SaladCloud through Helicone"
}
]
}'
```

</Step>
</Steps>

For current model and pricing details, see the [SaladCloud AI Gateway model reference](https://docs.salad.com/ai-gateway/reference/models) and [pricing reference](https://docs.salad.com/ai-gateway/reference/pricing).
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,32 @@ exports[`Registry Snapshots endpoint configurations snapshot 1`] = `
"*",
],
},
"qwen3.6-35b-a3b:saladcloud": {
"context": 262144,
"crossRegion": false,
"maxTokens": 262144,
"modelId": "qwen3.6-35b-a3b",
"parameters": [
"frequency_penalty",
"max_tokens",
"presence_penalty",
"response_format",
"seed",
"stop",
"stream",
"structured_outputs",
"temperature",
"tool_choice",
"tools",
"top_k",
"top_p",
],
"provider": "saladcloud",
"ptbEnabled": false,
"regions": [
"*",
],
},
},
"anthropic/claude-3-haiku-20240307": {
"claude-3-haiku-20240307:anthropic": {
Expand Down Expand Up @@ -7311,6 +7337,7 @@ exports[`Registry Snapshots model coverage snapshot 1`] = `
"novita",
"novita",
"openrouter",
"saladcloud",
],
"anthropic/claude-3-haiku-20240307": [
"anthropic",
Expand Down Expand Up @@ -7789,6 +7816,13 @@ exports[`Registry Snapshots pricing snapshot 1`] = `
"threshold": 0,
},
],
"saladcloud": [
{
"input": 9e-8,
"output": 6e-7,
"threshold": 0,
},
],
},
"anthropic/claude-3-haiku-20240307": {
"anthropic": [
Expand Down Expand Up @@ -10813,6 +10847,12 @@ exports[`Registry Snapshots verify registry state 1`] = `
"novita",
],
},
{
"model": "qwen3.6-35b-a3b",
"providers": [
"saladcloud",
],
},
{
"model": "sonar",
"providers": [
Expand Down Expand Up @@ -10921,6 +10961,10 @@ exports[`Registry Snapshots verify registry state 1`] = `
"modelCount": 5,
"provider": "perplexity",
},
{
"modelCount": 1,
"provider": "saladcloud",
},
{
"modelCount": 23,
"provider": "vertex",
Expand Down Expand Up @@ -11049,9 +11093,9 @@ exports[`Registry Snapshots verify registry state 1`] = `
"claude-3.5-haiku:anthropic:*",
],
"totalArchivedConfigs": 0,
"totalEndpoints": 329,
"totalModelProviderConfigs": 329,
"totalEndpoints": 330,
"totalModelProviderConfigs": 330,
"totalModelsWithPtb": 108,
"totalProviders": 21,
"totalProviders": 22,
}
`;
5 changes: 5 additions & 0 deletions packages/__tests__/cost/usageProcessor.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ describe("getUsageProcessor", () => {
expect(processor).toBeInstanceOf(OpenAIUsageProcessor);
});

it("should return OpenAIUsageProcessor for saladcloud provider", () => {
const processor = getUsageProcessor("saladcloud");
expect(processor).toBeInstanceOf(OpenAIUsageProcessor);
});

it("should return null for unsupported provider", () => {
const processor = getUsageProcessor("unsupported-provider" as any);
expect(processor).toBeNull();
Expand Down
33 changes: 33 additions & 0 deletions packages/cost/models/authors/alibaba/qwen3/endpoints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,39 @@ export const endpoints = {
"*": {},
},
},
"qwen3.6-35b-a3b:saladcloud": {
providerModelId: "qwen3.6-35b-a3b",
provider: "saladcloud",
author: "qwen",
pricing: [
{
threshold: 0,
input: 0.00000009,
output: 0.0000006,
},
],
contextLength: 262_144,
maxCompletionTokens: 262_144,
supportedParameters: [
"tools",
"tool_choice",
"max_tokens",
"temperature",
"top_p",
"top_k",
"stop",
"frequency_penalty",
"presence_penalty",
"seed",
"response_format",
"structured_outputs",
"stream",
],
ptbEnabled: false,
endpointConfigs: {
"*": {},
},
},
"qwen3-30b-a3b:deepinfra": {
providerModelId: "Qwen/Qwen3-30B-A3B",
provider: "deepinfra",
Expand Down
11 changes: 11 additions & 0 deletions packages/cost/models/authors/alibaba/qwen3/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@ export const models = {
modality: { inputs: ["text"], outputs: ["text"] },
tokenizer: "GPT",
},
"qwen3.6-35b-a3b": {
name: "Qwen3.6 35B-A3B",
author: "qwen",
description:
"Qwen3.6 35B-A3B is a multimodal mixture-of-experts model available through SaladCloud AI Gateway for agentic tasks, multi-step reasoning, code generation, and instruction following.",
contextLength: 262_144,
maxOutputTokens: 262_144,
created: "2026-04-15T00:00:00.000Z",
modality: { inputs: ["text", "image"], outputs: ["text"] },
tokenizer: "Qwen",
},
"qwen3-30b-a3b": {
name: "Qwen3 30B A3B",
author: "qwen",
Expand Down
10 changes: 10 additions & 0 deletions packages/cost/models/provider-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ export function heliconeProviderToModelProviderName(
return "fireworks";
case "CANOPYWAVE":
return "canopywave";
case "SALADCLOUD":
return "saladcloud";
// new registry does not have
case "LOCAL":
case "HELICONE":
Expand Down Expand Up @@ -159,6 +161,14 @@ export const dbProviderToProvider = (
if (provider === "nebius" || provider === "Nebius") {
return "nebius";
}
if (
provider === "saladcloud" ||
provider === "salad_cloud" ||
provider === "SaladCloud" ||
provider === "Salad Cloud"
) {
return "saladcloud";
}
return null;
};

Expand Down
3 changes: 3 additions & 0 deletions packages/cost/models/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { NovitaProvider } from "./novita";
import { OpenAIProvider } from "./openai";
import { OpenRouterProvider } from "./openrouter";
import { PerplexityProvider } from "./perplexity";
import { SaladCloudProvider } from "./saladcloud";
import { VertexProvider } from "./vertex";
import { XAIProvider } from "./xai";

Expand All @@ -41,6 +42,7 @@ export const providers = {
openai: new OpenAIProvider(),
openrouter: new OpenRouterProvider(),
perplexity: new PerplexityProvider(),
saladcloud: new SaladCloudProvider(),
vertex: new VertexProvider(),
xai: new XAIProvider()
} as const;
Expand Down Expand Up @@ -84,6 +86,7 @@ export const ResponsesAPIEnabledProviders: ModelProviderName[] = [
"novita",
"openrouter",
"perplexity",
"saladcloud",
"xai",
"baseten",
"fireworks",
Expand Down
1 change: 1 addition & 0 deletions packages/cost/models/providers/priorities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export const PROVIDER_PRIORITIES: Record<ModelProviderName, number> = {
mistral: 4,
nebius: 4,
novita: 4,
saladcloud: 4,

perplexity: 4,
vertex: 4,
Expand Down
15 changes: 15 additions & 0 deletions packages/cost/models/providers/saladcloud.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { BaseProvider } from "./base";

export class SaladCloudProvider extends BaseProvider {
readonly displayName = "SaladCloud AI Gateway";
readonly baseUrl = "https://ai.salad.cloud/v1/";
readonly auth = "api-key" as const;
readonly pricingPages = [
"https://docs.salad.com/ai-gateway/reference/pricing",
];
readonly modelPages = ["https://docs.salad.com/ai-gateway/reference/models"];

buildUrl(): string {
return `${this.baseUrl}chat/completions`;
}
}
9 changes: 9 additions & 0 deletions packages/cost/providers/mappings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ const cerebras = /^https:\/\/api\.cerebras\.ai/;
// https://inference.canopywave.io
const canopywave = /^https:\/\/inference\.canopywave\.io/;

// https://ai.salad.cloud
const saladcloud = /^https:\/\/ai\.salad\.cloud/;

export const providersNames = [
"OPENAI",
"ANTHROPIC",
Expand Down Expand Up @@ -132,6 +135,7 @@ export const providersNames = [
"CEREBRAS",
"BASETEN",
"CANOPYWAVE",
"SALADCLOUD",
] as const;

export type ProviderName = (typeof providersNames)[number];
Expand Down Expand Up @@ -325,6 +329,11 @@ export const providers: {
pattern: canopywave,
provider: "CANOPYWAVE",
costs: [],
},
{
pattern: saladcloud,
provider: "SALADCLOUD",
costs: [],
}
];

Expand Down
1 change: 1 addition & 0 deletions packages/cost/usage/getUsageProcessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export function getUsageProcessor(
case "fireworks":
case "cerebras":
case "perplexity":
case "saladcloud":
return new OpenAIUsageProcessor();
case "anthropic":
return new AnthropicUsageProcessor();
Expand Down
11 changes: 11 additions & 0 deletions web/data/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,17 @@ export const providers: Provider[] = [
apiKeyPlaceholder: "...",
relevanceScore: 4,
},
{
id: "saladcloud",
name: "SaladCloud AI Gateway",
logoUrl: "/assets/home/providers/saladcloud.svg",
description: "Configure your SaladCloud AI Gateway API key",
docsUrl:
"https://docs.helicone.ai/getting-started/integration-method/saladcloud",
apiKeyLabel: "SaladCloud API Key",
apiKeyPlaceholder: "...",
relevanceScore: 4,
},
{
id: "chutes",
name: "Chutes",
Expand Down
15 changes: 15 additions & 0 deletions web/public/assets/home/providers/saladcloud.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading