Frank 3 месяцев назад
Родитель
Сommit
9fb6e81007

+ 0 - 1
packages/console/app/src/routes/zen/util/format.ts

@@ -1 +0,0 @@
-export type Format = "anthropic" | "openai" | "oa-compat"

+ 5 - 4
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),
     }

+ 5 - 6
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
 

+ 4 - 0
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(),
   })