diff --git a/src/api/providers/pearai.ts b/src/api/providers/pearai.ts index ba79fb2149e..a197b96ac32 100644 --- a/src/api/providers/pearai.ts +++ b/src/api/providers/pearai.ts @@ -1,6 +1,5 @@ -import { OpenAiHandler } from "./openai" import * as vscode from "vscode" -import { ApiHandlerOptions, PEARAI_URL } from "../../shared/api" +import { ApiHandlerOptions, PEARAI_URL, AnthropicModelId, ModelInfo } from "../../shared/api" import { AnthropicHandler } from "./anthropic" export class PearAiHandler extends AnthropicHandler { @@ -10,12 +9,9 @@ export class PearAiHandler extends AnthropicHandler { if (selection === "Login to PearAI") { const extensionUrl = `${vscode.env.uriScheme}://pearai.pearai/auth` const callbackUri = await vscode.env.asExternalUri(vscode.Uri.parse(extensionUrl)) - vscode.env.openExternal( await vscode.env.asExternalUri( - vscode.Uri.parse( - `https://trypear.ai/signin?callback=${callbackUri.toString()}`, // Change to localhost if running locally - ), + vscode.Uri.parse(`https://trypear.ai/signin?callback=${callbackUri.toString()}`), ), ) } @@ -28,4 +24,18 @@ export class PearAiHandler extends AnthropicHandler { anthropicBaseUrl: PEARAI_URL, }) } + + override getModel(): { id: AnthropicModelId; info: ModelInfo } { + const baseModel = super.getModel() + return { + id: baseModel.id, + info: { + ...baseModel.info, + inputPrice: (baseModel.info.inputPrice || 0) * 1.03, + outputPrice: (baseModel.info.outputPrice || 0) * 1.03, + cacheWritesPrice: baseModel.info.cacheWritesPrice ? baseModel.info.cacheWritesPrice * 1.03 : undefined, + cacheReadsPrice: baseModel.info.cacheReadsPrice ? baseModel.info.cacheReadsPrice * 1.03 : undefined, + }, + } + } } diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index da078530326..1673986498b 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -1627,12 +1627,22 @@ export function normalizeApiConfiguration(apiConfiguration?: ApiConfiguration) { supportsImages: false, // VSCode LM API currently doesn't support images }, } - case "pearai": + case "pearai": { + // Get the base Anthropic model info + const baseModelInfo = anthropicModels[anthropicDefaultModelId] + const pearaiModelInfo: ModelInfo = { + ...baseModelInfo, + inputPrice: baseModelInfo.inputPrice, + outputPrice: baseModelInfo.outputPrice, + cacheWritesPrice: baseModelInfo.cacheWritesPrice ? baseModelInfo.cacheWritesPrice : undefined, + cacheReadsPrice: baseModelInfo.cacheWritesPrice ? baseModelInfo.cacheReadsPrice : undefined, + } return { selectedProvider: provider, selectedModelId: apiConfiguration?.pearaiModelId || "pearai_model", - selectedModelInfo: apiConfiguration?.pearaiModelInfo || openAiModelInfoSaneDefaults, + selectedModelInfo: pearaiModelInfo, } + } case "unbound": return getProviderData(unboundModels, unboundDefaultModelId) default: