From 0db05ce807c5cab7a133d16852d628df7ff25001 Mon Sep 17 00:00:00 2001 From: lipandeng Date: Wed, 5 Nov 2025 15:49:34 +0800 Subject: [PATCH] feat: define agent_middleware --- .gitignore | 2 ++ adk/agent_middleware.go | 71 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 adk/agent_middleware.go diff --git a/.gitignore b/.gitignore index 3ba8a48e..a771e5c5 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,8 @@ output/* # Vscode files .vscode +/CLAUDE.md + /patches /vendor diff --git a/adk/agent_middleware.go b/adk/agent_middleware.go new file mode 100644 index 00000000..6302903e --- /dev/null +++ b/adk/agent_middleware.go @@ -0,0 +1,71 @@ +package adk + +import ( + "context" + + "github.com/cloudwego/eino/components/tool" + "github.com/cloudwego/eino/schema" +) + +type AgentState struct { + SystemPrompt string + // Messages are the messages to be sent to the model. + // excluding system prompt + Messages []Message + Tools []tool.BaseTool + Choice *schema.ToolChoice + + Extra map[string]any +} + +type ToolRequest struct { + State *AgentState + ToolCall schema.ToolCall +} + +type BeforeModel func(ctx context.Context, origin *AgentState) (changed *AgentState, err error) +type AfterModel func(ctx context.Context, resp *AgentState) (changed *AgentState, err error) +type ModelHandler func(ctx context.Context, req *AgentState) (msg Message, err error) +type ModelMW func(ctx context.Context, req *AgentState, next ModelHandler) (msg Message, err error) + +type ToolHandler func(ctx context.Context, req *ToolRequest) (result string, err error) + +type ToolMW func(ctx context.Context, req *ToolRequest, next ToolHandler) (result string, err error) + +type AgentMiddleware interface { + MiddlewareName() string +} + +type AgentMiddlewareBeforeModel interface { + AgentMiddleware + BeforeModel +} + +type AgentMiddlewareAfterModel interface { + AgentMiddleware + AfterModel +} + +type AgentMiddlewareModelMW interface { + AgentMiddleware + ModelMW +} + +type AgentMiddlewareToolMW interface { + AgentMiddleware + ToolMW +} + +type AgentMiddleware1 interface { + BeforeModel + AfterModel + ModelMW + ToolMW +} + +type AgentMiddleware2 struct { + BeforeModel BeforeModel + AfterModel AfterModel + WrapModelHandler ModelMW + WrapToolHandler ToolMW +}