types

package
v1.3.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 27, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ImagePart added in v1.3.5

type ImagePart struct {
	MimeType string `json:"mimeType"` // image/png | image/jpeg | image/webp | image/gif
	Data     string `json:"data"`
}

ImagePart 是一张内嵌图片(MIME 类型 + 纯 base64 数据,无 data: 前缀)。

type LoopState

type LoopState struct {
	Input    string
	Messages []Message

	// InputImages 是本次输入携带的多模态图片(WithInputImages 注入,
	// 引擎组装 input user 消息时带上)。已入 Messages,不参与序列化。
	InputImages []ImagePart `json:"-"`

	Tools *ToolRegistry

	Iteration     int
	MaxIterations int

	// PendingToolCalls 是本轮模型响应中待执行的调用,由引擎填充。
	PendingToolCalls []ToolCall

	LastResponse *ModelResponse
	Usage        Usage

	// ForkID 非空表示这是 fork 子循环(core.Fork)的状态:引擎发出的事件
	// 带上它,hook(如 localsession)按它分流归属;主循环为空串。
	ForkID string

	// SeedLen 是 fork 子循环携带的上下文快照长度(Messages 前 SeedLen 条
	// 为 seed)。持久化层据此剥离 seed 只存分身增量;主循环为 0。
	SeedLen int

	// Metadata 供 hook 之间共享任意数据。
	// 并发契约:除 OnToolStart / OnToolEnd(跨调用并发)外,引擎串行执行
	// hook 回调;这两个回调内写 Metadata 须自行加锁。
	Metadata map[string]any

	// Emitter 由引擎注入:hook 通过它发送自定义事件到 OnEvent 回调。
	// OnToolStart / OnToolEnd 跨调用并发,其中发事件须遵守 OnEvent 的
	// 并发契约(快速返回、并发安全)。
	Emitter event.OnEvent

	// Stop 置 true 后,当前节点收尾完毕即终止 loop。
	Stop       bool
	StopReason StopReason

	// LastError 记录导致 StopError 的错误本体(endnote 等收尾 hook
	// 展示用)。error 不可序列化,不参与落盘。
	LastError error `json:"-"`

	StartedAt time.Time
	EndedAt   time.Time
}

LoopState 是贯穿整个 loop 的统一结构体,hook 可读写任意字段。

context.Context 按 Go 惯例作为独立参数传递,不放入 State。

func (*LoopState) AppendMessage

func (s *LoopState) AppendMessage(m Message)

AppendMessage 追加一条消息到历史。

func (*LoopState) EmitEvent

func (s *LoopState) EmitEvent(typ event.EventType, data any)

EmitEvent 发送自定义事件(自动补全时间戳、迭代号与 ForkID)。

事件类型建议加命名空间前缀(如 "approve.denied")。Emitter 未注入时空操作。

type Message

type Message struct {
	Role       Role       `json:"role"`
	Content    string     `json:"content"`
	ToolCalls  []ToolCall `json:"tool_calls,omitempty"`
	ToolCallID string     `json:"tool_call_id,omitempty"` // RoleTool 消息关联的调用 ID
	Err        string     `json:"err,omitempty"`          // 工具执行失败时的错误文本

	// 推理模型的思考过程(reasoning_content),仅展示与持久化回放——
	// 协议要求请求不回传,Provider 构造请求时丢弃。
	Reasoning string `json:"reasoning,omitempty"`

	// 多模态图片输入(仅 user 消息携带)。base64 内嵌消息:落盘/恢复、
	// fork 复制、trim 折叠段随消息自然流转;Provider 按各自协议转
	// content parts(chat/completions image_url / responses input_image /
	// anthropic image block),非 user 消息忽略。
	Images []ImagePart `json:"images,omitempty"`
}

Message 是消息历史的原子单元,可序列化、可直接作为下一轮历史。

type ModelChunk

type ModelChunk struct {
	ContentDelta   string
	ReasoningDelta string
	ToolCalls      []ToolCallDelta
}

ModelChunk 是流式输出的增量:正文与思考过程分开通出,工具调用增量按片透出。

type ModelRequest

type ModelRequest struct {
	Messages []Message
	Tools    []Tool
}

ModelRequest 是引擎调用 Provider 时的完整输入。

type ModelResponse

type ModelResponse struct {
	Content   string
	ToolCalls []ToolCall
	Usage     Usage
	// 推理模型的思考过程,入史到 Message.Reasoning(不回传 Provider)。
	Reasoning string
}

ModelResponse 是模型单次响应:纯文本,或附带 tool calls 触发下一轮循环。

type Role

type Role string

Role 是消息角色。

