fix: github models 不支持图片 #291

This commit is contained in:
kangfenmao 2024-11-07 17:31:58 +08:00
parent 1db3faa2a8
commit 34c85e8f0c
5 changed files with 90 additions and 83 deletions

View File

@ -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),
};
}

View File

@ -93,7 +93,7 @@
"localforage": "^1.10.0", "localforage": "^1.10.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"mime": "^4.0.4", "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", "prettier": "^3.2.4",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",

View File

@ -17,7 +17,7 @@ export default abstract class BaseProvider {
return host.endsWith('/') ? host : `${host}/v1/` return host.endsWith('/') ? host : `${host}/v1/`
} }
public getHeaders() { public defaultHeaders() {
return { return {
'X-Api-Key': this.provider.apiKey 'X-Api-Key': this.provider.apiKey
} }

View File

@ -33,7 +33,8 @@ export default class OpenAIProvider extends BaseProvider {
this.sdk = new OpenAI({ this.sdk = new OpenAI({
dangerouslyAllowBrowser: true, dangerouslyAllowBrowser: true,
apiKey: provider.apiKey, apiKey: provider.apiKey,
baseURL: this.getBaseURL() baseURL: this.getBaseURL(),
defaultHeaders: this.defaultHeaders()
}) })
} }
@ -138,8 +139,7 @@ export default class OpenAIProvider extends BaseProvider {
const isSupportStreamOutput = streamOutput && this.isSupportStreamOutput(model.id) const isSupportStreamOutput = streamOutput && this.isSupportStreamOutput(model.id)
// @ts-ignore key is not typed // @ts-ignore key is not typed
const stream = await this.sdk.chat.completions.create( const stream = await this.sdk.chat.completions.create({
{
model: model.id, model: model.id,
messages: [isOpenAIo1 ? undefined : systemMessage, ...userMessages].filter( messages: [isOpenAIo1 ? undefined : systemMessage, ...userMessages].filter(
Boolean Boolean
@ -148,11 +148,7 @@ export default class OpenAIProvider extends BaseProvider {
max_tokens: maxTokens, max_tokens: maxTokens,
keep_alive: this.keepAliveTime, keep_alive: this.keepAliveTime,
stream: isSupportStreamOutput stream: isSupportStreamOutput
}, })
{
headers: this.getHeaders()
}
)
if (!isSupportStreamOutput) { if (!isSupportStreamOutput) {
return onChunk({ return onChunk({
@ -182,17 +178,12 @@ export default class OpenAIProvider extends BaseProvider {
] ]
// @ts-ignore key is not typed // @ts-ignore key is not typed
const response = await this.sdk.chat.completions.create( const response = await this.sdk.chat.completions.create({
{
model: model.id, model: model.id,
messages: messages as ChatCompletionMessageParam[], messages: messages as ChatCompletionMessageParam[],
stream: false, stream: false,
keep_alive: this.keepAliveTime keep_alive: this.keepAliveTime
}, })
{
headers: this.getHeaders()
}
)
return response.choices[0].message?.content || '' return response.choices[0].message?.content || ''
} }
@ -223,18 +214,13 @@ export default class OpenAIProvider extends BaseProvider {
} }
// @ts-ignore key is not typed // @ts-ignore key is not typed
const response = await this.sdk.chat.completions.create( const response = await this.sdk.chat.completions.create({
{
model: model.id, model: model.id,
messages: [systemMessage, userMessage] as ChatCompletionMessageParam[], messages: [systemMessage, userMessage] as ChatCompletionMessageParam[],
stream: false, stream: false,
keep_alive: this.keepAliveTime, keep_alive: this.keepAliveTime,
max_tokens: 1000 max_tokens: 1000
}, })
{
headers: this.getHeaders()
}
)
return removeQuotes(response.choices[0].message?.content?.substring(0, 50) || '') 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<string> { public async generateText({ prompt, content }: { prompt: string; content: string }): Promise<string> {
const model = getDefaultModel() const model = getDefaultModel()
const response = await this.sdk.chat.completions.create( const response = await this.sdk.chat.completions.create({
{
model: model.id, model: model.id,
stream: false, stream: false,
messages: [ messages: [
{ role: 'system', content: prompt }, { role: 'system', content: prompt },
{ role: 'user', content } { role: 'user', content }
] ]
}, })
{
headers: this.getHeaders()
}
)
return response.choices[0].message?.content || '' return response.choices[0].message?.content || ''
} }
@ -269,7 +250,6 @@ export default class OpenAIProvider extends BaseProvider {
const response: any = await this.sdk.request({ const response: any = await this.sdk.request({
method: 'post', method: 'post',
path: '/advice_questions', path: '/advice_questions',
headers: this.getHeaders(),
body: { body: {
messages: messages.filter((m) => m.role === 'user').map((m) => ({ role: m.role, content: m.content })), messages: messages.filter((m) => m.role === 'user').map((m) => ({ role: m.role, content: m.content })),
model: model.id, model: model.id,
@ -293,9 +273,7 @@ export default class OpenAIProvider extends BaseProvider {
} }
try { try {
const response = await this.sdk.chat.completions.create(body as ChatCompletionCreateParamsNonStreaming, { const response = await this.sdk.chat.completions.create(body as ChatCompletionCreateParamsNonStreaming)
headers: this.getHeaders()
})
return { return {
valid: Boolean(response?.choices[0].message), valid: Boolean(response?.choices[0].message),
@ -317,7 +295,7 @@ export default class OpenAIProvider extends BaseProvider {
query.type = 'text' 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') { if (this.provider.id === 'github') {
// @ts-ignore key is not typed // @ts-ignore key is not typed
@ -373,7 +351,6 @@ export default class OpenAIProvider extends BaseProvider {
const response = (await this.sdk.request({ const response = (await this.sdk.request({
method: 'post', method: 'post',
path: '/images/generations', path: '/images/generations',
headers: this.getHeaders(),
signal, signal,
body: { body: {
model: 'stabilityai/stable-diffusion-3-5-large', model: 'stabilityai/stable-diffusion-3-5-large',

View File

@ -2032,13 +2032,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "@types/react-dom@npm:^18.2.18":
version: 18.3.0 version: 18.3.0
resolution: "@types/react-dom@npm:18.3.0" resolution: "@types/react-dom@npm:18.3.0"
@ -2343,7 +2336,7 @@ __metadata:
markdown-it: "npm:^14.1.0" markdown-it: "npm:^14.1.0"
mime: "npm:^4.0.4" mime: "npm:^4.0.4"
officeparser: "npm:^4.1.1" 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" prettier: "npm:^3.2.4"
react: "npm:^18.2.0" react: "npm:^18.2.0"
react-dom: "npm:^18.2.0" react-dom: "npm:^18.2.0"
@ -8905,19 +8898,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"openai@npm:^4.52.1": "openai@npm:4.71.1":
version: 4.59.0 version: 4.71.1
resolution: "openai@npm:4.59.0" resolution: "openai@npm:4.71.1"
dependencies: dependencies:
"@types/node": "npm:^18.11.18" "@types/node": "npm:^18.11.18"
"@types/node-fetch": "npm:^2.6.4" "@types/node-fetch": "npm:^2.6.4"
"@types/qs": "npm:^6.9.15"
abort-controller: "npm:^3.0.0" abort-controller: "npm:^3.0.0"
agentkeepalive: "npm:^4.2.1" agentkeepalive: "npm:^4.2.1"
form-data-encoder: "npm:1.7.2" form-data-encoder: "npm:1.7.2"
formdata-node: "npm:^4.3.2" formdata-node: "npm:^4.3.2"
node-fetch: "npm:^2.6.7" node-fetch: "npm:^2.6.7"
qs: "npm:^6.10.3"
peerDependencies: peerDependencies:
zod: ^3.23.8 zod: ^3.23.8
peerDependenciesMeta: peerDependenciesMeta:
@ -8925,7 +8916,29 @@ __metadata:
optional: true optional: true
bin: bin:
openai: bin/cli 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 languageName: node
linkType: hard linkType: hard
@ -9558,15 +9571,6 @@ __metadata:
languageName: node languageName: node
linkType: hard 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": "qs@npm:~6.5.2":
version: 6.5.3 version: 6.5.3
resolution: "qs@npm:6.5.3" resolution: "qs@npm:6.5.3"