Skip to content

Commit 7892d29

Browse files
authored
Merge pull request #51 from trypear/gemini-polishing
Gemini polishing
2 parents 9d4386a + 3a0b38f commit 7892d29

12 files changed

Lines changed: 528 additions & 81 deletions

File tree

src/api/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { VsCodeLmHandler } from "./providers/vscode-lm"
1919
import { ApiStream } from "./transform/stream"
2020
import { UnboundHandler } from "./providers/unbound"
2121
import { RequestyHandler } from "./providers/requesty"
22-
import { PearAiHandler } from "./providers/pearai"
22+
import { PearAiHandler } from "./providers/pearai/pearai"
2323
import { HumanRelayHandler } from "./providers/human-relay"
2424
import { FakeAIHandler } from "./providers/fake-ai"
2525

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import * as vscode from "vscode"
2-
import { ApiHandlerOptions, PEARAI_URL, ModelInfo } from "../../shared/api"
3-
import { AnthropicHandler } from "./anthropic"
4-
import { DeepSeekHandler } from "./deepseek"
2+
import { ApiHandlerOptions, ModelInfo } from "../../../shared/api"
3+
import { AnthropicHandler } from "../anthropic"
4+
import { DeepSeekHandler } from "../deepseek"
55
import Anthropic from "@anthropic-ai/sdk"
6-
import { BaseProvider } from "./base-provider"
7-
import { SingleCompletionHandler } from "../"
8-
import { OpenRouterHandler } from "./openrouter"
9-
import { GeminiHandler } from "./gemini"
10-
import { OpenAiHandler } from "./openai"
6+
import { BaseProvider } from "../base-provider"
7+
import { SingleCompletionHandler } from "../.."
8+
import { OpenRouterHandler } from "../openrouter"
9+
import { GeminiHandler } from "../gemini"
10+
import { OpenAiHandler } from "../openai"
11+
import { PearAIGenericHandler } from "./pearaiGeneric"
12+
import { PEARAI_URL } from "../../../shared/pearaiApi"
1113

1214
interface PearAiModelsResponse {
1315
models: {
@@ -20,7 +22,9 @@ interface PearAiModelsResponse {
2022
}
2123

2224
export class PearAiHandler extends BaseProvider implements SingleCompletionHandler {
23-
private handler!: AnthropicHandler | OpenAiHandler
25+
private handler!: AnthropicHandler | PearAIGenericHandler
26+
private pearAiModelsResponse: PearAiModelsResponse | null = null
27+
private options: ApiHandlerOptions
2428

2529
constructor(options: ApiHandlerOptions) {
2630
super()
@@ -40,8 +44,9 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl
4044
} else {
4145
vscode.commands.executeCommand("pearai.checkPearAITokens", undefined)
4246
}
47+
this.options = options
4348

44-
this.handler = new OpenAiHandler({
49+
this.handler = new PearAIGenericHandler({
4550
...options,
4651
openAiBaseUrl: PEARAI_URL,
4752
openAiApiKey: options.pearaiApiKey,
@@ -64,8 +69,9 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl
6469
throw new Error(`Failed to fetch models: ${response.statusText}`)
6570
}
6671
const data = (await response.json()) as PearAiModelsResponse
72+
this.pearAiModelsResponse = data
6773
const underlyingModel = data.models[modelId]?.underlyingModelUpdated || "claude-3-5-sonnet-20241022"
68-
if (underlyingModel.startsWith("claude")) {
74+
if (underlyingModel.startsWith("claude") || modelId.startsWith("anthropic/")) {
6975
// Default to Claude
7076
this.handler = new AnthropicHandler({
7177
...options,
@@ -74,7 +80,7 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl
7480
apiModelId: underlyingModel,
7581
})
7682
} else {
77-
this.handler = new OpenAiHandler({
83+
this.handler = new PearAIGenericHandler({
7884
...options,
7985
openAiBaseUrl: PEARAI_URL,
8086
openAiApiKey: options.pearaiApiKey,
@@ -91,14 +97,14 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl
9197
apiModelId: "claude-3-5-sonnet-20241022",
9298
})
9399
}
94-
} else if (modelId.startsWith("claude")) {
100+
} else if (modelId.startsWith("claude") || modelId.startsWith("anthropic/")) {
95101
this.handler = new AnthropicHandler({
96102
...options,
97103
apiKey: options.pearaiApiKey,
98104
anthropicBaseUrl: PEARAI_URL,
99105
})
100106
} else {
101-
this.handler = new OpenAiHandler({
107+
this.handler = new PearAIGenericHandler({
102108
...options,
103109
openAiBaseUrl: PEARAI_URL,
104110
openAiApiKey: options.pearaiApiKey,
@@ -108,22 +114,25 @@ export class PearAiHandler extends BaseProvider implements SingleCompletionHandl
108114
}
109115

110116
getModel(): { id: string; info: ModelInfo } {
111-
console.dir(this.handler)
112-
const baseModel = this.handler.getModel()
113-
return {
114-
id: baseModel.id,
115-
info: {
116-
...baseModel.info,
117-
// Inherit all capabilities from the underlying model
118-
supportsImages: baseModel.info.supportsImages,
119-
supportsComputerUse: baseModel.info.supportsComputerUse,
120-
supportsPromptCache: baseModel.info.supportsPromptCache,
121-
inputPrice: baseModel.info.inputPrice || 0,
122-
outputPrice: baseModel.info.outputPrice || 0,
123-
cacheWritesPrice: baseModel.info.cacheWritesPrice ? baseModel.info.cacheWritesPrice : undefined,
124-
cacheReadsPrice: baseModel.info.cacheReadsPrice ? baseModel.info.cacheReadsPrice : undefined,
125-
},
117+
if (
118+
this.pearAiModelsResponse &&
119+
this.options.apiModelId === "pearai-model" &&
120+
this.pearAiModelsResponse.models
121+
) {
122+
const modelInfo = this.pearAiModelsResponse.models[this.options.apiModelId]
123+
if (modelInfo) {
124+
return {
125+
id: this.options.apiModelId,
126+
info: {
127+
contextWindow: modelInfo.contextWindow || 4096, // provide default or actual value
128+
supportsPromptCache: modelInfo.supportsPromptCaching || false, // provide default or actual value
129+
...modelInfo,
130+
},
131+
}
132+
}
126133
}
134+
const baseModel = this.handler.getModel()
135+
return baseModel
127136
}
128137

129138
async *createMessage(systemPrompt: string, messages: any[]): AsyncGenerator<any> {

0 commit comments

Comments
 (0)