Skip to content

Commit 634d9b8

Browse files
authored
Merge pull request #2518 from eliasto/feat/add-ovhcloud-ai-endpoints-provider
feat: Add OVHCloud AI Endpoints provider
2 parents 66c7b48 + 01106a8 commit 634d9b8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+766
-22
lines changed

.changeset/gentle-yaks-pay.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"kilo-code": minor
3+
---
4+
5+
OVHcloud AI Endpoints provider added
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
---
2+
sidebar_label: OVHCloud AI Endpoints
3+
---
4+
5+
# Using OVHCloud AI Endpoints with Kilo Code
6+
7+
OVHCloud is a French leading Cloud provider in Europe with data sovereignty and privacy.
8+
9+
Access world-renowned pre-trained AI models with ease. Innovate using straightforward, secure APIs on OVHcloud's robust and privacy-first infrastructure. Enhance your applications with scalable AI capabilities, eliminating the need for extensive expertise. Achieve more with powerful AI endpoints designed for simplicity et reliability.
10+
11+
**Website:** [https://endpoints.ai.cloud.ovh.net](https://endpoints.ai.cloud.ovh.net)
12+
13+
:::info
14+
15+
You can report any bugs or feedbacks by chatting with us in our [Discord server](https://discord.gg/ovhcloud), in the AI Endpoints channel.
16+
17+
:::
18+
19+
## Getting an API Key
20+
21+
1. **Sign Up/Sign In:** Go to the [OVHCloud manager](https://www.ovh.com/manager). Create an account or sign in.
22+
2. **Navigate to Public Cloud:** Go to the Public Cloud section, and create a new project. Navigate to AI Endpoints in the _AI & Machine Learning_ section.
23+
3. **Create a Key:** Click to _API keys_ and create a new key.
24+
25+
## Supported Models
26+
27+
Kilo Code supports the following OVHCloud AI Endpoints models:
28+
29+
- gpt-oss-120b
30+
- gpt-oss-20b
31+
- Qwen2.5-VL-72B-Instruct
32+
- llava-next-mistral-7b
33+
- Meta-Llama-3_3-70B-Instruct
34+
- Qwen2.5-Coder-32B-Instruct
35+
- Mixtral-8x7B-Instruct-v0.1
36+
- Meta-Llama-3_1-70B-Instruct
37+
- Mistral-Small-3.2-24B-Instruct-2506
38+
- DeepSeek-R1-Distill-Llama-70B
39+
- Llama-3.1-8B-Instruct
40+
- Mistral-7B-Instruct-v0.3
41+
- Mistral-Nemo-Instruct-2407
42+
- Qwen3-32B
43+
- mamba-codestral-7B-v0.1
44+
45+
## Configuration in Kilo Code
46+
47+
1. **Open Kilo Code Settings:** Click the gear icon (<Codicon name="gear" />) in the Kilo Code panel.
48+
2. **Select Provider:** Choose "OVHCloud AI Endpoints" from the "API Provider" dropdown.
49+
3. **Enter API Key:** Paste your AI Endpoints API key into the "OVHCloud AI Endpoints API Key" field.
50+
4. **Select Model:** Choose your desired model from the "Model" dropdown.

apps/kilocode-docs/docs/providers/synthetic.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ Kilo Code supports all "always on" Synthetic AI models. The available models inc
2929

3030
## Tips and Notes
3131

32-
* **Pricing Options:** Synthetic offers both subscriptions and pay-as-you-go usage-based [pricing](https://synthetic.new/pricing).
33-
* **Privacy:** Strong privacy policy with no training on user data and automatic deletion of API data within 14 days.
34-
* **OpenAI Compatibility:** Synthetic models work with any OpenAI-compatible tools and applications.
32+
- **Pricing Options:** Synthetic offers both subscriptions and pay-as-you-go usage-based [pricing](https://synthetic.new/pricing).
33+
- **Privacy:** Strong privacy policy with no training on user data and automatic deletion of API data within 14 days.
34+
- **OpenAI Compatibility:** Synthetic models work with any OpenAI-compatible tools and applications.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
---
2+
sidebar_label: OVHCloud AI Endpoints
3+
---
4+
5+
# 在 Kilo Code 中使用 OVHCloud AI Endpoints
6+
7+
OVHCloud 是欧洲领先的法国云服务提供商,保障数据主权与隐私。
8+
9+
轻松访问世界知名的预训练 AI 模型。在 OVHcloud 稳健且以隐私为先的基础设施上,通过简单、安全的 API 创新。为您的应用增强可扩展的 AI 能力,无需深厚的专业知识。借助为简洁与可靠性而设计的强大 AI 接口,助您实现更多可能。
10+
11+
**网站:** [https://endpoints.ai.cloud.ovh.net](https://endpoints.ai.cloud.ovh.net)
12+
13+
:::info
14+
15+
您可以在我们的 [Discord 服务器](https://discord.gg/ovhcloud) 上,通过 **AI Endpoints** 频道向我们反馈问题或建议。
16+
17+
:::
18+
19+
## 获取 API 密钥
20+
21+
1. **注册/登录:** 前往 [OVHCloud 管理器](https://www.ovh.com/manager)。创建账户或登录。
22+
2. **进入公有云:** 进入“Public Cloud”部分并创建新项目。在 _AI & Machine Learning_ 部分进入 **AI Endpoints**
23+
3. **创建密钥:** 点击 _API keys_ 并创建新的密钥。
24+
25+
## 支持的模型
26+
27+
Kilo Code 支持以下 OVHCloud AI Endpoints 模型:
28+
29+
- gpt-oss-120b
30+
- gpt-oss-20b
31+
- Qwen2.5-VL-72B-Instruct
32+
- llava-next-mistral-7b
33+
- Meta-Llama-3_3-70B-Instruct
34+
- Qwen2.5-Coder-32B-Instruct
35+
- Mixtral-8x7B-Instruct-v0.1
36+
- Meta-Llama-3_1-70B-Instruct
37+
- Mistral-Small-3.2-24B-Instruct-2506
38+
- DeepSeek-R1-Distill-Llama-70B
39+
- Llama-3.1-8B-Instruct
40+
- Mistral-7B-Instruct-v0.3
41+
- Mistral-Nemo-Instruct-2407
42+
- Qwen3-32B
43+
- mamba-codestral-7B-v0.1
44+
45+
## 在 Kilo Code 中的配置
46+
47+
1. **打开 Kilo Code 设置:** 点击 Kilo Code 面板中的齿轮图标 (<Codicon name="gear" />)。
48+
2. **选择提供商:** 在 “API Provider” 下拉菜单中选择 “OVHCloud AI Endpoints”。
49+
3. **输入 API 密钥:** 将您的 AI Endpoints API 密钥粘贴到 “OVHCloud AI Endpoints API Key” 字段中。
50+
4. **选择模型:** 在 “Model” 下拉菜单中选择所需的模型。

apps/kilocode-docs/sidebars.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ const sidebars: SidebarsConfig = {
6969
"providers/openai",
7070
"providers/openai-compatible",
7171
"providers/openrouter",
72+
"providers/ovhcloud", // kilocode_change
7273
"providers/requesty",
7374
"providers/unbound",
7475
"providers/v0",

packages/types/src/global-settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ export const SECRET_STATE_KEYS = [
230230
"featherlessApiKey",
231231
"ioIntelligenceApiKey",
232232
"vercelAiGatewayApiKey",
233+
"ovhCloudAiEndpointsApiKey", // kilocode_change
233234
] as const
234235

235236
// Global secrets that are part of GlobalSettings (not ProviderSettings)

packages/types/src/provider-settings.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,16 @@ export const dynamicProviders = [
4545
"vercel-ai-gateway",
4646
"huggingface",
4747
"litellm",
48+
// kilocode_change start
4849
"kilocode-openrouter",
50+
"ovhcloud",
51+
"chutes",
52+
// kilocode_change end
4953
"deepinfra",
5054
"io-intelligence",
5155
"requesty",
5256
"unbound",
5357
"glama",
54-
"chutes", // kilocode_change
5558
] as const
5659

5760
export type DynamicProvider = (typeof dynamicProviders)[number]
@@ -399,6 +402,11 @@ const sambaNovaSchema = apiModelIdProviderModelSchema.extend({
399402
})
400403

401404
// kilocode_change start
405+
const ovhcloudSchema = baseProviderSettingsSchema.extend({
406+
ovhCloudAiEndpointsApiKey: z.string().optional(),
407+
ovhCloudAiEndpointsModelId: z.string().optional(),
408+
})
409+
402410
const kilocodeSchema = baseProviderSettingsSchema.extend({
403411
kilocodeToken: z.string().optional(),
404412
kilocodeOrganizationId: z.string().optional(),
@@ -488,6 +496,7 @@ export const providerSettingsSchemaDiscriminated = z.discriminatedUnion("apiProv
488496
lmStudioSchema.merge(z.object({ apiProvider: z.literal("lmstudio") })),
489497
geminiSchema.merge(z.object({ apiProvider: z.literal("gemini") })),
490498
openAiNativeSchema.merge(z.object({ apiProvider: z.literal("openai-native") })),
499+
ovhcloudSchema.merge(z.object({ apiProvider: z.literal("ovhcloud") })), // kilocode_change
491500
mistralSchema.merge(z.object({ apiProvider: z.literal("mistral") })),
492501
deepSeekSchema.merge(z.object({ apiProvider: z.literal("deepseek") })),
493502
deepInfraSchema.merge(z.object({ apiProvider: z.literal("deepinfra") })),
@@ -564,6 +573,7 @@ export const providerSettingsSchema = z.object({
564573
...rooSchema.shape,
565574
...vercelAiGatewaySchema.shape,
566575
...codebaseIndexProviderSchema.shape,
576+
...ovhcloudSchema.shape, // kilocode_change
567577
})
568578

569579
export type ProviderSettings = z.infer<typeof providerSettingsSchema>
@@ -598,6 +608,7 @@ export const modelIdKeys = [
598608
"vercelAiGatewayModelId",
599609
"deepInfraModelId",
600610
"kilocodeModel",
611+
"ovhCloudAiEndpointsModelId", // kilocode_change
601612
] as const satisfies readonly (keyof ProviderSettings)[]
602613

603614
export type ModelIdKey = (typeof modelIdKeys)[number]
@@ -653,6 +664,7 @@ export const modelIdKeysByProvider: Record<TypicalProvider, ModelIdKey> = {
653664
"vercel-ai-gateway": "vercelAiGatewayModelId",
654665
kilocode: "kilocodeModel",
655666
"virtual-quota-fallback": "apiModelId",
667+
ovhcloud: "ovhCloudAiEndpointsModelId", // kilocode_change
656668
}
657669

658670
/**
@@ -784,6 +796,7 @@ export const MODELS_BY_PROVIDER: Record<
784796
openrouter: { id: "openrouter", label: "OpenRouter", models: [] },
785797
requesty: { id: "requesty", label: "Requesty", models: [] },
786798
unbound: { id: "unbound", label: "Unbound", models: [] },
799+
ovhcloud: { id: "ovhcloud", label: "OVHcloud AI Endpoints", models: [] }, // kilocode_change
787800

788801
// kilocode_change start
789802
kilocode: { id: "kilocode", label: "Kilocode", models: [] },

packages/types/src/providers/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ export * from "./deepseek.js"
77
export * from "./doubao.js"
88
export * from "./featherless.js"
99
export * from "./fireworks.js"
10-
export * from "./synthetic.js" // kilocode_change
1110
export * from "./gemini.js"
1211
// kilocode_change start
1312
export * from "./gemini-cli.js"
13+
export * from "./ovhcloud.js"
14+
export * from "./synthetic.js"
1415
// kilocode_change end
1516
export * from "./glama.js"
1617
export * from "./groq.js"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// kilocode_change - file added
2+
import type { ModelInfo } from "../model.js"
3+
4+
// https://endpoints.ai.cloud.ovh.net/docs
5+
export const ovhCloudAiEndpointsDefaultModelId = "gpt-oss-120b"
6+
7+
export const ovhCloudAiEndpointsDefaultModelInfo: ModelInfo = {
8+
maxTokens: 131000,
9+
contextWindow: 131000,
10+
supportsImages: false,
11+
supportsPromptCache: false,
12+
inputPrice: 0.08,
13+
outputPrice: 0.4,
14+
description:
15+
"gpt-oss-120b is a cutting-edge model designed for high-level reasoning, instruction-following, and advanced agent capabilities.",
16+
supportsReasoningEffort: true,
17+
}

src/api/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import {
4545
FeatherlessHandler,
4646
VercelAiGatewayHandler,
4747
DeepInfraHandler,
48+
OVHCloudAIEndpointsHandler, // kilocode_change
4849
} from "./providers"
4950
// kilocode_change start
5051
import { KilocodeOpenrouterHandler } from "./providers/kilocode-openrouter"
@@ -187,6 +188,10 @@ export function buildApiHandler(configuration: ProviderSettings): ApiHandler {
187188
return new FeatherlessHandler(options)
188189
case "vercel-ai-gateway":
189190
return new VercelAiGatewayHandler(options)
191+
// kilocode_change start
192+
case "ovhcloud":
193+
return new OVHCloudAIEndpointsHandler(options)
194+
// kilocode_change end
190195
default:
191196
apiProvider satisfies "gemini-cli" | undefined
192197
return new AnthropicHandler(options)

0 commit comments

Comments
 (0)