const (
	RoleSystem    Role = "system"
	RoleUser      Role = "user"
	RoleAssistant Role = "assistant"
	RoleTool      Role = "tool"
)

type StopReason

type StopReason string

StopReason 是 loop 终止原因。

const (
	StopCompleted    StopReason = "completed"
	StopMaxIteration StopReason = "max_iterations"
	StopAborted      StopReason = "aborted"
	StopError        StopReason = "error"
	StopCancelled    StopReason = "cancelled"
)

type Tool

type Tool interface {
	Name() string
	Description() string
	ArgsSchema() json.RawMessage
	Invoke(ctx context.Context, args json.RawMessage) (string, error)
}

Tool 是工具节点接口:schema 供模型发现,Invoke 执行(可并发,碰不到 state)。

func NewTool added in v1.3.0

func NewTool[A any](name, desc string, fn func(ctx context.Context, in *A) (string, error)) Tool

NewTool 从函数构造工具:A 是参数结构体,schema 由其 struct tag 反射生成—— json:"name,omitempty" 定字段名(omitempty → 非 required,默认全 required)、 desc:"…" → description、enum:"a|b|c" → string enum。支持 string / bool / number(int*、uint*、float*)/ slice / map[string]T / json.RawMessage / 嵌套 struct;不支持的类型构造期 panic(组装者错误,fail fast,优于运行期产出 畸形 schema)。properties 与 required 均按字段声明序输出——schema 是 A 的 确定函数,跨进程稳定,KV cache 前缀才可能命中(不得改用 json.Marshal(map), 其按 key 排序会打散声明序)。

required 只约束字段是否必须出现在 JSON 里,不做非零校验:允许空串的字段 (如 edit_file 的 new_text 删除语义)照常 required,值级业务校验留在 fn 内。

type ToolCall

type ToolCall struct {
	ID   string
	Name string
	Args json.RawMessage
}

ToolCall 是模型发起的一次工具调用请求。

type ToolCallDelta added in v1.3.0

type ToolCallDelta struct {
	Index     int    `json:"index"`
	ID        string `json:"id,omitempty"`
	NameDelta string `json:"nameDelta,omitempty"`
	ArgsDelta string `json:"argsDelta,omitempty"`
}

ToolCallDelta 是流式工具调用的增量分片:Index 定位同轮第几个调用 (协议侧的累积序号),各字段是本片新增量——ID 一次性给出, 名字与参数按序拼接。消费方按 Index 分桶累积。

type ToolRegistry

type ToolRegistry struct {
	// contains filtered or unexported fields
}

ToolRegistry 持有已注册工具。List 按工具名排序返回——排序是工具集的

确定函数,与注册顺序、组装路径无关(resume、重新 New、hook 注册时机变化 都不会打散),tools 序列化顺序因此跨请求稳定,前缀缓存(KV cache)才可能 命中。同名注册直接覆盖(同名 = 同一工具的新版本,幂等重注册与热加载语义)。

func NewToolRegistry

func NewToolRegistry(tools ...Tool) *ToolRegistry

NewToolRegistry 创建注册表并注册初始工具。

func (*ToolRegistry) List

func (r *ToolRegistry) List() []Tool

List 返回按工具名排序的全部工具(进请求序列化的唯一出口)。

func (*ToolRegistry) Lookup

func (r *ToolRegistry) Lookup(name string) (Tool, error)

Lookup 按名解析工具;找不到返回 error——模型幻觉调用会走到这里,

错误作为工具结果回传模型自纠,不终止 loop。

func (*ToolRegistry) Register

func (r *ToolRegistry) Register(t Tool)

Register 注册工具:经 warp 壳包装后按名存入,同名覆盖。

func (*ToolRegistry) SetWarp

func (r *ToolRegistry) SetWarp(warp func(Tool) Tool)

SetWarp 设置注册拦截:之后所有 Register 的工具都会被包装(含 hook 运行时

注入的工具,如 mcp router)。已注册的不受影响。

type ToolResult

type ToolResult struct {
	CallID  string
	Name    string
	Content string
	Err     error
}

ToolResult 是一次工具调用的执行结果(toolEnd hook 可改写后入史)。

type Usage

type Usage struct {
	PromptTokens     int
	CompletionTokens int
	// prompt 命中服务端缓存的 token 数(OpenAI cached_tokens /
	// DeepSeek prompt_cache_hit_tokens 双协议取非零)。
	CachedTokens int
}

Usage 统计单次或整轮 loop 的 token 用量。

func (*Usage) Add

func (u *Usage) Add(other Usage)

Add 累加另一份用量(多迭代、fork 分身汇总算回父循环)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL