mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-05 00:23:10 +00:00
better interleaved thinking support (#5298)
This commit is contained in:
@@ -17,6 +17,16 @@ export namespace ModelsDev {
|
||||
reasoning: z.boolean(),
|
||||
temperature: z.boolean(),
|
||||
tool_call: z.boolean(),
|
||||
interleaved: z
|
||||
.union([
|
||||
z.literal(true),
|
||||
z
|
||||
.object({
|
||||
field: z.enum(["reasoning_content", "reasoning_details"]),
|
||||
})
|
||||
.strict(),
|
||||
])
|
||||
.optional(),
|
||||
cost: z
|
||||
.object({
|
||||
input: z.number(),
|
||||
|
||||
@@ -349,6 +349,12 @@ export namespace Provider {
|
||||
video: z.boolean(),
|
||||
pdf: z.boolean(),
|
||||
}),
|
||||
interleaved: z.union([
|
||||
z.boolean(),
|
||||
z.object({
|
||||
field: z.enum(["reasoning_content", "reasoning_details"]),
|
||||
}),
|
||||
]),
|
||||
}),
|
||||
cost: z.object({
|
||||
input: z.number(),
|
||||
@@ -450,6 +456,7 @@ export namespace Provider {
|
||||
video: model.modalities?.output?.includes("video") ?? false,
|
||||
pdf: model.modalities?.output?.includes("pdf") ?? false,
|
||||
},
|
||||
interleaved: model.interleaved ?? false,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -567,6 +574,7 @@ export namespace Provider {
|
||||
video: model.modalities?.output?.includes("video") ?? existingModel?.capabilities.output.video ?? false,
|
||||
pdf: model.modalities?.output?.includes("pdf") ?? existingModel?.capabilities.output.pdf ?? false,
|
||||
},
|
||||
interleaved: model.interleaved ?? false,
|
||||
},
|
||||
cost: {
|
||||
input: model?.cost?.input ?? existingModel?.cost?.input ?? 0,
|
||||
|
||||
@@ -273,7 +273,23 @@ export namespace ProviderTransform {
|
||||
return options
|
||||
}
|
||||
|
||||
export function providerOptions(model: Provider.Model, options: { [x: string]: any }) {
|
||||
export function providerOptions(model: Provider.Model, options: { [x: string]: any }, messages: ModelMessage[]) {
|
||||
if (model.capabilities.interleaved && typeof model.capabilities.interleaved === "object") {
|
||||
const cot = []
|
||||
const assistantMessages = messages.filter((msg) => msg.role === "assistant")
|
||||
for (const msg of assistantMessages) {
|
||||
for (const part of msg.content) {
|
||||
if (typeof part === "string") {
|
||||
continue
|
||||
}
|
||||
if (part.type === "reasoning") {
|
||||
cot.push(part)
|
||||
}
|
||||
}
|
||||
}
|
||||
options[model.capabilities.interleaved.field] = cot
|
||||
}
|
||||
|
||||
switch (model.api.npm) {
|
||||
case "@ai-sdk/openai":
|
||||
case "@ai-sdk/azure":
|
||||
|
||||
Reference in New Issue
Block a user