From 654b62d378449e63cf34c91c5f8b94eebec5b91e Mon Sep 17 00:00:00 2001 From: Himanshu Date: Thu, 10 Apr 2025 22:32:07 +0530 Subject: [PATCH 1/3] pearaiAgentModels-null-fix --- src/api/providers/pearai/pearai.ts | 26 ++++++++++++++------------ src/core/webview/ClineProvider.ts | 19 +++++++++++++++++-- src/shared/api.ts | 2 ++ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/api/providers/pearai/pearai.ts b/src/api/providers/pearai/pearai.ts index 58e1e5e9126..2077fec71e9 100644 --- a/src/api/providers/pearai/pearai.ts +++ b/src/api/providers/pearai/pearai.ts @@ -11,7 +11,7 @@ import { OpenAiHandler } from "../openai" import { PearAIGenericHandler } from "./pearaiGeneric" import { PEARAI_URL } from "../../../shared/pearaiApi" -interface PearAiModelsResponse { +export interface PearAIAgentModelsConfig { models: { [key: string]: { underlyingModel?: { [key: string]: any } @@ -23,7 +23,7 @@ interface PearAiModelsResponse { export class PearAiHandler extends BaseProvider implements SingleCompletionHandler { private handler!: AnthropicHandler | PearAIGenericHandler - private pearAiModelsResponse: PearAiModelsResponse | null = null + private pearAIAgentModels: PearAIAgentModelsConfig | null = null private options: ApiHandlerOptions constructor(options: ApiHandlerOptions) { @@ -64,15 +64,17 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl if (modelId.startsWith("pearai")) { try { - const response = await fetch(`${PEARAI_URL}/getPearAIAgentModels`) - if (!response.ok) { - throw new Error(`Failed to fetch models: ${response.statusText}`) + if (!options.pearaiAgentModels) { + console.log("NOT AMAZING") + throw new Error("PearAI models not found") + } else { + console.log("AMAZING") } - const data = (await response.json()) as PearAiModelsResponse - this.pearAiModelsResponse = data + const pearaiAgentModels = options.pearaiAgentModels + this.pearAIAgentModels = pearaiAgentModels const underlyingModel = - data.models[modelId]?.underlyingModelUpdated?.underlyingModel || - data.models[modelId]?.underlyingModel || + pearaiAgentModels.models[modelId]?.underlyingModelUpdated?.underlyingModel || + pearaiAgentModels.models[modelId]?.underlyingModel || "claude-3-5-sonnet-20241022" if (underlyingModel.startsWith("claude") || modelId.startsWith("anthropic/")) { // Default to Claude @@ -120,9 +122,9 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl if (this.options.apiModelId) { let modelInfo = null if (this.options.apiModelId.startsWith("pearai")) { - modelInfo = this.pearAiModelsResponse?.models[this.options.apiModelId].underlyingModelUpdated - } else if (this.pearAiModelsResponse) { - modelInfo = this.pearAiModelsResponse.models[this.options.apiModelId || "pearai-model"] + modelInfo = this.pearAIAgentModels?.models[this.options.apiModelId].underlyingModelUpdated + } else if (this.pearAIAgentModels) { + modelInfo = this.pearAIAgentModels.models[this.options.apiModelId || "pearai-model"] } if (modelInfo) { return { diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 5a53eab36c5..a113472d734 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -78,6 +78,8 @@ import { getUri } from "./getUri" import { telemetryService } from "../../services/telemetry/TelemetryService" import { TelemetrySetting } from "../../shared/TelemetrySetting" import { getWorkspacePath } from "../../utils/path" +import { PEARAI_URL } from "../../shared/pearaiApi" +import { PearAIAgentModelsConfig } from "../../api/providers/pearai/pearai" /** * https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts @@ -459,6 +461,15 @@ export class ClineProvider extends EventEmitter implements this.outputChannel.appendLine("Webview view resolved") } + public async getPearAIAgentModels() { + const response = await fetch(`${PEARAI_URL}/getPearAIAgentModels`) + if (!response.ok) { + throw new Error(`Failed to fetch models: ${response.statusText}`) + } + const data = (await response.json()) as PearAIAgentModelsConfig + return data + } + public async initClineWithSubTask(parent: Cline, task?: string, images?: string[]) { return this.initClineWithTask(task, images, parent) } @@ -482,9 +493,11 @@ export class ClineProvider extends EventEmitter implements const modePrompt = customModePrompts?.[mode] as PromptComponent const effectiveInstructions = [globalInstructions, modePrompt?.customInstructions].filter(Boolean).join("\n\n") + const pearaiAgentModels = await this.getPearAIAgentModels() + const cline = new Cline({ provider: this, - apiConfiguration, + apiConfiguration: { ...apiConfiguration, pearaiAgentModels }, customInstructions: effectiveInstructions, enableDiff, enableCheckpoints, @@ -549,9 +562,11 @@ export class ClineProvider extends EventEmitter implements } } + const pearaiAgentModels = await this.getPearAIAgentModels() + const cline = new Cline({ provider: this, - apiConfiguration, + apiConfiguration: { ...apiConfiguration, pearaiAgentModels }, customInstructions: effectiveInstructions, enableDiff, ...checkpoints, diff --git a/src/shared/api.ts b/src/shared/api.ts index 4b87e43e914..4f4e7aebe34 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -1,4 +1,5 @@ import * as vscode from "vscode" +import { PearAIAgentModelsConfig } from "../api/providers/pearai/pearai" export type ApiProvider = | "anthropic" @@ -81,6 +82,7 @@ export interface ApiHandlerOptions { pearaiBaseUrl?: string pearaiModelId?: string pearaiModelInfo?: ModelInfo + pearaiAgentModels?: PearAIAgentModelsConfig modelMaxThinkingTokens?: number fakeAi?: unknown } From 59fb604465a3138be87fdb675f40fe4f0808720a Mon Sep 17 00:00:00 2001 From: nang-dev Date: Thu, 10 Apr 2025 15:13:30 -0400 Subject: [PATCH 2/3] Working --- src/api/providers/anthropic.ts | 22 ++++++++++++++++++++++ src/api/providers/pearai/pearai.ts | 22 +--------------------- src/api/providers/pearai/pearaiGeneric.ts | 15 +++++++++++++++ 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/api/providers/anthropic.ts b/src/api/providers/anthropic.ts index 60dd9303836..a1773d8c52b 100644 --- a/src/api/providers/anthropic.ts +++ b/src/api/providers/anthropic.ts @@ -227,6 +227,28 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa id = "claude-3-7-sonnet-20250219" } + // Prioritize serverside model info + if (this.options.apiModelId && this.options.pearaiAgentModels) { + let modelInfo = null + if (this.options.apiModelId.startsWith("pearai")) { + modelInfo = this.options.pearaiAgentModels.models[this.options.apiModelId].underlyingModelUpdated + } else { + modelInfo = this.options.pearaiAgentModels.models[this.options.apiModelId || "pearai-model"] + } + if (modelInfo) { + return { + id: this.options.apiModelId, + info: modelInfo, + virtualId, + ...getModelParams({ + options: this.options, + model: info, + defaultMaxTokens: ANTHROPIC_DEFAULT_MAX_TOKENS, + }), + } + } + } + return { id, info, diff --git a/src/api/providers/pearai/pearai.ts b/src/api/providers/pearai/pearai.ts index 2077fec71e9..265720930be 100644 --- a/src/api/providers/pearai/pearai.ts +++ b/src/api/providers/pearai/pearai.ts @@ -71,7 +71,6 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl console.log("AMAZING") } const pearaiAgentModels = options.pearaiAgentModels - this.pearAIAgentModels = pearaiAgentModels const underlyingModel = pearaiAgentModels.models[modelId]?.underlyingModelUpdated?.underlyingModel || pearaiAgentModels.models[modelId]?.underlyingModel || @@ -118,26 +117,7 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl } } - getModel(): { id: string; info: ModelInfo } { - if (this.options.apiModelId) { - let modelInfo = null - if (this.options.apiModelId.startsWith("pearai")) { - modelInfo = this.pearAIAgentModels?.models[this.options.apiModelId].underlyingModelUpdated - } else if (this.pearAIAgentModels) { - modelInfo = this.pearAIAgentModels.models[this.options.apiModelId || "pearai-model"] - } - if (modelInfo) { - return { - id: this.options.apiModelId, - info: { - contextWindow: modelInfo.contextWindow || 4096, // provide default or actual value - supportsPromptCache: modelInfo.supportsPromptCaching || false, // provide default or actual value - ...modelInfo, - }, - } - } - } - + public getModel(): { id: string; info: ModelInfo } { // Fallback to using what's available on client side const baseModel = this.handler.getModel() return baseModel diff --git a/src/api/providers/pearai/pearaiGeneric.ts b/src/api/providers/pearai/pearaiGeneric.ts index 03cbd61a883..96c401f9b71 100644 --- a/src/api/providers/pearai/pearaiGeneric.ts +++ b/src/api/providers/pearai/pearaiGeneric.ts @@ -222,6 +222,21 @@ export class PearAIGenericHandler extends BaseProvider implements SingleCompleti override getModel(): { id: string; info: ModelInfo } { const modelId = this.options.openAiModelId ?? "none" + // Prioritize serverside model info + if (this.options.apiModelId && this.options.pearaiAgentModels) { + let modelInfo = null + if (this.options.apiModelId.startsWith("pearai")) { + modelInfo = this.options.pearaiAgentModels.models[this.options.apiModelId].underlyingModelUpdated + } else { + modelInfo = this.options.pearaiAgentModels.models[this.options.apiModelId || "pearai-model"] + } + if (modelInfo) { + return { + id: this.options.apiModelId, + info: modelInfo, + } + } + } return { id: modelId, info: allModels[modelId], From 63522821a5430e9e4e8486eb5d06af65412aeb84 Mon Sep 17 00:00:00 2001 From: nang-dev Date: Thu, 10 Apr 2025 16:17:13 -0400 Subject: [PATCH 3/3] Cleanup --- src/api/providers/pearai/pearai.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/api/providers/pearai/pearai.ts b/src/api/providers/pearai/pearai.ts index 265720930be..1db9e139039 100644 --- a/src/api/providers/pearai/pearai.ts +++ b/src/api/providers/pearai/pearai.ts @@ -65,10 +65,7 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl if (modelId.startsWith("pearai")) { try { if (!options.pearaiAgentModels) { - console.log("NOT AMAZING") throw new Error("PearAI models not found") - } else { - console.log("AMAZING") } const pearaiAgentModels = options.pearaiAgentModels const underlyingModel =