mirror of
https://gitee.com/zhangsken/opencode.git
synced 2026-10-16 10:30:01 +08:00
refactor(schema): derive partial config capabilities from Model.Capabilities
This commit is contained in:
@@ -430,6 +430,8 @@ export type McpProtocol = "legacy" | "auto" | "2026-07-28"
|
||||
|
||||
export type ConfigWorktree = { directory: string }
|
||||
|
||||
export type ConfigModelCapabilities = { tools?: boolean; input?: Array<string>; output?: Array<string> }
|
||||
|
||||
export type ConfigShellOption = { path: string; name: string; acceptable: boolean }
|
||||
|
||||
export type SessionMessageLocationSwitched = {
|
||||
@@ -2130,7 +2132,7 @@ export type ConfigEntry =
|
||||
settings?: ConfigModelSettings
|
||||
headers?: { [x: string]: string }
|
||||
body?: { [x: string]: JsonValue }
|
||||
capabilities?: { tools?: boolean; input?: Array<string>; output?: Array<string> }
|
||||
capabilities?: ConfigModelCapabilities
|
||||
variants?: Array<{
|
||||
id: string
|
||||
settings?: ConfigModelSettings
|
||||
|
||||
@@ -2,7 +2,7 @@ export * as ConfigProvider from "./provider.js"
|
||||
|
||||
import { Schema } from "effect"
|
||||
import { Money } from "../money.js"
|
||||
import { Compatibility, Family, ID, VariantID } from "../model.js"
|
||||
import { Capabilities, Compatibility, Family, ID, VariantID } from "../model.js"
|
||||
import { Provider } from "../provider.js"
|
||||
import { optional } from "../schema.js"
|
||||
|
||||
@@ -59,13 +59,6 @@ class Cost extends Schema.Class<Cost>("Config.Model.Cost")({
|
||||
cache: Cache.pipe(optional),
|
||||
}) {}
|
||||
|
||||
// Partial: unset fields fall back to the existing/base model's capabilities or Model.Capabilities.default().
|
||||
class ModelCapabilities extends Schema.Class<ModelCapabilities>("Config.Model.Capabilities")({
|
||||
tools: Schema.Boolean.pipe(optional),
|
||||
input: Schema.Array(Schema.String).pipe(optional),
|
||||
output: Schema.Array(Schema.String).pipe(optional),
|
||||
}) {}
|
||||
|
||||
class Limit extends Schema.Class<Limit>("Config.Model.Limit")({
|
||||
context: Schema.Int.pipe(optional),
|
||||
input: Schema.Int.pipe(optional),
|
||||
@@ -79,7 +72,14 @@ class Model extends Schema.Class<Model>("Config.Model")({
|
||||
compatibility: Compatibility.pipe(optional),
|
||||
package: Schema.String.pipe(optional),
|
||||
...ModelOverlays,
|
||||
capabilities: ModelCapabilities.pipe(optional),
|
||||
// Partial: unset fields fall back to the base model's capabilities, then the defaults.
|
||||
capabilities: Capabilities.mapFields((fields) => ({
|
||||
tools: optional(fields.tools),
|
||||
input: optional(fields.input),
|
||||
output: optional(fields.output),
|
||||
}))
|
||||
.annotate({ identifier: "Config.Model.Capabilities" })
|
||||
.pipe(optional),
|
||||
variants: Schema.Struct({
|
||||
id: VariantID,
|
||||
...ModelOverlays,
|
||||
|
||||
Reference in New Issue
Block a user