主人 2026-10-03 拍板「注释一律中文」;本模块按长期分批协议(一个模块一次派工)执行。 注释行数 1329 → 1329 逐行 1:1(含中文 33 → 1304);行尾注释 5 条一并译。 校验:机械校验(非注释改动行)= 空;独立 Go AST 程序(剥注释复渲)证明 44/44 文件代码全等; 全树 go test ./... 58 包 ok / 0 FAIL;交叉编译绿。 gofmt:capacity_loop_test.go / flow.go 改动前即未格式化,按铁律保留原样未动。
50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
package loop
|
|
|
|
import (
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/agent"
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/model"
|
|
)
|
|
|
|
// appendToolCallHistory 按调用顺序渲染 assistant 工具调用轮,其后是每个
|
|
// 工具结果。当每个调用都带 provider id(原生
|
|
// Anthropic tool_use / OpenAI tool_calls)时,该轮以原生
|
|
// tool_use + tool_result 块发出,使 provider 能把每个结果关联到其
|
|
// 调用;不带 id 的批次(旧式 JSON 信封约定)保持
|
|
// 纯 RoleTool 文本回灌形态。
|
|
func appendToolCallHistory(messages []model.Message, calls []agent.ToolCall, outcomes []ToolOutcome) []model.Message {
|
|
native := nativeModelToolCalls(calls)
|
|
if len(native) == 0 {
|
|
for i := range calls {
|
|
messages = append(messages, toolResultMessage(calls[i], outcomes[i]))
|
|
}
|
|
return messages
|
|
}
|
|
messages = append(messages, model.AssistantToolCallMessage(native))
|
|
for i := range calls {
|
|
isError := outcomes[i].Err != nil || outcomes[i].Skipped
|
|
messages = append(messages, model.ToolResultMessage(calls[i].ID, toolResultText(calls[i], outcomes[i]), isError))
|
|
}
|
|
return messages
|
|
}
|
|
|
|
// nativeModelToolCalls 仅在每个调用都带 provider id 时把批次转换为
|
|
// model.ToolCall;不带 id 的批次(旧式 JSON 信封
|
|
// 约定)返回 nil,使调用方保持纯文本回灌形态。
|
|
func nativeModelToolCalls(calls []agent.ToolCall) []model.ToolCall {
|
|
if len(calls) == 0 {
|
|
return nil
|
|
}
|
|
out := make([]model.ToolCall, 0, len(calls))
|
|
for _, c := range calls {
|
|
if c.ID == "" {
|
|
return nil
|
|
}
|
|
args := c.Args
|
|
if args == nil {
|
|
args = map[string]any{}
|
|
}
|
|
out = append(out, model.ToolCall{ID: c.ID, Name: c.Name, Args: args})
|
|
}
|
|
return out
|
|
}
|