diff --git a/packages/types/src/global-settings.ts b/packages/types/src/global-settings.ts index 6e61c3950f5..8cbcec4f78d 100644 --- a/packages/types/src/global-settings.ts +++ b/packages/types/src/global-settings.ts @@ -248,6 +248,7 @@ export const SECRET_STATE_KEYS = [ "ioIntelligenceApiKey", "vercelAiGatewayApiKey", "basetenApiKey", + "poeApiKey", ] as const // Global secrets that are part of GlobalSettings (not ProviderSettings) diff --git a/packages/types/src/provider-settings.ts b/packages/types/src/provider-settings.ts index d713a47d6b4..14aa01c5dad 100644 --- a/packages/types/src/provider-settings.ts +++ b/packages/types/src/provider-settings.ts @@ -18,6 +18,7 @@ import { mistralModels, moonshotModels, openAiNativeModels, + poeModels, qwenCodeModels, sambaNovaModels, vertexModels, @@ -135,6 +136,7 @@ export const providerNames = [ "moonshot", "minimax", "openai-native", + "poe", "qwen-code", "roo", "sambanova", @@ -430,6 +432,10 @@ const basetenSchema = apiModelIdProviderModelSchema.extend({ basetenApiKey: z.string().optional(), }) +const poeSchema = apiModelIdProviderModelSchema.extend({ + poeApiKey: z.string().optional(), +}) + const defaultSchema = z.object({ apiProvider: z.undefined(), }) @@ -443,6 +449,7 @@ export const providerSettingsSchemaDiscriminated = z.discriminatedUnion("apiProv vertexSchema.merge(z.object({ apiProvider: z.literal("vertex") })), openAiSchema.merge(z.object({ apiProvider: z.literal("openai") })), ollamaSchema.merge(z.object({ apiProvider: z.literal("ollama") })), + poeSchema.merge(z.object({ apiProvider: z.literal("poe") })), vsCodeLmSchema.merge(z.object({ apiProvider: z.literal("vscode-lm") })), lmStudioSchema.merge(z.object({ apiProvider: z.literal("lmstudio") })), geminiSchema.merge(z.object({ apiProvider: z.literal("gemini") })), @@ -486,6 +493,7 @@ export const providerSettingsSchema = z.object({ ...vertexSchema.shape, ...openAiSchema.shape, ...ollamaSchema.shape, + ...poeSchema.shape, ...vsCodeLmSchema.shape, ...lmStudioSchema.shape, ...geminiSchema.shape, @@ -577,6 +585,7 @@ export const modelIdKeysByProvider: Record = { vertex: "apiModelId", "openai-native": "openAiModelId", ollama: "ollamaModelId", + poe: "apiModelId", lmstudio: "lmStudioModelId", gemini: "apiModelId", "gemini-cli": "apiModelId", @@ -725,6 +734,7 @@ export const MODELS_BY_PROVIDER: Record< xai: { id: "xai", label: "xAI (Grok)", models: Object.keys(xaiModels) }, zai: { id: "zai", label: "Z.ai", models: Object.keys(internationalZAiModels) }, baseten: { id: "baseten", label: "Baseten", models: Object.keys(basetenModels) }, + poe: { id: "poe", label: "Poe", models: Object.keys(poeModels) }, // Dynamic providers; models pulled from remote APIs. glama: { id: "glama", label: "Glama", models: [] }, diff --git a/packages/types/src/providers/index.ts b/packages/types/src/providers/index.ts index 5a0e577eab7..636f077133f 100644 --- a/packages/types/src/providers/index.ts +++ b/packages/types/src/providers/index.ts @@ -20,6 +20,7 @@ export * from "./moonshot.js" export * from "./ollama.js" export * from "./openai.js" export * from "./openrouter.js" +export * from "./poe.js" export * from "./qwen-code.js" export * from "./requesty.js" export * from "./roo.js" @@ -51,6 +52,7 @@ import { litellmDefaultModelId } from "./lite-llm.js" import { mistralDefaultModelId } from "./mistral.js" import { moonshotDefaultModelId } from "./moonshot.js" import { openRouterDefaultModelId } from "./openrouter.js" +import { poeDefaultModelId } from "./poe.js" import { qwenCodeDefaultModelId } from "./qwen-code.js" import { requestyDefaultModelId } from "./requesty.js" import { rooDefaultModelId } from "./roo.js" @@ -111,6 +113,8 @@ export function getProviderDefaultModelId( return moonshotDefaultModelId case "minimax": return minimaxDefaultModelId + case "poe": + return poeDefaultModelId case "zai": return options?.isChina ? mainlandZAiDefaultModelId : internationalZAiDefaultModelId case "openai-native": diff --git a/packages/types/src/providers/poe.ts b/packages/types/src/providers/poe.ts new file mode 100644 index 00000000000..395b3d24660 --- /dev/null +++ b/packages/types/src/providers/poe.ts @@ -0,0 +1,90 @@ +import type { ModelInfo } from "../model.js" + +// Poe +// https://creator.poe.com/docs/external-applications/openai-compatible-api + +export const poeModels = { + "gpt-5.1-codex-mini": { + maxTokens: 128_000, + contextWindow: 400_000, + supportsNativeTools: true, + supportsImages: true, + supportsPromptCache: true, + supportsTemperature: false, + }, + "gpt-5.1-codex": { + maxTokens: 128_000, + contextWindow: 400_000, + supportsNativeTools: true, + supportsImages: true, + supportsPromptCache: true, + supportsTemperature: false, + }, + "gpt-5-mini": { + maxTokens: 128_000, + contextWindow: 400_000, + supportsNativeTools: true, + supportsImages: true, + supportsPromptCache: true, + supportsVerbosity: true, + supportsTemperature: false, + }, + "gpt-5.1": { + maxTokens: 128_000, + contextWindow: 400_000, + supportsNativeTools: true, + supportsImages: true, + supportsPromptCache: true, + supportsVerbosity: true, + supportsTemperature: false, + }, + "claude-sonnet-4.5": { + maxTokens: 64_000, + contextWindow: 200_000, + supportsImages: true, + supportsPromptCache: true, + }, + "claude-haiku-4.5": { + maxTokens: 64_000, + contextWindow: 200_000, + supportsImages: false, + supportsPromptCache: true, + }, + "claude-opus-4.1": { + maxTokens: 32_000, + contextWindow: 200_000, + supportsImages: true, + supportsPromptCache: true, + }, + "gemini-3-pro": { + maxTokens: 65_536, + contextWindow: 1_048_576, + supportsImages: true, + supportsNativeTools: true, + supportsPromptCache: true, + supportsTemperature: true, + defaultTemperature: 1, + }, + "grok-code-fast-1": { + maxTokens: 16_384, + contextWindow: 262_144, + supportsImages: false, + supportsPromptCache: true, + }, + "grok-4": { + maxTokens: 8_192, + contextWindow: 256_000, + supportsImages: true, + supportsPromptCache: true, + }, + "deepseek-r1": { + maxTokens: 65_536, + contextWindow: 128_000, + supportsImages: false, + supportsPromptCache: true, + }, +} as const satisfies Record + +export type PoeModelId = keyof typeof poeModels + +export const poeDefaultModelId = "gpt-5.1-codex-mini" satisfies PoeModelId diff --git a/src/api/index.ts b/src/api/index.ts index 0eba26c52a6..07ce97b2caf 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -43,6 +43,7 @@ import { DeepInfraHandler, MiniMaxHandler, BasetenHandler, + PoeHandler, } from "./providers" import { NativeOllamaHandler } from "./providers/native-ollama" @@ -200,6 +201,8 @@ export function buildApiHandler(configuration: ProviderSettings): ApiHandler { return new MiniMaxHandler(options) case "baseten": return new BasetenHandler(options) + case "poe": + return new PoeHandler(options) default: apiProvider satisfies "gemini-cli" | undefined return new AnthropicHandler(options) diff --git a/src/api/providers/index.ts b/src/api/providers/index.ts index 34bc119e617..7f82bde59a1 100644 --- a/src/api/providers/index.ts +++ b/src/api/providers/index.ts @@ -36,3 +36,4 @@ export { VercelAiGatewayHandler } from "./vercel-ai-gateway" export { DeepInfraHandler } from "./deepinfra" export { MiniMaxHandler } from "./minimax" export { BasetenHandler } from "./baseten" +export { PoeHandler } from "./poe" diff --git a/src/api/providers/poe.ts b/src/api/providers/poe.ts new file mode 100644 index 00000000000..e5e935f85d8 --- /dev/null +++ b/src/api/providers/poe.ts @@ -0,0 +1,18 @@ +import { type PoeModelId, poeDefaultModelId, poeModels } from "@roo-code/types" + +import type { ApiHandlerOptions } from "../../shared/api" +import { BaseOpenAiCompatibleProvider } from "./base-openai-compatible-provider" + +export class PoeHandler extends BaseOpenAiCompatibleProvider { + constructor(options: ApiHandlerOptions) { + super({ + ...options, + providerName: "Poe", + baseURL: "https://api.poe.com/v1", + apiKey: options.poeApiKey, + defaultProviderModelId: poeDefaultModelId, + providerModels: poeModels, + defaultTemperature: 1.0, + }) + } +} diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index e60c32e6c54..d0cbc6d3fec 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -28,6 +28,7 @@ import { chutesDefaultModelId, basetenDefaultModelId, bedrockDefaultModelId, + poeDefaultModelId, vertexDefaultModelId, sambaNovaDefaultModelId, internationalZAiDefaultModelId, @@ -88,6 +89,7 @@ import { OpenAI, OpenAICompatible, OpenRouter, + Poe, QwenCode, Requesty, Roo, @@ -361,6 +363,7 @@ const ApiOptions = ({ chutes: { field: "apiModelId", default: chutesDefaultModelId }, baseten: { field: "apiModelId", default: basetenDefaultModelId }, bedrock: { field: "apiModelId", default: bedrockDefaultModelId }, + poe: { field: "apiModelId", default: poeDefaultModelId }, vertex: { field: "apiModelId", default: vertexDefaultModelId }, sambanova: { field: "apiModelId", default: sambaNovaDefaultModelId }, zai: { @@ -619,6 +622,10 @@ const ApiOptions = ({ /> )} + {selectedProvider === "poe" && ( + + )} + {selectedProvider === "vertex" && ( >> = { @@ -44,6 +45,7 @@ export const MODELS_BY_PROVIDER: Partial a.label.localeCompare(b.label)) diff --git a/webview-ui/src/components/settings/providers/Poe.tsx b/webview-ui/src/components/settings/providers/Poe.tsx new file mode 100644 index 00000000000..14260969f78 --- /dev/null +++ b/webview-ui/src/components/settings/providers/Poe.tsx @@ -0,0 +1,50 @@ +import { useCallback } from "react" +import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react" + +import type { ProviderSettings } from "@roo-code/types" + +import { useAppTranslation } from "@src/i18n/TranslationContext" +import { VSCodeButtonLink } from "@src/components/common/VSCodeButtonLink" + +import { inputEventTransform } from "../transforms" + +type PoeProps = { + apiConfiguration: ProviderSettings + setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void +} + +export const Poe = ({ apiConfiguration, setApiConfigurationField }: PoeProps) => { + const { t } = useAppTranslation() + + const handleInputChange = useCallback( + ( + field: K, + transform: (event: E) => ProviderSettings[K] = inputEventTransform, + ) => + (event: E | Event) => { + setApiConfigurationField(field, transform(event as E)) + }, + [setApiConfigurationField], + ) + + return ( + <> + + + +
+ {t("settings:providers.apiKeyStorageNotice")} +
+ {!apiConfiguration?.poeApiKey && ( + + {t("settings:providers.getPoeApiKey")} + + )} + + ) +} diff --git a/webview-ui/src/components/settings/providers/index.ts b/webview-ui/src/components/settings/providers/index.ts index fbd9bc4eb24..3cb3a3383aa 100644 --- a/webview-ui/src/components/settings/providers/index.ts +++ b/webview-ui/src/components/settings/providers/index.ts @@ -33,3 +33,4 @@ export { VercelAiGateway } from "./VercelAiGateway" export { DeepInfra } from "./DeepInfra" export { MiniMax } from "./MiniMax" export { Baseten } from "./Baseten" +export { Poe } from "./Poe" diff --git a/webview-ui/src/components/ui/hooks/useSelectedModel.ts b/webview-ui/src/components/ui/hooks/useSelectedModel.ts index 3df7236713c..5412c5d8dae 100644 --- a/webview-ui/src/components/ui/hooks/useSelectedModel.ts +++ b/webview-ui/src/components/ui/hooks/useSelectedModel.ts @@ -26,6 +26,7 @@ import { featherlessModels, ioIntelligenceModels, basetenModels, + poeModels, qwenCodeModels, BEDROCK_1M_CONTEXT_MODEL_IDS, isDynamicProvider, @@ -226,6 +227,11 @@ function getSelectedModel({ return { id, info: baseInfo } } + case "poe": { + const id = apiConfiguration.apiModelId ?? defaultModelId + const info = poeModels[id as keyof typeof poeModels] + return { id, info } + } case "vertex": { const id = apiConfiguration.apiModelId ?? defaultModelId const info = vertexModels[id as keyof typeof vertexModels] diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 229c9773aab..dceb25d43ee 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Clau API de Moonshot", "getMoonshotApiKey": "Obtenir clau API de Moonshot", "moonshotBaseUrl": "Punt d'entrada de Moonshot", + "poeApiKey": "Clau API de Poe", + "getPoeApiKey": "Obtenir clau API de Poe", "zaiApiKey": "Clau API de Z AI", "getZaiApiKey": "Obtenir clau API de Z AI", "zaiEntrypoint": "Punt d'entrada de Z AI", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index c022158c37a..70697a3f272 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot API-Schlüssel", "getMoonshotApiKey": "Moonshot API-Schlüssel erhalten", "moonshotBaseUrl": "Moonshot-Einstiegspunkt", + "poeApiKey": "Poe API-Schlüssel", + "getPoeApiKey": "Poe API-Schlüssel erhalten", "zaiApiKey": "Z AI API-Schlüssel", "getZaiApiKey": "Z AI API-Schlüssel erhalten", "zaiEntrypoint": "Z AI Einstiegspunkt", diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 4563f066747..efbe48d1452 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -338,6 +338,8 @@ "minimaxApiKey": "MiniMax API Key", "getMiniMaxApiKey": "Get MiniMax API Key", "minimaxBaseUrl": "MiniMax Entrypoint", + "poeApiKey": "Poe API Key", + "getPoeApiKey": "Get Poe API Key", "zaiApiKey": "Z AI API Key", "getZaiApiKey": "Get Z AI API Key", "zaiEntrypoint": "Z AI Entrypoint", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index e426c16969c..bf8d2733ab1 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Clave API de Moonshot", "getMoonshotApiKey": "Obtener clave API de Moonshot", "moonshotBaseUrl": "Punto de entrada de Moonshot", + "poeApiKey": "Clave API de Poe", + "getPoeApiKey": "Obtener clave API de Poe", "zaiApiKey": "Clave API de Z AI", "getZaiApiKey": "Obtener clave API de Z AI", "zaiEntrypoint": "Punto de entrada de Z AI", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 891244b1dec..836f82a7a99 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Clé API Moonshot", "getMoonshotApiKey": "Obtenir la clé API Moonshot", "moonshotBaseUrl": "Point d'entrée Moonshot", + "poeApiKey": "Clé API Poe", + "getPoeApiKey": "Obtenir la clé API Poe", "zaiApiKey": "Clé API Z AI", "getZaiApiKey": "Obtenir la clé API Z AI", "zaiEntrypoint": "Point d'entrée Z AI", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index b82ccaaad5c..bc39fe7cca8 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot API कुंजी", "getMoonshotApiKey": "Moonshot API कुंजी प्राप्त करें", "moonshotBaseUrl": "Moonshot प्रवेश बिंदु", + "poeApiKey": "Poe API कुंजी", + "getPoeApiKey": "Poe API कुंजी प्राप्त करें", "zaiApiKey": "Z AI API कुंजी", "getZaiApiKey": "Z AI API कुंजी प्राप्त करें", "zaiEntrypoint": "Z AI प्रवेश बिंदु", diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index e1f7b61eda9..a1277f5e3df 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -334,6 +334,8 @@ "moonshotApiKey": "Kunci API Moonshot", "getMoonshotApiKey": "Dapatkan Kunci API Moonshot", "moonshotBaseUrl": "Titik Masuk Moonshot", + "poeApiKey": "Poe API Key", + "getPoeApiKey": "Dapatkan Poe API Key", "zaiApiKey": "Kunci API Z AI", "getZaiApiKey": "Dapatkan Kunci API Z AI", "zaiEntrypoint": "Titik Masuk Z AI", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 88faea6ed9d..767020a4490 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Chiave API Moonshot", "getMoonshotApiKey": "Ottieni chiave API Moonshot", "moonshotBaseUrl": "Punto di ingresso Moonshot", + "poeApiKey": "Chiave API Poe", + "getPoeApiKey": "Ottieni chiave API Poe", "zaiApiKey": "Chiave API Z AI", "getZaiApiKey": "Ottieni chiave API Z AI", "zaiEntrypoint": "Punto di ingresso Z AI", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index e764fc522fd..855e67b6d74 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot APIキー", "getMoonshotApiKey": "Moonshot APIキーを取得", "moonshotBaseUrl": "Moonshot エントリーポイント", + "poeApiKey": "Poe APIキー", + "getPoeApiKey": "Poe APIキーを取得", "zaiApiKey": "Z AI APIキー", "getZaiApiKey": "Z AI APIキーを取得", "zaiEntrypoint": "Z AI エントリーポイント", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 6ba27a54947..d65a04d1102 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot API 키", "getMoonshotApiKey": "Moonshot API 키 받기", "moonshotBaseUrl": "Moonshot 엔트리포인트", + "poeApiKey": "Poe API 키", + "getPoeApiKey": "Poe API 키 가져오기", "zaiApiKey": "Z AI API 키", "getZaiApiKey": "Z AI API 키 받기", "zaiEntrypoint": "Z AI 엔트리포인트", diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index f94afe2b588..ed728f75849 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot API-sleutel", "getMoonshotApiKey": "Moonshot API-sleutel ophalen", "moonshotBaseUrl": "Moonshot-ingangspunt", + "poeApiKey": "Poe API-sleutel", + "getPoeApiKey": "Poe API-sleutel verkrijgen", "zaiApiKey": "Z AI API-sleutel", "getZaiApiKey": "Z AI API-sleutel ophalen", "zaiEntrypoint": "Z AI-ingangspunt", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 8dc66f8ff16..158709f2cb0 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Klucz API Moonshot", "getMoonshotApiKey": "Uzyskaj klucz API Moonshot", "moonshotBaseUrl": "Punkt wejścia Moonshot", + "poeApiKey": "Klucz API Poe", + "getPoeApiKey": "Uzyskaj klucz API Poe", "zaiApiKey": "Klucz API Z AI", "getZaiApiKey": "Uzyskaj klucz API Z AI", "zaiEntrypoint": "Punkt wejścia Z AI", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 7f5707bece3..fc249a0d26e 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Chave de API Moonshot", "getMoonshotApiKey": "Obter chave de API Moonshot", "moonshotBaseUrl": "Ponto de entrada Moonshot", + "poeApiKey": "Chave de API Poe", + "getPoeApiKey": "Obter chave de API Poe", "zaiApiKey": "Chave de API Z AI", "getZaiApiKey": "Obter chave de API Z AI", "zaiEntrypoint": "Ponto de entrada Z AI", diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 7cdf3f281d5..d4185787281 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot API-ключ", "getMoonshotApiKey": "Получить Moonshot API-ключ", "moonshotBaseUrl": "Точка входа Moonshot", + "poeApiKey": "Poe API-ключ", + "getPoeApiKey": "Получить Poe API-ключ", "zaiApiKey": "Z AI API-ключ", "getZaiApiKey": "Получить Z AI API-ключ", "zaiEntrypoint": "Точка входа Z AI", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 12d06da06ce..2a27ed7bb90 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot API Anahtarı", "getMoonshotApiKey": "Moonshot API Anahtarı Al", "moonshotBaseUrl": "Moonshot Giriş Noktası", + "poeApiKey": "Poe API Anahtarı", + "getPoeApiKey": "Poe API Anahtarı Al", "zaiApiKey": "Z AI API Anahtarı", "getZaiApiKey": "Z AI API Anahtarı Al", "zaiEntrypoint": "Z AI Giriş Noktası", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 798bc6fb682..e1db89f0d5e 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Khóa API Moonshot", "getMoonshotApiKey": "Lấy khóa API Moonshot", "moonshotBaseUrl": "Điểm vào Moonshot", + "poeApiKey": "Khóa API Poe", + "getPoeApiKey": "Lấy khóa API Poe", "zaiApiKey": "Khóa API Z AI", "getZaiApiKey": "Lấy khóa API Z AI", "zaiEntrypoint": "Điểm vào Z AI", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 76616129776..1c67bc077b7 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -333,6 +333,8 @@ "minimaxApiKey": "MiniMax API 密钥", "getMiniMaxApiKey": "获取 MiniMax API 密钥", "minimaxBaseUrl": "MiniMax 服务站点", + "poeApiKey": "Poe API 密钥", + "getPoeApiKey": "获取 Poe API 密钥", "zaiApiKey": "Z AI API 密钥", "getZaiApiKey": "获取 Z AI API 密钥", "zaiEntrypoint": "Z AI 服务站点", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index ce305aa10d5..27b3bad664f 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -330,6 +330,8 @@ "moonshotApiKey": "Moonshot API 金鑰", "getMoonshotApiKey": "取得 Moonshot API 金鑰", "moonshotBaseUrl": "Moonshot 服務端點", + "poeApiKey": "Poe API 金鑰", + "getPoeApiKey": "取得 Poe API 金鑰", "zaiApiKey": "Z AI API 金鑰", "getZaiApiKey": "取得 Z AI API 金鑰", "zaiEntrypoint": "Z AI 服務端點", diff --git a/webview-ui/src/utils/validate.ts b/webview-ui/src/utils/validate.ts index 947b18ac3b0..5331081c6dc 100644 --- a/webview-ui/src/utils/validate.ts +++ b/webview-ui/src/utils/validate.ts @@ -161,6 +161,11 @@ function validateModelsAndKeysProvided(apiConfiguration: ProviderSettings): stri return i18next.t("settings:validation.apiKey") } break + case "poe": + if (!apiConfiguration.poeApiKey) { + return i18next.t("settings:validation.apiKey") + } + break } return undefined