feat(models): enable Kimi k2 ⇄ Claude trajectory handoff (#1525)
This commit is contained in:
@@ -1,9 +1,26 @@
|
|||||||
import type { ModelMessage } from "ai"
|
import type { ModelMessage } from "ai"
|
||||||
import { unique } from "remeda"
|
import { unique } from "remeda"
|
||||||
|
|
||||||
|
|
||||||
export namespace ProviderTransform {
|
export namespace ProviderTransform {
|
||||||
export function message(msgs: ModelMessage[], providerID: string, modelID: string) {
|
function normalizeToolCallIds(msgs: ModelMessage[]): ModelMessage[] {
|
||||||
if (providerID === "anthropic" || modelID.includes("anthropic") || modelID.includes("claude")) {
|
return msgs.map((msg) => {
|
||||||
|
if ((msg.role === "assistant" || msg.role === "tool") && Array.isArray(msg.content)) {
|
||||||
|
msg.content = msg.content.map((part) => {
|
||||||
|
if ((part.type === "tool-call" || part.type === "tool-result") && "toolCallId" in part) {
|
||||||
|
return {
|
||||||
|
...part,
|
||||||
|
toolCallId: part.toolCallId.replace(/[^a-zA-Z0-9_-]/g, '_')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return part
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return msg
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function applyCaching(msgs: ModelMessage[], providerID: string): ModelMessage[] {
|
||||||
const system = msgs.filter((msg) => msg.role === "system").slice(0, 2)
|
const system = msgs.filter((msg) => msg.role === "system").slice(0, 2)
|
||||||
const final = msgs.filter((msg) => msg.role !== "system").slice(-2)
|
const final = msgs.filter((msg) => msg.role !== "system").slice(-2)
|
||||||
|
|
||||||
@@ -42,7 +59,18 @@ export namespace ProviderTransform {
|
|||||||
...providerOptions,
|
...providerOptions,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return msgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function message(msgs: ModelMessage[], providerID: string, modelID: string) {
|
||||||
|
if (modelID.includes("claude")) {
|
||||||
|
msgs = normalizeToolCallIds(msgs)
|
||||||
|
}
|
||||||
|
if (providerID === "anthropic" || modelID.includes("anthropic") || modelID.includes("claude")) {
|
||||||
|
msgs = applyCaching(msgs, providerID)
|
||||||
|
}
|
||||||
|
|
||||||
return msgs
|
return msgs
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,9 +78,4 @@ export namespace ProviderTransform {
|
|||||||
if (modelID.toLowerCase().includes("qwen")) return 0.55
|
if (modelID.toLowerCase().includes("qwen")) return 0.55
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
export function topP(_providerID: string, modelID: string) {
|
|
||||||
if (modelID.toLowerCase().includes("qwen")) return 1
|
|
||||||
return undefined
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user