From de5b2ffef6254226b1ef16f936b9591f4f0cd855 Mon Sep 17 00:00:00 2001 From: nang-dev Date: Sun, 16 Mar 2025 16:30:03 -0400 Subject: [PATCH 1/3] Added working for anthropic --- src/api/providers/anthropic.ts | 21 +++++++++++++++++++++ src/api/providers/deepseek.ts | 8 +++++++- src/api/providers/pearai.ts | 26 +++++++++++++++++++++++++- src/api/transform/stream.ts | 4 ++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/api/providers/anthropic.ts b/src/api/providers/anthropic.ts index 8354950136b..42db0c82f35 100644 --- a/src/api/providers/anthropic.ts +++ b/src/api/providers/anthropic.ts @@ -178,6 +178,27 @@ export class AnthropicHandler implements ApiHandler, SingleCompletionHandler { yield { type: "text", text: chunk.content_block.text } break + default: { + const block = chunk.content_block as { + type: string + text?: string + metadata?: { ui_only?: boolean; content?: string } + } + + if (block.type === "ui") { + yield { + type: "text", + text: block.text || "", + metadata: block.metadata, + } + } else { + yield { + type: "text", + text: block.text || "", + } + } + break + } } break case "content_block_delta": diff --git a/src/api/providers/deepseek.ts b/src/api/providers/deepseek.ts index 148bf31310e..8a44a53c3e6 100644 --- a/src/api/providers/deepseek.ts +++ b/src/api/providers/deepseek.ts @@ -83,7 +83,13 @@ export class DeepSeekHandler implements ApiHandler, SingleCompletionHandler { const chunk = JSON.parse(data) const delta = chunk.choices[0]?.delta ?? {} - if (delta.content) { + if (delta.type === "ui") { + yield { + type: "text", + text: delta.metadata?.content || "", + metadata: { ui_only: delta.metadata?.ui_only }, + } + } else if (delta.content) { yield { type: "text", text: delta.content, diff --git a/src/api/providers/pearai.ts b/src/api/providers/pearai.ts index ca825243c08..743c0c02ff9 100644 --- a/src/api/providers/pearai.ts +++ b/src/api/providers/pearai.ts @@ -123,7 +123,31 @@ export class PearAiHandler { async *createMessage(systemPrompt: string, messages: any[]): AsyncGenerator { const generator = this.handler.createMessage(systemPrompt, messages) - yield* generator + let warningMsg = "" + + for await (const chunk of generator) { + console.dir(chunk) + if (chunk.type === "text" && chunk.metadata?.ui_only) { + console.dir("HOLY SHIT IM HERE") + warningMsg += chunk.metadata?.content + console.dir("WARING MESSAGE") + console.dir(warningMsg) + continue + } + yield chunk + } + + if (warningMsg) { + if (warningMsg.includes("pay-as-you-go") || true) { + vscode.window.showInformationMessage(warningMsg, "View Pay-As-You-Go").then((selection) => { + if (selection === "View Pay-As-You-Go") { + vscode.env.openExternal(vscode.Uri.parse("https://trypear.ai/pay-as-you-go")) + } + }) + } else { + vscode.window.showInformationMessage(warningMsg) + } + } } async completePrompt(prompt: string): Promise { diff --git a/src/api/transform/stream.ts b/src/api/transform/stream.ts index 97751edd90d..a0f27bb32c6 100644 --- a/src/api/transform/stream.ts +++ b/src/api/transform/stream.ts @@ -4,6 +4,10 @@ export type ApiStreamChunk = ApiStreamTextChunk | ApiStreamUsageChunk | ApiStrea export interface ApiStreamTextChunk { type: "text" text: string + metadata?: { + ui_only?: boolean + content?: string + } } export interface ApiStreamReasoningChunk { From c1dbbb616e420cf4494a88e717d2b0652ee84973 Mon Sep 17 00:00:00 2001 From: nang-dev Date: Sun, 16 Mar 2025 17:05:48 -0400 Subject: [PATCH 2/3] Cleanup --- src/api/providers/deepseek.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/providers/deepseek.ts b/src/api/providers/deepseek.ts index 8a44a53c3e6..6cdccdefe2b 100644 --- a/src/api/providers/deepseek.ts +++ b/src/api/providers/deepseek.ts @@ -81,13 +81,15 @@ export class DeepSeekHandler implements ApiHandler, SingleCompletionHandler { try { const chunk = JSON.parse(data) + console.dir("DEEPSEEK CHUNK") + console.dir(chunk) + // Handle regular delta format const delta = chunk.choices[0]?.delta ?? {} - if (delta.type === "ui") { yield { type: "text", text: delta.metadata?.content || "", - metadata: { ui_only: delta.metadata?.ui_only }, + metadata: delta.metadata, } } else if (delta.content) { yield { From bd0002b8b7fc30bc8c8a68f08474ddceda7353f9 Mon Sep 17 00:00:00 2001 From: nang-dev Date: Sun, 16 Mar 2025 17:07:29 -0400 Subject: [PATCH 3/3] Cleanup --- src/api/providers/deepseek.ts | 2 -- src/api/providers/pearai.ts | 5 +---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/api/providers/deepseek.ts b/src/api/providers/deepseek.ts index 6cdccdefe2b..1ed0b410506 100644 --- a/src/api/providers/deepseek.ts +++ b/src/api/providers/deepseek.ts @@ -81,8 +81,6 @@ export class DeepSeekHandler implements ApiHandler, SingleCompletionHandler { try { const chunk = JSON.parse(data) - console.dir("DEEPSEEK CHUNK") - console.dir(chunk) // Handle regular delta format const delta = chunk.choices[0]?.delta ?? {} if (delta.type === "ui") { diff --git a/src/api/providers/pearai.ts b/src/api/providers/pearai.ts index 743c0c02ff9..bff95db4880 100644 --- a/src/api/providers/pearai.ts +++ b/src/api/providers/pearai.ts @@ -128,17 +128,14 @@ export class PearAiHandler { for await (const chunk of generator) { console.dir(chunk) if (chunk.type === "text" && chunk.metadata?.ui_only) { - console.dir("HOLY SHIT IM HERE") warningMsg += chunk.metadata?.content - console.dir("WARING MESSAGE") - console.dir(warningMsg) continue } yield chunk } if (warningMsg) { - if (warningMsg.includes("pay-as-you-go") || true) { + if (warningMsg.includes("pay-as-you-go")) { vscode.window.showInformationMessage(warningMsg, "View Pay-As-You-Go").then((selection) => { if (selection === "View Pay-As-You-Go") { vscode.env.openExternal(vscode.Uri.parse("https://trypear.ai/pay-as-you-go"))