diff --git a/packages/console/app/src/routes/workspace/[id]/model-section.tsx b/packages/console/app/src/routes/workspace/[id]/model-section.tsx index 97f95278a..a4b64889c 100644 --- a/packages/console/app/src/routes/workspace/[id]/model-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/model-section.tsx @@ -36,7 +36,7 @@ const getModelsInfo = query(async (workspaceID: string) => { "use server" return withActor(async () => { return { - all: Object.entries(ZenData.list().models) + all: Object.entries(ZenData.list("full").models) .filter(([id, _model]) => !["claude-3-5-haiku"].includes(id)) .filter(([id, _model]) => !id.startsWith("alpha-")) .sort(([idA, modelA], [idB, modelB]) => { diff --git a/packages/console/app/src/routes/zen/lite/v1/chat/completions.ts b/packages/console/app/src/routes/zen/lite/v1/chat/completions.ts new file mode 100644 index 000000000..9a57e893f --- /dev/null +++ b/packages/console/app/src/routes/zen/lite/v1/chat/completions.ts @@ -0,0 +1,12 @@ +import type { APIEvent } from "@solidjs/start/server" +import { handler } from "~/routes/zen/util/handler" + +export function POST(input: APIEvent) { + return handler(input, { + format: "oa-compat", + modelList: "lite", + parseApiKey: (headers: Headers) => headers.get("authorization")?.split(" ")[1], + parseModel: (url: string, body: any) => body.model, + parseIsStream: (url: string, body: any) => !!body.stream, + }) +} diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index ee717ba5f..5f2b51c21 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -44,6 +44,7 @@ export async function handler( input: APIEvent, opts: { format: ZenData.Format + modelList: "lite" | "full" parseApiKey: (headers: Headers) => string | undefined parseModel: (url: string, body: any) => string parseIsStream: (url: string, body: any) => boolean @@ -77,7 +78,7 @@ export async function handler( request: requestId, client: ocClient, }) - const zenData = ZenData.list() + const zenData = ZenData.list(opts.modelList) const modelInfo = validateModel(zenData, model) const dataDumper = createDataDumper(sessionId, requestId, projectId) const trialLimiter = createTrialLimiter(modelInfo.trial, ip, ocClient) diff --git a/packages/console/app/src/routes/zen/v1/chat/completions.ts b/packages/console/app/src/routes/zen/v1/chat/completions.ts index 655459129..e9e05197e 100644 --- a/packages/console/app/src/routes/zen/v1/chat/completions.ts +++ b/packages/console/app/src/routes/zen/v1/chat/completions.ts @@ -4,6 +4,7 @@ import { handler } from "~/routes/zen/util/handler" export function POST(input: APIEvent) { return handler(input, { format: "oa-compat", + modelList: "full", parseApiKey: (headers: Headers) => headers.get("authorization")?.split(" ")[1], parseModel: (url: string, body: any) => body.model, parseIsStream: (url: string, body: any) => !!body.stream, diff --git a/packages/console/app/src/routes/zen/v1/messages.ts b/packages/console/app/src/routes/zen/v1/messages.ts index 54d223f95..9c09315a6 100644 --- a/packages/console/app/src/routes/zen/v1/messages.ts +++ b/packages/console/app/src/routes/zen/v1/messages.ts @@ -4,6 +4,7 @@ import { handler } from "~/routes/zen/util/handler" export function POST(input: APIEvent) { return handler(input, { format: "anthropic", + modelList: "full", parseApiKey: (headers: Headers) => headers.get("x-api-key") ?? undefined, parseModel: (url: string, body: any) => body.model, parseIsStream: (url: string, body: any) => !!body.stream, diff --git a/packages/console/app/src/routes/zen/v1/models.ts b/packages/console/app/src/routes/zen/v1/models.ts index ee2b3ab54..f9c14eded 100644 --- a/packages/console/app/src/routes/zen/v1/models.ts +++ b/packages/console/app/src/routes/zen/v1/models.ts @@ -17,7 +17,7 @@ export async function OPTIONS(input: APIEvent) { } export async function GET(input: APIEvent) { - const zenData = ZenData.list() + const zenData = ZenData.list("full") const disabledModels = await authenticate() return new Response( diff --git a/packages/console/app/src/routes/zen/v1/models/[model].ts b/packages/console/app/src/routes/zen/v1/models/[model].ts index b20378e37..a4edd5861 100644 --- a/packages/console/app/src/routes/zen/v1/models/[model].ts +++ b/packages/console/app/src/routes/zen/v1/models/[model].ts @@ -4,6 +4,7 @@ import { handler } from "~/routes/zen/util/handler" export function POST(input: APIEvent) { return handler(input, { format: "google", + modelList: "full", parseApiKey: (headers: Headers) => headers.get("x-goog-api-key") ?? undefined, parseModel: (url: string, body: any) => url.split("/").pop()?.split(":")?.[0] ?? "", parseIsStream: (url: string, body: any) => diff --git a/packages/console/app/src/routes/zen/v1/responses.ts b/packages/console/app/src/routes/zen/v1/responses.ts index a82a667cc..cae625cf6 100644 --- a/packages/console/app/src/routes/zen/v1/responses.ts +++ b/packages/console/app/src/routes/zen/v1/responses.ts @@ -4,6 +4,7 @@ import { handler } from "~/routes/zen/util/handler" export function POST(input: APIEvent) { return handler(input, { format: "openai", + modelList: "full", parseApiKey: (headers: Headers) => headers.get("authorization")?.split(" ")[1], parseModel: (url: string, body: any) => body.model, parseIsStream: (url: string, body: any) => !!body.stream, diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts index 6011cac37..e868b176e 100644 --- a/packages/console/core/src/model.ts +++ b/packages/console/core/src/model.ts @@ -73,6 +73,7 @@ export namespace ZenData { const ModelsSchema = z.object({ models: z.record(z.string(), z.union([ModelSchema, z.array(ModelSchema.extend({ formatFilter: FormatSchema }))])), + liteModels: z.record(z.string(), ModelSchema), providers: z.record(z.string(), ProviderSchema), providerFamilies: z.record(z.string(), ProviderFamilySchema), }) @@ -81,7 +82,7 @@ export namespace ZenData { return input }) - export const list = fn(z.void(), () => { + export const list = fn(z.enum(["lite", "full"]), (modelList) => { const json = JSON.parse( Resource.ZEN_MODELS1.value + Resource.ZEN_MODELS2.value + @@ -114,9 +115,9 @@ export namespace ZenData { Resource.ZEN_MODELS29.value + Resource.ZEN_MODELS30.value, ) - const { models, providers, providerFamilies } = ModelsSchema.parse(json) + const { models, liteModels, providers, providerFamilies } = ModelsSchema.parse(json) return { - models, + models: modelList === "lite" ? liteModels : models, providers: Object.fromEntries( Object.entries(providers).map(([id, provider]) => [ id,