mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-20 02:50:40 +00:00
114 lines
4.3 KiB
TypeScript
114 lines
4.3 KiB
TypeScript
import { Schema } from "effect"
|
|
import { zod } from "@opencode-ai/core/effect-zod"
|
|
import { PositiveInt, withStatics } from "@opencode-ai/core/schema"
|
|
|
|
export const Model = Schema.Struct({
|
|
id: Schema.optional(Schema.String),
|
|
name: Schema.optional(Schema.String),
|
|
family: Schema.optional(Schema.String),
|
|
release_date: Schema.optional(Schema.String),
|
|
attachment: Schema.optional(Schema.Boolean),
|
|
reasoning: Schema.optional(Schema.Boolean),
|
|
temperature: Schema.optional(Schema.Boolean),
|
|
tool_call: Schema.optional(Schema.Boolean),
|
|
interleaved: Schema.optional(
|
|
Schema.Union([
|
|
Schema.Literal(true),
|
|
Schema.Struct({
|
|
field: Schema.Literals(["reasoning_content", "reasoning_details"]),
|
|
}),
|
|
]),
|
|
),
|
|
cost: Schema.optional(
|
|
Schema.Struct({
|
|
input: Schema.Finite,
|
|
output: Schema.Finite,
|
|
cache_read: Schema.optional(Schema.Finite),
|
|
cache_write: Schema.optional(Schema.Finite),
|
|
context_over_200k: Schema.optional(
|
|
Schema.Struct({
|
|
input: Schema.Finite,
|
|
output: Schema.Finite,
|
|
cache_read: Schema.optional(Schema.Finite),
|
|
cache_write: Schema.optional(Schema.Finite),
|
|
}),
|
|
),
|
|
}),
|
|
),
|
|
limit: Schema.optional(
|
|
Schema.Struct({
|
|
context: Schema.Finite,
|
|
input: Schema.optional(Schema.Finite),
|
|
output: Schema.Finite,
|
|
}),
|
|
),
|
|
modalities: Schema.optional(
|
|
Schema.Struct({
|
|
input: Schema.mutable(Schema.Array(Schema.Literals(["text", "audio", "image", "video", "pdf"]))),
|
|
output: Schema.mutable(Schema.Array(Schema.Literals(["text", "audio", "image", "video", "pdf"]))),
|
|
}),
|
|
),
|
|
experimental: Schema.optional(Schema.Boolean),
|
|
status: Schema.optional(Schema.Literals(["alpha", "beta", "deprecated"])),
|
|
provider: Schema.optional(
|
|
Schema.Struct({ npm: Schema.optional(Schema.String), api: Schema.optional(Schema.String) }),
|
|
),
|
|
options: Schema.optional(Schema.Record(Schema.String, Schema.Any)),
|
|
headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),
|
|
variants: Schema.optional(
|
|
Schema.Record(
|
|
Schema.String,
|
|
Schema.StructWithRest(
|
|
Schema.Struct({
|
|
disabled: Schema.optional(Schema.Boolean).annotate({ description: "Disable this variant for the model" }),
|
|
}),
|
|
[Schema.Record(Schema.String, Schema.Any)],
|
|
),
|
|
).annotate({ description: "Variant-specific configuration" }),
|
|
),
|
|
}).pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
|
|
export const Info = Schema.Struct({
|
|
api: Schema.optional(Schema.String),
|
|
name: Schema.optional(Schema.String),
|
|
env: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),
|
|
id: Schema.optional(Schema.String),
|
|
npm: Schema.optional(Schema.String),
|
|
whitelist: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),
|
|
blacklist: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),
|
|
options: Schema.optional(
|
|
Schema.StructWithRest(
|
|
Schema.Struct({
|
|
apiKey: Schema.optional(Schema.String),
|
|
baseURL: Schema.optional(Schema.String),
|
|
enterpriseUrl: Schema.optional(Schema.String).annotate({
|
|
description: "GitHub Enterprise URL for copilot authentication",
|
|
}),
|
|
setCacheKey: Schema.optional(Schema.Boolean).annotate({
|
|
description: "Enable promptCacheKey for this provider (default false)",
|
|
}),
|
|
timeout: Schema.optional(
|
|
Schema.Union([PositiveInt, Schema.Literal(false)]).annotate({
|
|
description:
|
|
"Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.",
|
|
}),
|
|
).annotate({
|
|
description:
|
|
"Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.",
|
|
}),
|
|
chunkTimeout: Schema.optional(PositiveInt).annotate({
|
|
description:
|
|
"Timeout in milliseconds between streamed SSE chunks for this provider. If no chunk arrives within this window, the request is aborted.",
|
|
}),
|
|
}),
|
|
[Schema.Record(Schema.String, Schema.Any)],
|
|
),
|
|
),
|
|
models: Schema.optional(Schema.Record(Schema.String, Model)),
|
|
})
|
|
.annotate({ identifier: "ProviderConfig" })
|
|
.pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
export type Info = Schema.Schema.Type<typeof Info>
|
|
|
|
export * as ConfigProvider from "./provider"
|