summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-11-03 17:30:16 -0500
committerFrank <[email protected]>2025-11-03 17:30:18 -0500
commit9fb6e81007ad000e5e55255af7e12a6c6fb58bde (patch)
tree44a2e248156261f7ac5c2b88c0788b130d6b88d7
parent3ac82227f1cf53bd4211562c72a982c2358ce48f (diff)
downloadopencode-9fb6e81007ad000e5e55255af7e12a6c6fb58bde.tar.gz
opencode-9fb6e81007ad000e5e55255af7e12a6c6fb58bde.zip
wip: zen
-rw-r--r--packages/console/app/src/routes/zen/util/format.ts1
-rw-r--r--packages/console/app/src/routes/zen/util/handler.ts9
-rw-r--r--packages/console/app/src/routes/zen/util/provider/provider.ts11
-rw-r--r--packages/console/core/src/model.ts4
4 files changed, 14 insertions, 11 deletions
diff --git a/packages/console/app/src/routes/zen/util/format.ts b/packages/console/app/src/routes/zen/util/format.ts
deleted file mode 100644
index 53a074969..000000000
--- a/packages/console/app/src/routes/zen/util/format.ts
+++ /dev/null
@@ -1 +0,0 @@
-export type Format = "anthropic" | "openai" | "oa-compat"
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts
index ebf42f4b2..0d46e8580 100644
--- a/packages/console/app/src/routes/zen/util/handler.ts
+++ b/packages/console/app/src/routes/zen/util/handler.ts
@@ -18,7 +18,6 @@ import {
createStreamPartConverter,
createResponseConverter,
} from "./provider/provider"
-import { Format } from "./format"
import { anthropicHelper } from "./provider/anthropic"
import { openaiHelper } from "./provider/openai"
import { oaCompatHelper } from "./provider/openai-compatible"
@@ -29,7 +28,7 @@ type Model = ZenData["models"][string]
export async function handler(
input: APIEvent,
opts: {
- format: Format
+ format: ZenData.Format
parseApiKey: (headers: Headers) => string | undefined
},
) {
@@ -248,12 +247,14 @@ export async function handler(
throw new ModelError(`Provider ${provider.id} not supported`)
}
+ const format = zenData.providers[provider.id].format
+
return {
...provider,
...zenData.providers[provider.id],
- ...(provider.id === "anthropic"
+ ...(format === "anthropic"
? anthropicHelper
- : provider.id === "openai"
+ : format === "openai"
? openaiHelper
: oaCompatHelper),
}
diff --git a/packages/console/app/src/routes/zen/util/provider/provider.ts b/packages/console/app/src/routes/zen/util/provider/provider.ts
index 03dfbc3c6..d0f123968 100644
--- a/packages/console/app/src/routes/zen/util/provider/provider.ts
+++ b/packages/console/app/src/routes/zen/util/provider/provider.ts
@@ -1,5 +1,4 @@
-import { Format } from "../format"
-
+import { ZenData } from "@opencode-ai/console-core/model.js"
import {
fromAnthropicChunk,
fromAnthropicRequest,
@@ -26,7 +25,7 @@ import {
} from "./openai-compatible"
export type ProviderHelper = {
- format: Format
+ format: ZenData.Format
modifyUrl: (providerApi: string) => string
modifyHeaders: (headers: Headers, body: Record<string, any>, apiKey: string) => void
modifyBody: (body: Record<string, any>) => Record<string, any>
@@ -158,7 +157,7 @@ export interface CommonChunk {
}
}
-export function createBodyConverter(from: Format, to: Format) {
+export function createBodyConverter(from: ZenData.Format, to: ZenData.Format) {
return (body: any): any => {
if (from === to) return body
@@ -173,7 +172,7 @@ export function createBodyConverter(from: Format, to: Format) {
}
}
-export function createStreamPartConverter(from: Format, to: Format) {
+export function createStreamPartConverter(from: ZenData.Format, to: ZenData.Format) {
return (part: any): any => {
if (from === to) return part
@@ -191,7 +190,7 @@ export function createStreamPartConverter(from: Format, to: Format) {
}
}
-export function createResponseConverter(from: Format, to: Format) {
+export function createResponseConverter(from: ZenData.Format, to: ZenData.Format) {
return (response: any): any => {
if (from === to) return response
diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts
index 118f7401d..30cc15e45 100644
--- a/packages/console/core/src/model.ts
+++ b/packages/console/core/src/model.ts
@@ -8,6 +8,9 @@ import { Actor } from "./actor"
import { Resource } from "@opencode-ai/console-resource"
export namespace ZenData {
+ const FormatSchema = z.enum(["anthropic", "openai", "oa-compat"])
+ export type Format = z.infer<typeof FormatSchema>
+
const ModelCostSchema = z.object({
input: z.number(),
output: z.number(),
@@ -34,6 +37,7 @@ export namespace ZenData {
const ProviderSchema = z.object({
api: z.string(),
apiKey: z.string(),
+ format: FormatSchema,
headerMappings: z.record(z.string(), z.string()).optional(),
})