mirror of
https://gitee.com/zhangsken/opencode.git
synced 2026-10-16 10:30:01 +08:00
feat(schema): expose effort and thinking binding overrides
This commit is contained in:
@@ -1460,6 +1460,8 @@ export type ModelCompatibility = {
|
||||
requireFinishReason?: boolean
|
||||
requireAssistantAfterTool?: boolean
|
||||
supportsPromptCacheKey?: boolean
|
||||
supportsEffortUpdates?: boolean
|
||||
supportsThinkingBlockBinding?: boolean
|
||||
}
|
||||
|
||||
export type ModelCost = {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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> {}
|
||||
|
||||
Reference in New Issue
Block a user