71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
export * as ConfigProvider from "./provider"
|
|
|
|
import { Schema } from "effect"
|
|
import { ProviderV2 } from "../provider"
|
|
import { ModelV2 } from "../model"
|
|
|
|
export class Request extends Schema.Class<Request>("ConfigV2.Provider.Request")({
|
|
headers: Schema.Record(Schema.String, Schema.String).pipe(Schema.optional),
|
|
body: Schema.Record(Schema.String, Schema.Unknown).pipe(Schema.optional),
|
|
}) {}
|
|
|
|
class Cache extends Schema.Class<Cache>("ConfigV2.Model.Cost.Cache")({
|
|
read: Schema.Finite.pipe(Schema.optional),
|
|
write: Schema.Finite.pipe(Schema.optional),
|
|
}) {}
|
|
|
|
class Cost extends Schema.Class<Cost>("ConfigV2.Model.Cost")({
|
|
tier: Schema.Struct({
|
|
type: Schema.Literal("context"),
|
|
size: Schema.Int,
|
|
}).pipe(Schema.optional),
|
|
input: Schema.Finite,
|
|
output: Schema.Finite,
|
|
cache: Cache.pipe(Schema.optional),
|
|
}) {}
|
|
|
|
class Limit extends Schema.Class<Limit>("ConfigV2.Model.Limit")({
|
|
context: Schema.Int.pipe(Schema.optional),
|
|
input: Schema.Int.pipe(Schema.optional),
|
|
output: Schema.Int.pipe(Schema.optional),
|
|
}) {}
|
|
|
|
const ModelApi = Schema.Union([
|
|
Schema.Struct({
|
|
id: ModelV2.ID.pipe(Schema.optional),
|
|
...ProviderV2.AISDK.fields,
|
|
}),
|
|
Schema.Struct({
|
|
id: ModelV2.ID.pipe(Schema.optional),
|
|
...ProviderV2.Native.fields,
|
|
}),
|
|
Schema.Struct({
|
|
id: ModelV2.ID,
|
|
}),
|
|
])
|
|
|
|
class Model extends Schema.Class<Model>("ConfigV2.Model")({
|
|
family: ModelV2.Family.pipe(Schema.optional),
|
|
name: Schema.String.pipe(Schema.optional),
|
|
api: ModelApi.pipe(Schema.optional),
|
|
capabilities: ModelV2.Capabilities.pipe(Schema.optional),
|
|
request: Schema.Struct({
|
|
...Request.fields,
|
|
variant: Schema.String.pipe(Schema.optional),
|
|
}).pipe(Schema.optional),
|
|
variants: Schema.Struct({
|
|
id: ModelV2.VariantID,
|
|
...Request.fields,
|
|
}).pipe(Schema.Array, Schema.optional),
|
|
cost: Schema.Union([Cost, Cost.pipe(Schema.Array)]).pipe(Schema.optional),
|
|
disabled: Schema.Boolean.pipe(Schema.optional),
|
|
limit: Limit.pipe(Schema.optional),
|
|
}) {}
|
|
|
|
export class Info extends Schema.Class<Info>("ConfigV2.Provider")({
|
|
name: Schema.String.pipe(Schema.optional),
|
|
env: Schema.String.pipe(Schema.Array, Schema.optional),
|
|
api: ProviderV2.Api.pipe(Schema.optional),
|
|
request: Request.pipe(Schema.optional),
|
|
models: Schema.Record(Schema.String, Model).pipe(Schema.optional),
|
|
}) {}
|