feat: improve error handling and formatting across providers

This commit is contained in:
kangfenmao 2025-02-04 16:45:09 +08:00
parent 3d16c735d9
commit a1b88758cc
4 changed files with 44 additions and 10 deletions

View File

@ -50,7 +50,7 @@ export default defineConfig({
}
},
optimizeDeps: {
exclude: ['chunk-PZ64DZKH.js']
exclude: ['chunk-PZ64DZKH.js', 'chunk-JMKENWIY.js']
}
}
})

View File

@ -225,7 +225,7 @@ export default class OpenAIProvider extends BaseProvider {
onChunk({
text: delta?.content || '',
// @ts-ignore key is not typed
reasoning_content: delta?.reasoning_content || delta.reasoning || '',
reasoning_content: delta?.reasoning_content || delta?.reasoning || '',
usage: chunk.usage,
metrics: {
completion_tokens: chunk.usage?.completion_tokens,

View File

@ -2,6 +2,7 @@ import i18n from '@renderer/i18n'
import store from '@renderer/store'
import { setGenerating } from '@renderer/store/runtime'
import { Assistant, Message, Model, Provider, Suggestion } from '@renderer/types'
import { formatErrorMessage } from '@renderer/utils/error'
import { isEmpty } from 'lodash'
import AiProvider from '../providers/AiProvider'
@ -241,11 +242,3 @@ export async function fetchModels(provider: Provider) {
return []
}
}
function formatErrorMessage(error: any): string {
try {
return '```json\n' + JSON.stringify(error, null, 2) + '\n```'
} catch (e) {
return 'Error: ' + error?.message
}
}

View File

@ -0,0 +1,41 @@
export function getErrorDetails(err: any, seen = new WeakSet()): any {
// Handle circular references
if (err === null || typeof err !== 'object' || seen.has(err)) {
return err
}
seen.add(err)
const result: any = {}
// Get all enumerable properties, including those from the prototype chain
const allProps = new Set([...Object.getOwnPropertyNames(err), ...Object.keys(err)])
for (const prop of allProps) {
try {
const value = err[prop]
// Skip function properties
if (typeof value === 'function') continue
// Recursively process nested objects
result[prop] = getErrorDetails(value, seen)
} catch (e) {
result[prop] = '<Unable to access property>'
}
}
return result
}
export function formatErrorMessage(error: any): string {
console.error('Original error:', error)
try {
const detailedError = getErrorDetails(error)
return '```json\n' + JSON.stringify(detailedError, null, 2) + '\n```'
} catch (e) {
try {
return '```\n' + String(error) + '\n```'
} catch {
return 'Error: Unable to format error message'
}
}
}