fix: OpenAI provider api check doesn't handle error (#6769)

This commit is contained in:
Wang Jiyuan 2025-06-05 12:09:37 +08:00 committed by GitHub
parent dcdf49a5ce
commit f6462ef998
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 22 deletions

View File

@ -944,6 +944,7 @@ export abstract class BaseOpenAIProvider extends BaseProvider {
if (!model) { if (!model) {
return { valid: false, error: new Error('No model found') } return { valid: false, error: new Error('No model found') }
} }
try {
if (stream) { if (stream) {
const response = await this.sdk.responses.create({ const response = await this.sdk.responses.create({
model: model.id, model: model.id,
@ -955,7 +956,7 @@ export abstract class BaseOpenAIProvider extends BaseProvider {
return { valid: true, error: null } return { valid: true, error: null }
} }
} }
throw new Error('Empty streaming response') return { valid: false, error: new Error('No streaming response') }
} else { } else {
const response = await this.sdk.responses.create({ const response = await this.sdk.responses.create({
model: model.id, model: model.id,
@ -963,10 +964,13 @@ export abstract class BaseOpenAIProvider extends BaseProvider {
stream: false stream: false
}) })
if (!response.output_text) { if (!response.output_text) {
throw new Error('Empty response') return { valid: false, error: new Error('No response') }
} }
return { valid: true, error: null } return { valid: true, error: null }
} }
} catch (error: any) {
return { valid: false, error: error }
}
} }
/** /**

View File

@ -471,7 +471,7 @@ export function checkApiProvider(provider: Provider): {
} }
} }
export async function checkApi(provider: Provider, model: Model) { export async function checkApi(provider: Provider, model: Model): Promise<{ valid: boolean; error: Error | null }> {
const validation = checkApiProvider(provider) const validation = checkApiProvider(provider)
if (!validation.valid) { if (!validation.valid) {
return { return {
@ -484,9 +484,16 @@ export async function checkApi(provider: Provider, model: Model) {
// Try streaming check first // Try streaming check first
const result = await ai.check(model, true) const result = await ai.check(model, true)
if (result.valid && !result.error) { if (result.valid && !result.error) {
return result return result
} }
// 不应该假设错误由流式引发。多次发起检测请求可能触发429掩盖了真正的问题。
// 但这里错误类型做的很粗糙,暂时先这样
if (result.error && result.error.message.includes('stream')) {
return ai.check(model, false) return ai.check(model, false)
} else {
return result
}
} }