From 29dcb551068ac99a76fc4e39394121b370c6a2d1 Mon Sep 17 00:00:00 2001 From: nang-dev Date: Mon, 21 Apr 2025 14:57:12 -0400 Subject: [PATCH 1/3] Added server down --- src/core/webview/ClineProvider.ts | 29 ++++++++++++++++----- src/integrations/editor/DiffViewProvider.ts | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index a113472d734..7c19c7e2028 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -462,12 +462,19 @@ export class ClineProvider extends EventEmitter implements } public async getPearAIAgentModels() { - const response = await fetch(`${PEARAI_URL}/getPearAIAgentModels`) - if (!response.ok) { - throw new Error(`Failed to fetch models: ${response.statusText}`) + try { + 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 + } catch (error) { + vscode.window.showErrorMessage( + "Failed to fetch PearAI Agent Models. PearAI services may be down, please contact PearAI Support.", + ) + return undefined } - const data = (await response.json()) as PearAIAgentModelsConfig - return data } public async initClineWithSubTask(parent: Cline, task?: string, images?: string[]) { @@ -493,7 +500,15 @@ 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() + let pearaiAgentModels + + try { + pearaiAgentModels = await this.getPearAIAgentModels() + } catch (error) { + vscode.window.showErrorMessage( + "Failed to fetch PearAI Agent Models. PearAI services may be down, please contact PearAI Support.", + ) + } const cline = new Cline({ provider: this, @@ -655,7 +670,7 @@ export class ClineProvider extends EventEmitter implements - Roo Code + Agent
diff --git a/src/integrations/editor/DiffViewProvider.ts b/src/integrations/editor/DiffViewProvider.ts index 0bf494854a4..86eddf115e1 100644 --- a/src/integrations/editor/DiffViewProvider.ts +++ b/src/integrations/editor/DiffViewProvider.ts @@ -299,7 +299,7 @@ export class DiffViewProvider { query: Buffer.from(this.originalContent ?? "").toString("base64"), }), uri, - `${fileName}: ${fileExists ? "Original ↔ Roo's Changes" : "New File"} (Editable)`, + `${fileName}: ${fileExists ? "Original ↔ Agent's Changes" : "New File"} (Editable)`, ) // This may happen on very slow machines ie project idx setTimeout(() => { From bbdff6ebad8a2c43b34b13b9b9c29099dbcdcc50 Mon Sep 17 00:00:00 2001 From: nang-dev Date: Mon, 21 Apr 2025 15:04:20 -0400 Subject: [PATCH 2/3] Added fallback model --- src/api/providers/pearai/pearaiGeneric.ts | 29 +++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/api/providers/pearai/pearaiGeneric.ts b/src/api/providers/pearai/pearaiGeneric.ts index 96c401f9b71..20c2c4e2c44 100644 --- a/src/api/providers/pearai/pearaiGeneric.ts +++ b/src/api/providers/pearai/pearaiGeneric.ts @@ -222,6 +222,20 @@ export class PearAIGenericHandler extends BaseProvider implements SingleCompleti override getModel(): { id: string; info: ModelInfo } { const modelId = this.options.openAiModelId ?? "none" + + // PATCH for issue with update + const fallbackModelInfo: ModelInfo = { + maxTokens: 8192, + contextWindow: 200_000, + supportsImages: true, + supportsComputerUse: true, + supportsPromptCache: true, + inputPrice: 3.0, + outputPrice: 15.0, + cacheWritesPrice: 3.75, + cacheReadsPrice: 0.3, + } + // Prioritize serverside model info if (this.options.apiModelId && this.options.pearaiAgentModels) { let modelInfo = null @@ -231,16 +245,27 @@ export class PearAIGenericHandler extends BaseProvider implements SingleCompleti modelInfo = this.options.pearaiAgentModels.models[this.options.apiModelId || "pearai-model"] } if (modelInfo) { - return { + const result = { id: this.options.apiModelId, info: modelInfo, } + // If model info is missing or has undefined context window, use fallback + if (!result.info || !result.info.contextWindow) { + result.info = fallbackModelInfo + } + return result } } - return { + + const result = { id: modelId, info: allModels[modelId], } + // If model info is missing or has undefined context window, use fallback + if (!result.info || !result.info.contextWindow) { + result.info = fallbackModelInfo + } + return result } async completePrompt(prompt: string): Promise { From 47f2f628e7658f936a3df2deafee75a8278a955d Mon Sep 17 00:00:00 2001 From: nang-dev Date: Mon, 21 Apr 2025 16:00:01 -0400 Subject: [PATCH 3/3] Hotfix --- src/api/providers/pearai/pearai.ts | 1 + src/api/providers/pearai/pearaiGeneric.ts | 39 +++++------------------ 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/api/providers/pearai/pearai.ts b/src/api/providers/pearai/pearai.ts index d180ac175f8..5ed332436e6 100644 --- a/src/api/providers/pearai/pearai.ts +++ b/src/api/providers/pearai/pearai.ts @@ -82,6 +82,7 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl apiModelId: underlyingModel, }) } else { + // Use OpenAI fields here as we are using the same handler structure as OpenAI Hander lin PearAIGenericHandler this.handler = new PearAIGenericHandler({ ...options, openAiBaseUrl: PEARAI_URL, diff --git a/src/api/providers/pearai/pearaiGeneric.ts b/src/api/providers/pearai/pearaiGeneric.ts index 20c2c4e2c44..15509de95b3 100644 --- a/src/api/providers/pearai/pearaiGeneric.ts +++ b/src/api/providers/pearai/pearaiGeneric.ts @@ -221,53 +221,30 @@ export class PearAIGenericHandler extends BaseProvider implements SingleCompleti } override getModel(): { id: string; info: ModelInfo } { - const modelId = this.options.openAiModelId ?? "none" - - // PATCH for issue with update - const fallbackModelInfo: ModelInfo = { - maxTokens: 8192, - contextWindow: 200_000, - supportsImages: true, - supportsComputerUse: true, - supportsPromptCache: true, - inputPrice: 3.0, - outputPrice: 15.0, - cacheWritesPrice: 3.75, - cacheReadsPrice: 0.3, - } - + const modelId = this.options.openAiModelId // Prioritize serverside model info - if (this.options.apiModelId && this.options.pearaiAgentModels) { + if (modelId && this.options.pearaiAgentModels) { let modelInfo = null - if (this.options.apiModelId.startsWith("pearai")) { - modelInfo = this.options.pearaiAgentModels.models[this.options.apiModelId].underlyingModelUpdated + if (modelId.startsWith("pearai")) { + modelInfo = this.options.pearaiAgentModels.models[modelId].underlyingModelUpdated } else { - modelInfo = this.options.pearaiAgentModels.models[this.options.apiModelId || "pearai-model"] + modelInfo = this.options.pearaiAgentModels.models[modelId || "pearai-model"] } if (modelInfo) { const result = { - id: this.options.apiModelId, + id: modelId, info: modelInfo, } - // If model info is missing or has undefined context window, use fallback - if (!result.info || !result.info.contextWindow) { - result.info = fallbackModelInfo - } return result } } const result = { - id: modelId, - info: allModels[modelId], - } - // If model info is missing or has undefined context window, use fallback - if (!result.info || !result.info.contextWindow) { - result.info = fallbackModelInfo + id: modelId ?? pearAiDefaultModelId, + info: allModels[modelId ?? pearAiDefaultModelId], } return result } - async completePrompt(prompt: string): Promise { try { const requestOptions: OpenAI.Chat.Completions.ChatCompletionCreateParamsNonStreaming = {