feat(schema): expose effort and thinking binding overrides

This commit is contained in:
Shoubhit Dash
2026-09-28 18:44:14 +05:30
parent 0cbcbfdd4c
commit 0bcfb31e7f
3 changed files with 35 additions and 0 deletions
@@ -1460,6 +1460,8 @@ export type ModelCompatibility = {
requireFinishReason?: boolean
requireAssistantAfterTool?: boolean
supportsPromptCacheKey?: boolean
supportsEffortUpdates?: boolean
supportsThinkingBlockBinding?: boolean
}
export type ModelCost = {
+31
View File
@@ -449,6 +449,37 @@ describe("ModelResolver", () => {
),
)
it.effect("lets catalog compatibility disable default effort updates", () =>
Effect.gen(function* () {
const request = (compatibility?: Compatibility) =>
Effect.gen(function* () {
const resolved = yield* ModelResolver.fromCatalogModel(
model("@opencode/ai/providers/openai", {
modelID: "gpt-6-sol",
compatibility,
settings: { apiKey: "test" },
}),
)
const prepared = yield* compileRequest(
LLM.request({
model: resolved,
messages: [
Message.user("Before."),
Message.effort({ effort: "low", previous: "high" }),
Message.user("After."),
],
providerOptions: { reasoningEffort: "low" },
}),
)
return prepared.body.input
})
const update = { type: "configuration_update", reasoning: { effort: "low" } }
expect(yield* request()).toContainEqual(update)
expect(yield* request({ supportsEffortUpdates: false })).not.toContainEqual(update)
}),
)
it.effect("uses merged API settings for OpenAI-compatible auth and request defaults", () =>
Effect.gen(function* () {
const resolved = yield* ModelResolver.fromCatalogModel(
+2
View File
@@ -80,6 +80,8 @@ export const Compatibility = Schema.Struct({
requireFinishReason: Schema.Boolean.pipe(optional),
requireAssistantAfterTool: Schema.Boolean.pipe(optional),
supportsPromptCacheKey: Schema.Boolean.pipe(optional),
supportsEffortUpdates: Schema.Boolean.pipe(optional),
supportsThinkingBlockBinding: Schema.Boolean.pipe(optional),
}).annotate({ identifier: "Model.Compatibility" })
export interface Capabilities extends Schema.Schema.Type<typeof Capabilities> {}