summaryrefslogtreecommitdiffhomepage
path: root/packages/console/app/src/routes/zen/util
diff options
context:
space:
mode:
authorGitHub Action <[email protected]>2025-11-08 01:59:02 +0000
committerGitHub Action <[email protected]>2025-11-08 01:59:02 +0000
commit34ff87d504836ff71b3bb2d466842c00ee3c5ec2 (patch)
treecc8ac777f2f082ff676b179017c7dc0f3270314b /packages/console/app/src/routes/zen/util
parent16357e804145b7f96a2a53badb7dcb6c5453dafe (diff)
downloadopencode-34ff87d504836ff71b3bb2d466842c00ee3c5ec2.tar.gz
opencode-34ff87d504836ff71b3bb2d466842c00ee3c5ec2.zip
chore: format code
Diffstat (limited to 'packages/console/app/src/routes/zen/util')
-rw-r--r--packages/console/app/src/routes/zen/util/handler.ts64
-rw-r--r--packages/console/app/src/routes/zen/util/provider/anthropic.ts26
-rw-r--r--packages/console/app/src/routes/zen/util/provider/openai-compatible.ts31
-rw-r--r--packages/console/app/src/routes/zen/util/provider/openai.ts38
4 files changed, 39 insertions, 120 deletions
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts
index deab7ded2..194a7c71e 100644
--- a/packages/console/app/src/routes/zen/util/handler.ts
+++ b/packages/console/app/src/routes/zen/util/handler.ts
@@ -13,11 +13,7 @@ import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js"
import { ProviderTable } from "@opencode-ai/console-core/schema/provider.sql.js"
import { logger } from "./logger"
import { AuthError, CreditsError, MonthlyLimitError, UserLimitError, ModelError } from "./error"
-import {
- createBodyConverter,
- createStreamPartConverter,
- createResponseConverter,
-} from "./provider/provider"
+import { createBodyConverter, createStreamPartConverter, createResponseConverter } from "./provider/provider"
import { anthropicHelper } from "./provider/anthropic"
import { openaiHelper } from "./provider/openai"
import { oaCompatHelper } from "./provider/openai-compatible"
@@ -46,11 +42,7 @@ export async function handler(
})
const zenData = ZenData.list()
const modelInfo = validateModel(zenData, body.model)
- const providerInfo = selectProvider(
- zenData,
- modelInfo,
- input.request.headers.get("x-real-ip") ?? "",
- )
+ const providerInfo = selectProvider(zenData, modelInfo, input.request.headers.get("x-real-ip") ?? "")
const authInfo = await authenticate(modelInfo, providerInfo)
validateBilling(modelInfo, authInfo)
validateModelSettings(authInfo)
@@ -229,11 +221,7 @@ export async function handler(
return { id: modelId, ...modelData }
}
- function selectProvider(
- zenData: ZenData,
- model: Awaited<ReturnType<typeof validateModel>>,
- ip: string,
- ) {
+ function selectProvider(zenData: ZenData, model: Awaited<ReturnType<typeof validateModel>>, ip: string) {
const providers = model.providers
.filter((provider) => !provider.disabled)
.flatMap((provider) => Array<typeof provider>(provider.weight ?? 1).fill(provider))
@@ -252,11 +240,7 @@ export async function handler(
return {
...provider,
...zenData.providers[provider.id],
- ...(format === "anthropic"
- ? anthropicHelper
- : format === "openai"
- ? openaiHelper
- : oaCompatHelper),
+ ...(format === "anthropic" ? anthropicHelper : format === "openai" ? openaiHelper : oaCompatHelper),
}
}
@@ -297,20 +281,11 @@ export async function handler(
.from(KeyTable)
.innerJoin(WorkspaceTable, eq(WorkspaceTable.id, KeyTable.workspaceID))
.innerJoin(BillingTable, eq(BillingTable.workspaceID, KeyTable.workspaceID))
- .innerJoin(
- UserTable,
- and(eq(UserTable.workspaceID, KeyTable.workspaceID), eq(UserTable.id, KeyTable.userID)),
- )
- .leftJoin(
- ModelTable,
- and(eq(ModelTable.workspaceID, KeyTable.workspaceID), eq(ModelTable.model, model.id)),
- )
+ .innerJoin(UserTable, and(eq(UserTable.workspaceID, KeyTable.workspaceID), eq(UserTable.id, KeyTable.userID)))
+ .leftJoin(ModelTable, and(eq(ModelTable.workspaceID, KeyTable.workspaceID), eq(ModelTable.model, model.id)))
.leftJoin(
ProviderTable,
- and(
- eq(ProviderTable.workspaceID, KeyTable.workspaceID),
- eq(ProviderTable.provider, providerInfo.id),
- ),
+ and(eq(ProviderTable.workspaceID, KeyTable.workspaceID), eq(ProviderTable.provider, providerInfo.id)),
)
.where(and(eq(KeyTable.key, apiKey), isNull(KeyTable.timeDeleted)))
.then((rows) => rows[0]),
@@ -401,19 +376,12 @@ export async function handler(
providerInfo: Awaited<ReturnType<typeof selectProvider>>,
usage: any,
) {
- const {
- inputTokens,
- outputTokens,
- reasoningTokens,
- cacheReadTokens,
- cacheWrite5mTokens,
- cacheWrite1hTokens,
- } = providerInfo.normalizeUsage(usage)
+ const { inputTokens, outputTokens, reasoningTokens, cacheReadTokens, cacheWrite5mTokens, cacheWrite1hTokens } =
+ providerInfo.normalizeUsage(usage)
const modelCost =
modelInfo.cost200K &&
- inputTokens + (cacheReadTokens ?? 0) + (cacheWrite5mTokens ?? 0) + (cacheWrite1hTokens ?? 0) >
- 200_000
+ inputTokens + (cacheReadTokens ?? 0) + (cacheWrite5mTokens ?? 0) + (cacheWrite1hTokens ?? 0) > 200_000
? modelInfo.cost200K
: modelInfo.cost
@@ -464,8 +432,7 @@ export async function handler(
if (!authInfo) return
- const cost =
- authInfo.isFree || authInfo.provider?.credentials ? 0 : centsToMicroCents(totalCostInCent)
+ const cost = authInfo.isFree || authInfo.provider?.credentials ? 0 : centsToMicroCents(totalCostInCent)
await Database.transaction(async (tx) => {
await tx.insert(UsageTable).values({
workspaceID: authInfo.workspaceID,
@@ -505,9 +472,7 @@ export async function handler(
`,
timeMonthlyUsageUpdated: sql`now()`,
})
- .where(
- and(eq(UserTable.workspaceID, authInfo.workspaceID), eq(UserTable.id, authInfo.user.id)),
- )
+ .where(and(eq(UserTable.workspaceID, authInfo.workspaceID), eq(UserTable.id, authInfo.user.id)))
})
await Database.use((tx) =>
@@ -537,10 +502,7 @@ export async function handler(
BillingTable.balance,
centsToMicroCents((authInfo.billing.reloadTrigger ?? Billing.RELOAD_TRIGGER) * 100),
),
- or(
- isNull(BillingTable.timeReloadLockedTill),
- lt(BillingTable.timeReloadLockedTill, sql`now()`),
- ),
+ or(isNull(BillingTable.timeReloadLockedTill), lt(BillingTable.timeReloadLockedTill, sql`now()`)),
),
),
)
diff --git a/packages/console/app/src/routes/zen/util/provider/anthropic.ts b/packages/console/app/src/routes/zen/util/provider/anthropic.ts
index f4e8dc44d..d8d1cd741 100644
--- a/packages/console/app/src/routes/zen/util/provider/anthropic.ts
+++ b/packages/console/app/src/routes/zen/util/provider/anthropic.ts
@@ -123,15 +123,12 @@ export function fromAnthropicRequest(body: any): CommonRequest {
if ((p as any).type === "tool_result") {
const id = (p as any).tool_use_id
const content =
- typeof (p as any).content === "string"
- ? (p as any).content
- : JSON.stringify((p as any).content)
+ typeof (p as any).content === "string" ? (p as any).content : JSON.stringify((p as any).content)
msgs.push({ role: "tool", tool_call_id: id, content })
}
}
if (partsOut.length > 0) {
- if (partsOut.length === 1 && partsOut[0].type === "text")
- msgs.push({ role: "user", content: partsOut[0].text })
+ if (partsOut.length === 1 && partsOut[0].type === "text") msgs.push({ role: "user", content: partsOut[0].text })
else msgs.push({ role: "user", content: partsOut })
}
continue
@@ -143,8 +140,7 @@ export function fromAnthropicRequest(body: any): CommonRequest {
const tcs: any[] = []
for (const p of partsIn) {
if (!p || !(p as any).type) continue
- if ((p as any).type === "text" && typeof (p as any).text === "string")
- texts.push((p as any).text)
+ if ((p as any).type === "text" && typeof (p as any).text === "string") texts.push((p as any).text)
if ((p as any).type === "tool_use") {
const name = (p as any).name
const id = (p as any).id
@@ -214,9 +210,7 @@ export function fromAnthropicRequest(body: any): CommonRequest {
export function toAnthropicRequest(body: CommonRequest) {
if (!body || typeof body !== "object") return body
- const sysIn = Array.isArray(body.messages)
- ? body.messages.filter((m: any) => m && m.role === "system")
- : []
+ const sysIn = Array.isArray(body.messages) ? body.messages.filter((m: any) => m && m.role === "system") : []
let ccCount = 0
const cc = () => {
ccCount++
@@ -367,9 +361,7 @@ export function fromAnthropicResponse(resp: any): CommonResponse {
const idIn = (resp as any).id
const id =
- typeof idIn === "string"
- ? idIn.replace(/^msg_/, "chatcmpl_")
- : `chatcmpl_${Math.random().toString(36).slice(2)}`
+ typeof idIn === "string" ? idIn.replace(/^msg_/, "chatcmpl_") : `chatcmpl_${Math.random().toString(36).slice(2)}`
const model = (resp as any).model
const blocks: any[] = Array.isArray((resp as any).content) ? (resp as any).content : []
@@ -412,9 +404,7 @@ export function fromAnthropicResponse(resp: any): CommonResponse {
const ct = typeof (u as any).output_tokens === "number" ? (u as any).output_tokens : undefined
const total = pt != null && ct != null ? pt + ct : undefined
const cached =
- typeof (u as any).cache_read_input_tokens === "number"
- ? (u as any).cache_read_input_tokens
- : undefined
+ typeof (u as any).cache_read_input_tokens === "number" ? (u as any).cache_read_input_tokens : undefined
const details = cached != null ? { cached_tokens: cached } : undefined
return {
prompt_tokens: pt,
@@ -591,9 +581,7 @@ export function fromAnthropicChunk(chunk: string): CommonChunk | string {
prompt_tokens: u.input_tokens,
completion_tokens: u.output_tokens,
total_tokens: (u.input_tokens || 0) + (u.output_tokens || 0),
- ...(u.cache_read_input_tokens
- ? { prompt_tokens_details: { cached_tokens: u.cache_read_input_tokens } }
- : {}),
+ ...(u.cache_read_input_tokens ? { prompt_tokens_details: { cached_tokens: u.cache_read_input_tokens } } : {}),
}
}
diff --git a/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts b/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts
index d69985728..8a9170ef1 100644
--- a/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts
+++ b/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts
@@ -57,8 +57,7 @@ export const oaCompatHelper = {
const inputTokens = usage.prompt_tokens ?? 0
const outputTokens = usage.completion_tokens ?? 0
const reasoningTokens = usage.completion_tokens_details?.reasoning_tokens ?? undefined
- const cacheReadTokens =
- usage.cached_tokens ?? usage.prompt_tokens_details?.cached_tokens ?? undefined
+ const cacheReadTokens = usage.cached_tokens ?? usage.prompt_tokens_details?.cached_tokens ?? undefined
return {
inputTokens: inputTokens - (cacheReadTokens ?? 0),
outputTokens,
@@ -80,8 +79,7 @@ export function fromOaCompatibleRequest(body: any): CommonRequest {
if (!m || !m.role) continue
if (m.role === "system") {
- if (typeof m.content === "string" && m.content.length > 0)
- msgsOut.push({ role: "system", content: m.content })
+ if (typeof m.content === "string" && m.content.length > 0) msgsOut.push({ role: "system", content: m.content })
continue
}
@@ -92,12 +90,10 @@ export function fromOaCompatibleRequest(body: any): CommonRequest {
const parts: any[] = []
for (const p of m.content) {
if (!p || !p.type) continue
- if (p.type === "text" && typeof p.text === "string")
- parts.push({ type: "text", text: p.text })
+ if (p.type === "text" && typeof p.text === "string") parts.push({ type: "text", text: p.text })
if (p.type === "image_url") parts.push({ type: "image_url", image_url: p.image_url })
}
- if (parts.length === 1 && parts[0].type === "text")
- msgsOut.push({ role: "user", content: parts[0].text })
+ if (parts.length === 1 && parts[0].type === "text") msgsOut.push({ role: "user", content: parts[0].text })
else if (parts.length > 0) msgsOut.push({ role: "user", content: parts })
}
continue
@@ -141,8 +137,7 @@ export function toOaCompatibleRequest(body: CommonRequest) {
if (p.type === "image_url" && p.image_url) return { type: "image_url", image_url: p.image_url }
const s = (p as any).source
if (!s || typeof s !== "object") return undefined
- if (s.type === "url" && typeof s.url === "string")
- return { type: "image_url", image_url: { url: s.url } }
+ if (s.type === "url" && typeof s.url === "string") return { type: "image_url", image_url: { url: s.url } }
if (s.type === "base64" && typeof s.media_type === "string" && typeof s.data === "string")
return { type: "image_url", image_url: { url: `data:${s.media_type};base64,${s.data}` } }
return undefined
@@ -152,8 +147,7 @@ export function toOaCompatibleRequest(body: CommonRequest) {
if (!m || !m.role) continue
if (m.role === "system") {
- if (typeof m.content === "string" && m.content.length > 0)
- msgsOut.push({ role: "system", content: m.content })
+ if (typeof m.content === "string" && m.content.length > 0) msgsOut.push({ role: "system", content: m.content })
continue
}
@@ -166,13 +160,11 @@ export function toOaCompatibleRequest(body: CommonRequest) {
const parts: any[] = []
for (const p of m.content) {
if (!p || !p.type) continue
- if (p.type === "text" && typeof p.text === "string")
- parts.push({ type: "text", text: p.text })
+ if (p.type === "text" && typeof p.text === "string") parts.push({ type: "text", text: p.text })
const ip = toImg(p)
if (ip) parts.push(ip)
}
- if (parts.length === 1 && parts[0].type === "text")
- msgsOut.push({ role: "user", content: parts[0].text })
+ if (parts.length === 1 && parts[0].type === "text") msgsOut.push({ role: "user", content: parts[0].text })
else if (parts.length > 0) msgsOut.push({ role: "user", content: parts })
}
continue
@@ -325,9 +317,7 @@ export function toOaCompatibleResponse(resp: CommonResponse) {
const idIn = (resp as any).id
const id =
- typeof idIn === "string"
- ? idIn.replace(/^msg_/, "chatcmpl_")
- : `chatcmpl_${Math.random().toString(36).slice(2)}`
+ typeof idIn === "string" ? idIn.replace(/^msg_/, "chatcmpl_") : `chatcmpl_${Math.random().toString(36).slice(2)}`
const model = (resp as any).model
const blocks: any[] = Array.isArray((resp as any).content) ? (resp as any).content : []
@@ -369,8 +359,7 @@ export function toOaCompatibleResponse(resp: CommonResponse) {
const pt = typeof u.input_tokens === "number" ? u.input_tokens : undefined
const ct = typeof u.output_tokens === "number" ? u.output_tokens : undefined
const total = pt != null && ct != null ? pt + ct : undefined
- const cached =
- typeof u.cache_read_input_tokens === "number" ? u.cache_read_input_tokens : undefined
+ const cached = typeof u.cache_read_input_tokens === "number" ? u.cache_read_input_tokens : undefined
const details = cached != null ? { cached_tokens: cached } : undefined
return {
prompt_tokens: pt,
diff --git a/packages/console/app/src/routes/zen/util/provider/openai.ts b/packages/console/app/src/routes/zen/util/provider/openai.ts
index fa0776b7a..e79e83579 100644
--- a/packages/console/app/src/routes/zen/util/provider/openai.ts
+++ b/packages/console/app/src/routes/zen/util/provider/openai.ts
@@ -86,11 +86,7 @@ export function fromOpenaiRequest(body: any): CommonRequest {
const msgs: any[] = []
- const inMsgs = Array.isArray(body.input)
- ? body.input
- : Array.isArray(body.messages)
- ? body.messages
- : []
+ const inMsgs = Array.isArray(body.input) ? body.input : Array.isArray(body.messages) ? body.messages : []
for (const m of inMsgs) {
if (!m) continue
@@ -103,9 +99,7 @@ export function fromOpenaiRequest(body: any): CommonRequest {
const args = typeof a === "string" ? a : JSON.stringify(a ?? {})
msgs.push({
role: "assistant",
- tool_calls: [
- { id: (m as any).id, type: "function", function: { name, arguments: args } },
- ],
+ tool_calls: [{ id: (m as any).id, type: "function", function: { name, arguments: args } }],
})
}
if ((m as any).type === "function_call_output") {
@@ -122,8 +116,7 @@ export function fromOpenaiRequest(body: any): CommonRequest {
if (typeof c === "string" && c.length > 0) msgs.push({ role: "system", content: c })
if (Array.isArray(c)) {
const t = c.find((p: any) => p && typeof p.text === "string")
- if (t && typeof t.text === "string" && t.text.length > 0)
- msgs.push({ role: "system", content: t.text })
+ if (t && typeof t.text === "string" && t.text.length > 0) msgs.push({ role: "system", content: t.text })
}
continue
}
@@ -136,24 +129,18 @@ export function fromOpenaiRequest(body: any): CommonRequest {
const parts: any[] = []
for (const p of c) {
if (!p || !(p as any).type) continue
- if (
- ((p as any).type === "text" || (p as any).type === "input_text") &&
- typeof (p as any).text === "string"
- )
+ if (((p as any).type === "text" || (p as any).type === "input_text") && typeof (p as any).text === "string")
parts.push({ type: "text", text: (p as any).text })
const ip = toImg(p)
if (ip) parts.push(ip)
if ((p as any).type === "tool_result") {
const id = (p as any).tool_call_id
const content =
- typeof (p as any).content === "string"
- ? (p as any).content
- : JSON.stringify((p as any).content)
+ typeof (p as any).content === "string" ? (p as any).content : JSON.stringify((p as any).content)
msgs.push({ role: "tool", tool_call_id: id, content })
}
}
- if (parts.length === 1 && parts[0].type === "text")
- msgs.push({ role: "user", content: parts[0].text })
+ if (parts.length === 1 && parts[0].type === "text") msgs.push({ role: "user", content: parts[0].text })
else if (parts.length > 0) msgs.push({ role: "user", content: parts })
}
continue
@@ -280,10 +267,7 @@ export function toOpenaiRequest(body: CommonRequest) {
}
if ((m as any).role === "tool") {
- const out =
- typeof (m as any).content === "string"
- ? (m as any).content
- : JSON.stringify((m as any).content)
+ const out = typeof (m as any).content === "string" ? (m as any).content : JSON.stringify((m as any).content)
input.push({ type: "function_call_output", call_id: (m as any).tool_call_id, output: out })
continue
}
@@ -351,9 +335,7 @@ export function fromOpenaiResponse(resp: any): CommonResponse {
const idIn = (r as any).id
const id =
- typeof idIn === "string"
- ? idIn.replace(/^resp_/, "chatcmpl_")
- : `chatcmpl_${Math.random().toString(36).slice(2)}`
+ typeof idIn === "string" ? idIn.replace(/^resp_/, "chatcmpl_") : `chatcmpl_${Math.random().toString(36).slice(2)}`
const model = (r as any).model ?? (resp as any).model
const out = Array.isArray((r as any).output) ? (r as any).output : []
@@ -480,9 +462,7 @@ export function toOpenaiResponse(resp: CommonResponse) {
})()
return {
- id:
- (resp as any).id?.replace(/^chatcmpl_/, "resp_") ??
- `resp_${Math.random().toString(36).slice(2)}`,
+ id: (resp as any).id?.replace(/^chatcmpl_/, "resp_") ?? `resp_${Math.random().toString(36).slice(2)}`,
object: "response",
model: (resp as any).model,
output: outputItems,