diff --git a/.yarn/patches/openai-npm-4.71.1-b5940d6401.patch b/.yarn/patches/openai-npm-4.71.1-b5940d6401.patch new file mode 100644 index 00000000..f4084844 --- /dev/null +++ b/.yarn/patches/openai-npm-4.71.1-b5940d6401.patch @@ -0,0 +1,26 @@ +diff --git a/core.js b/core.js +index 00b67a48b7b5cf0029413fc84abd0c01630c3d14..5550b58495b468060f775ca86e4d849d82573ea5 100644 +--- a/core.js ++++ b/core.js +@@ -156,7 +156,7 @@ class APIClient { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': this.getUserAgent(), +- ...getPlatformHeaders(), ++ // ...getPlatformHeaders(), + ...this.authHeaders(opts), + }; + } +diff --git a/core.mjs b/core.mjs +index 8bc7a0ee10d61560d7113cf3f703355bb19f7ddd..5e4c8586ea6b13fe887a22af2de05eaa4700b5ec 100644 +--- a/core.mjs ++++ b/core.mjs +@@ -149,7 +149,7 @@ export class APIClient { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'User-Agent': this.getUserAgent(), +- ...getPlatformHeaders(), ++ // ...getPlatformHeaders(), + ...this.authHeaders(opts), + }; + } diff --git a/package.json b/package.json index f13dfdf9..fd159fb6 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "localforage": "^1.10.0", "lodash": "^4.17.21", "mime": "^4.0.4", - "openai": "^4.52.1", + "openai": "patch:openai@npm%3A4.71.1#~/.yarn/patches/openai-npm-4.71.1-b5940d6401.patch", "prettier": "^3.2.4", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/src/renderer/src/providers/BaseProvider.ts b/src/renderer/src/providers/BaseProvider.ts index 94313b26..983bc2be 100644 --- a/src/renderer/src/providers/BaseProvider.ts +++ b/src/renderer/src/providers/BaseProvider.ts @@ -17,7 +17,7 @@ export default abstract class BaseProvider { return host.endsWith('/') ? host : `${host}/v1/` } - public getHeaders() { + public defaultHeaders() { return { 'X-Api-Key': this.provider.apiKey } diff --git a/src/renderer/src/providers/OpenAIProvider.ts b/src/renderer/src/providers/OpenAIProvider.ts index b0435197..8d1cde83 100644 --- a/src/renderer/src/providers/OpenAIProvider.ts +++ b/src/renderer/src/providers/OpenAIProvider.ts @@ -33,7 +33,8 @@ export default class OpenAIProvider extends BaseProvider { this.sdk = new OpenAI({ dangerouslyAllowBrowser: true, apiKey: provider.apiKey, - baseURL: this.getBaseURL() + baseURL: this.getBaseURL(), + defaultHeaders: this.defaultHeaders() }) } @@ -138,21 +139,16 @@ export default class OpenAIProvider extends BaseProvider { const isSupportStreamOutput = streamOutput && this.isSupportStreamOutput(model.id) // @ts-ignore key is not typed - const stream = await this.sdk.chat.completions.create( - { - model: model.id, - messages: [isOpenAIo1 ? undefined : systemMessage, ...userMessages].filter( - Boolean - ) as ChatCompletionMessageParam[], - temperature: isOpenAIo1 ? 1 : assistant?.settings?.temperature, - max_tokens: maxTokens, - keep_alive: this.keepAliveTime, - stream: isSupportStreamOutput - }, - { - headers: this.getHeaders() - } - ) + const stream = await this.sdk.chat.completions.create({ + model: model.id, + messages: [isOpenAIo1 ? undefined : systemMessage, ...userMessages].filter( + Boolean + ) as ChatCompletionMessageParam[], + temperature: isOpenAIo1 ? 1 : assistant?.settings?.temperature, + max_tokens: maxTokens, + keep_alive: this.keepAliveTime, + stream: isSupportStreamOutput + }) if (!isSupportStreamOutput) { return onChunk({ @@ -182,17 +178,12 @@ export default class OpenAIProvider extends BaseProvider { ] // @ts-ignore key is not typed - const response = await this.sdk.chat.completions.create( - { - model: model.id, - messages: messages as ChatCompletionMessageParam[], - stream: false, - keep_alive: this.keepAliveTime - }, - { - headers: this.getHeaders() - } - ) + const response = await this.sdk.chat.completions.create({ + model: model.id, + messages: messages as ChatCompletionMessageParam[], + stream: false, + keep_alive: this.keepAliveTime + }) return response.choices[0].message?.content || '' } @@ -223,18 +214,13 @@ export default class OpenAIProvider extends BaseProvider { } // @ts-ignore key is not typed - const response = await this.sdk.chat.completions.create( - { - model: model.id, - messages: [systemMessage, userMessage] as ChatCompletionMessageParam[], - stream: false, - keep_alive: this.keepAliveTime, - max_tokens: 1000 - }, - { - headers: this.getHeaders() - } - ) + const response = await this.sdk.chat.completions.create({ + model: model.id, + messages: [systemMessage, userMessage] as ChatCompletionMessageParam[], + stream: false, + keep_alive: this.keepAliveTime, + max_tokens: 1000 + }) return removeQuotes(response.choices[0].message?.content?.substring(0, 50) || '') } @@ -242,19 +228,14 @@ export default class OpenAIProvider extends BaseProvider { public async generateText({ prompt, content }: { prompt: string; content: string }): Promise { const model = getDefaultModel() - const response = await this.sdk.chat.completions.create( - { - model: model.id, - stream: false, - messages: [ - { role: 'system', content: prompt }, - { role: 'user', content } - ] - }, - { - headers: this.getHeaders() - } - ) + const response = await this.sdk.chat.completions.create({ + model: model.id, + stream: false, + messages: [ + { role: 'system', content: prompt }, + { role: 'user', content } + ] + }) return response.choices[0].message?.content || '' } @@ -269,7 +250,6 @@ export default class OpenAIProvider extends BaseProvider { const response: any = await this.sdk.request({ method: 'post', path: '/advice_questions', - headers: this.getHeaders(), body: { messages: messages.filter((m) => m.role === 'user').map((m) => ({ role: m.role, content: m.content })), model: model.id, @@ -293,9 +273,7 @@ export default class OpenAIProvider extends BaseProvider { } try { - const response = await this.sdk.chat.completions.create(body as ChatCompletionCreateParamsNonStreaming, { - headers: this.getHeaders() - }) + const response = await this.sdk.chat.completions.create(body as ChatCompletionCreateParamsNonStreaming) return { valid: Boolean(response?.choices[0].message), @@ -317,7 +295,7 @@ export default class OpenAIProvider extends BaseProvider { query.type = 'text' } - const response = await this.sdk.models.list({ query, headers: this.getHeaders() }) + const response = await this.sdk.models.list({ query }) if (this.provider.id === 'github') { // @ts-ignore key is not typed @@ -373,7 +351,6 @@ export default class OpenAIProvider extends BaseProvider { const response = (await this.sdk.request({ method: 'post', path: '/images/generations', - headers: this.getHeaders(), signal, body: { model: 'stabilityai/stable-diffusion-3-5-large', diff --git a/yarn.lock b/yarn.lock index b370ddc5..48572e77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2032,13 +2032,6 @@ __metadata: languageName: node linkType: hard -"@types/qs@npm:^6.9.15": - version: 6.9.15 - resolution: "@types/qs@npm:6.9.15" - checksum: 10c0/49c5ff75ca3adb18a1939310042d273c9fc55920861bd8e5100c8a923b3cda90d759e1a95e18334092da1c8f7b820084687770c83a1ccef04fb2c6908117c823 - languageName: node - linkType: hard - "@types/react-dom@npm:^18.2.18": version: 18.3.0 resolution: "@types/react-dom@npm:18.3.0" @@ -2343,7 +2336,7 @@ __metadata: markdown-it: "npm:^14.1.0" mime: "npm:^4.0.4" officeparser: "npm:^4.1.1" - openai: "npm:^4.52.1" + openai: "patch:openai@npm%3A4.71.1#~/.yarn/patches/openai-npm-4.71.1-b5940d6401.patch" prettier: "npm:^3.2.4" react: "npm:^18.2.0" react-dom: "npm:^18.2.0" @@ -8905,19 +8898,17 @@ __metadata: languageName: node linkType: hard -"openai@npm:^4.52.1": - version: 4.59.0 - resolution: "openai@npm:4.59.0" +"openai@npm:4.71.1": + version: 4.71.1 + resolution: "openai@npm:4.71.1" dependencies: "@types/node": "npm:^18.11.18" "@types/node-fetch": "npm:^2.6.4" - "@types/qs": "npm:^6.9.15" abort-controller: "npm:^3.0.0" agentkeepalive: "npm:^4.2.1" form-data-encoder: "npm:1.7.2" formdata-node: "npm:^4.3.2" node-fetch: "npm:^2.6.7" - qs: "npm:^6.10.3" peerDependencies: zod: ^3.23.8 peerDependenciesMeta: @@ -8925,7 +8916,29 @@ __metadata: optional: true bin: openai: bin/cli - checksum: 10c0/0e6c05c8cce925d35a1ee34f43ff5cb2fb54410911b6293b67ab121ac41fb7ee809a289e26bc170985d20b0ab9a2d99b05b8ab011d4c119bb4846f8ed1eb8f69 + checksum: 10c0/468721223a68ae775dd6d7d2e3f32f7aa1ffb6d3e7fcb91c3851e7aaff75d0bf40b322a418dbc24aef34b86267821891a71f839f4cfce1a3e5bbed2084326314 + languageName: node + linkType: hard + +"openai@patch:openai@npm%3A4.71.1#~/.yarn/patches/openai-npm-4.71.1-b5940d6401.patch": + version: 4.71.1 + resolution: "openai@patch:openai@npm%3A4.71.1#~/.yarn/patches/openai-npm-4.71.1-b5940d6401.patch::version=4.71.1&hash=138a89" + dependencies: + "@types/node": "npm:^18.11.18" + "@types/node-fetch": "npm:^2.6.4" + abort-controller: "npm:^3.0.0" + agentkeepalive: "npm:^4.2.1" + form-data-encoder: "npm:1.7.2" + formdata-node: "npm:^4.3.2" + node-fetch: "npm:^2.6.7" + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + bin: + openai: bin/cli + checksum: 10c0/9aa1f3cc1d94b34c883b9f2d8d8709f21ae5629b12eec5e06fdad4262c352c7769ff86d47fb0bc6d2dda75f358ca2357edcfa6e59abb13a86fb5bdcb47212eca languageName: node linkType: hard @@ -9558,15 +9571,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.10.3": - version: 6.13.0 - resolution: "qs@npm:6.13.0" - dependencies: - side-channel: "npm:^1.0.6" - checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 - languageName: node - linkType: hard - "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3"