fix: keep local message IDs out of model requests
Direct-model conversation history began carrying GoodBuddy UUIDs after durable context compression was added. OpenAI Responses rejected follow-up messages because provider message IDs must start with msg_, and the same metadata could also reach other protocol payloads. Model request serialization now strips local IDs across Anthropic Messages, Chat Completions, and Responses while retaining provider IDs during Responses tool rounds. Regression coverage includes compression, tools, and a gated real-model follow-up. Release note: 修复默认直连模型在继续对话或重新编辑发送时可能因消息 ID 格式错误而失败的问题。
This commit is contained in:
@@ -64,6 +64,17 @@ type ConversationMessage = {
|
||||
content: string
|
||||
}
|
||||
|
||||
type ProviderConversationMessage = Pick<
|
||||
ConversationMessage,
|
||||
'role' | 'content'
|
||||
>
|
||||
|
||||
function toProviderConversationMessages(
|
||||
messages: readonly ConversationMessage[]
|
||||
): ProviderConversationMessage[] {
|
||||
return messages.map(({ role, content }) => ({ role, content }))
|
||||
}
|
||||
|
||||
type ConversationSummaryState = {
|
||||
coveredHistoryDigest: string
|
||||
coveredMessageCount: number
|
||||
@@ -2225,7 +2236,9 @@ export class ModelAgentRuntime implements AgentRuntime {
|
||||
private getAnthropicMessages(
|
||||
request: AgentExecutionRequest
|
||||
): AnthropicApiMessage[] {
|
||||
const history = this.getConversationHistory(request)
|
||||
const history = toProviderConversationMessages(
|
||||
this.getConversationHistory(request)
|
||||
)
|
||||
const content: AnthropicApiMessage['content'] =
|
||||
request.images && request.images.length > 0
|
||||
? [
|
||||
@@ -2256,7 +2269,9 @@ export class ModelAgentRuntime implements AgentRuntime {
|
||||
request: AgentExecutionRequest,
|
||||
system: string
|
||||
): Array<Record<string, unknown>> {
|
||||
const history = this.getConversationHistory(request)
|
||||
const history = toProviderConversationMessages(
|
||||
this.getConversationHistory(request)
|
||||
)
|
||||
const userContent =
|
||||
request.images && request.images.length > 0
|
||||
? [
|
||||
@@ -2282,7 +2297,9 @@ export class ModelAgentRuntime implements AgentRuntime {
|
||||
private getResponsesInput(
|
||||
request: AgentExecutionRequest
|
||||
): Array<Record<string, unknown>> {
|
||||
const history = this.getConversationHistory(request)
|
||||
const history = toProviderConversationMessages(
|
||||
this.getConversationHistory(request)
|
||||
)
|
||||
const userContent =
|
||||
request.images && request.images.length > 0
|
||||
? [
|
||||
|
||||
Reference in New Issue
Block a user