@@ -10,7 +10,7 @@ import { Resource } from "@opencode-ai/console-resource"
1010import { Billing } from "../../../../core/src/billing"
1111import { Actor } from "@opencode-ai/console-core/actor.js"
1212import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js"
13- import { ZenModel } from "@opencode-ai/console-core/model.js"
13+ import { ZenData } from "@opencode-ai/console-core/model.js"
1414import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js"
1515import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js"
1616import { ProviderTable } from "@opencode-ai/console-core/schema/provider.sql.js"
@@ -39,7 +39,8 @@ export async function handler(
3939 class UserLimitError extends Error { }
4040 class ModelError extends Error { }
4141
42- type Model = z . infer < typeof ZenModel . ModelSchema >
42+ type ZenData = Awaited < ReturnType < typeof ZenData . list > >
43+ type Model = ZenData [ "models" ] [ string ]
4344
4445 const FREE_WORKSPACES = [
4546 "wrk_01K46JDFR0E75SG2Q8K172KF3Y" , // frank
@@ -66,8 +67,9 @@ export async function handler(
6667 session : input . request . headers . get ( "x-opencode-session" ) ,
6768 request : input . request . headers . get ( "x-opencode-request" ) ,
6869 } )
69- const modelInfo = validateModel ( body . model )
70- const providerInfo = selectProvider ( modelInfo )
70+ const zenData = ZenData . list ( )
71+ const modelInfo = validateModel ( zenData , body . model )
72+ const providerInfo = selectProvider ( zenData , modelInfo )
7173 const authInfo = await authenticate ( modelInfo , providerInfo )
7274 validateBilling ( modelInfo , authInfo )
7375 validateModelSettings ( authInfo )
@@ -211,27 +213,29 @@ export async function handler(
211213 )
212214 }
213215
214- function validateModel ( reqModel : string ) {
215- const json = JSON . parse ( Resource . ZEN_MODELS . value )
216-
217- const allModels = ZenModel . ModelsSchema . parse ( json )
218-
219- if ( ! ( reqModel in allModels ) ) {
216+ function validateModel ( zenData : ZenData , reqModel : string ) {
217+ if ( ! ( reqModel in zenData . models ) ) {
220218 throw new ModelError ( `Model ${ reqModel } not supported` )
221219 }
222- const modelId = reqModel as keyof typeof allModels
223- const modelData = allModels [ modelId ]
220+ const modelId = reqModel as keyof typeof zenData . models
221+ const modelData = zenData . models [ modelId ]
224222
225223 logger . metric ( { model : modelId } )
226224
227225 return { id : modelId , ...modelData }
228226 }
229227
230- function selectProvider ( model : Awaited < ReturnType < typeof validateModel > > ) {
228+ function selectProvider ( zenData : ZenData , model : Awaited < ReturnType < typeof validateModel > > ) {
231229 const providers = model . providers
232230 . filter ( ( provider ) => ! provider . disabled )
233231 . flatMap ( ( provider ) => Array < typeof provider > ( provider . weight ?? 1 ) . fill ( provider ) )
234- return providers [ Math . floor ( Math . random ( ) * providers . length ) ]
232+ const provider = providers [ Math . floor ( Math . random ( ) * providers . length ) ]
233+
234+ if ( ! ( provider . id in zenData . providers ) ) {
235+ throw new ModelError ( `Provider ${ provider . id } not supported` )
236+ }
237+
238+ return { ...provider , ...zenData . providers [ provider . id ] }
235239 }
236240
237241 async function authenticate (
0 commit comments