/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/schema/src/model.ts
106 строк
3 KB
Kit Langton
refactor(schema): tighten public contracts (#33771)
25 июн 2026, 20:10
Не верифицирован
25 июн 2026, 20:10
9e9d405
Код
Авторство
О чём код?
export * as Model from "./model" import { Schema } from "effect" import { optional } from "./schema" import { Provider } from "./provider" import { statics } from "./schema" export const ID = Schema.String.pipe(Schema.brand("ModelV2.ID")) export type ID = typeof ID.Type export const VariantID = Schema.String.pipe(Schema.brand("VariantID")) export type VariantID = typeof VariantID.Type export const Ref = Schema.Struct({ id: ID, providerID: Provider.ID, variant: VariantID.pipe(optional), }).annotate({ identifier: "Model.Ref" }) export interface Ref extends Schema.Schema.Type<typeof Ref> {} export const Family = Schema.String.pipe(Schema.brand("Family")) export type Family = typeof Family.Type export interface Capabilities extends Schema.Schema.Type<typeof Capabilities> {} export const Capabilities = Schema.Struct({ tools: Schema.Boolean, input: Schema.Array(Schema.String), output: Schema.Array(Schema.String), }).annotate({ identifier: "Model.Capabilities" }) export interface Cost extends Schema.Schema.Type<typeof Cost> {} export const Cost = Schema.Struct({ tier: Schema.Struct({ type: Schema.Literal("context"), size: Schema.Int, }).pipe(optional), input: Schema.Finite, output: Schema.Finite, cache: Schema.Struct({ read: Schema.Finite, write: Schema.Finite, }), }).annotate({ identifier: "Model.Cost" }) export const Api = Schema.Union([ Schema.Struct({ id: ID, ...Provider.AISDK.fields, }), Schema.Struct({ id: ID, ...Provider.Native.fields, }), ]) .pipe(Schema.toTaggedUnion("type")) .annotate({ identifier: "Model.Api" }) export type Api = typeof Api.Type export interface Info extends Schema.Schema.Type<typeof Info> {} export const Info = Schema.Struct({ id: ID, providerID: Provider.ID, family: Family.pipe(optional), name: Schema.String, api: Api, capabilities: Capabilities, request: Schema.Struct({ ...Provider.Request.fields, variant: Schema.String.pipe(optional), }), variants: Schema.Struct({ id: VariantID, ...Provider.Request.fields, }).pipe(Schema.Array), time: Schema.Struct({ released: Schema.Finite, }), cost: Schema.Array(Cost), status: Schema.Literals(["alpha", "beta", "deprecated", "active"]), enabled: Schema.Boolean, limit: Schema.Struct({ context: Schema.Int, input: Schema.Int.pipe(optional), output: Schema.Int, }), }) .annotate({ identifier: "ModelV2.Info" }) .pipe( statics((schema) => ({ empty: (providerID: Provider.ID, modelID: ID) => schema.make({ id: modelID, providerID, name: modelID, api: { id: modelID, type: "native", settings: {} }, capabilities: { tools: false, input: [], output: [] }, request: { headers: {}, body: {} }, variants: [], time: { released: 0 }, cost: [], status: "active", enabled: true, limit: { context: 0, output: 0 }, }), })), )