diff options
| author | Frank <[email protected]> | 2026-04-15 09:19:26 -0400 |
|---|---|---|
| committer | Frank <[email protected]> | 2026-04-15 09:19:28 -0400 |
| commit | 47af00b2452ef7374cdda8769910799938d1303c (patch) | |
| tree | 68ff3c8e3bd69cb630eb35b6943b1b38a992a589 | |
| parent | 004a9284afb09b31105cb2bc26d993af0726585b (diff) | |
| download | opencode-47af00b2452ef7374cdda8769910799938d1303c.tar.gz opencode-47af00b2452ef7374cdda8769910799938d1303c.zip | |
zen: better error
| -rw-r--r-- | packages/console/app/src/routes/zen/util/handler.ts | 25 | ||||
| -rw-r--r-- | packages/console/core/src/model.ts | 1 |
2 files changed, 14 insertions, 12 deletions
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 46d843522..58df61809 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -222,22 +222,23 @@ export async function handler( logger.debug("STATUS: " + res.status + " " + res.statusText) // Handle non-streaming response - if (!isStream) { + if (!isStream || res.status === 429) { const json = await res.json() - const usageInfo = providerInfo.normalizeUsage(json.usage) - const costInfo = calculateCost(modelInfo, usageInfo) - await trialLimiter?.track(usageInfo) await rateLimiter?.track() - await trackUsage(sessionId, billingSource, authInfo, modelInfo, providerInfo, usageInfo, costInfo) - await reload(billingSource, authInfo, costInfo) + if (json.usage) { + const usageInfo = providerInfo.normalizeUsage(json.usage) + const costInfo = calculateCost(modelInfo, usageInfo) + await trialLimiter?.track(usageInfo) + await trackUsage(sessionId, billingSource, authInfo, modelInfo, providerInfo, usageInfo, costInfo) + await reload(billingSource, authInfo, costInfo) + json.cost = calculateOccurredCost(billingSource, costInfo) + } + if (json.error?.message) { + json.error.message = `Error from provider${providerInfo.displayName ? ` (${providerInfo.displayName})` : ""}: ${json.error.message}` + } const responseConverter = createResponseConverter(providerInfo.format, opts.format) - const body = JSON.stringify( - responseConverter({ - ...json, - cost: calculateOccurredCost(billingSource, costInfo), - }), - ) + const body = JSON.stringify(responseConverter(json)) logger.metric({ response_length: body.length }) logger.debug("RESPONSE: " + body) dataDumper?.provideResponse(body) diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts index b4149373f..3d614d303 100644 --- a/packages/console/core/src/model.ts +++ b/packages/console/core/src/model.ts @@ -44,6 +44,7 @@ export namespace ZenData { }) const ProviderSchema = z.object({ + displayName: z.string().optional(), api: z.string(), apiKey: z.union([z.string(), z.record(z.string(), z.string())]), format: FormatSchema.optional(), |
