@@ -24,9 +24,10 @@ import (
2424 "github.com/bytedance/sonic"
2525
2626 "github.com/cloudwego/eino/adk"
27+ "github.com/cloudwego/eino/adk/filesystem"
2728 "github.com/cloudwego/eino/adk/internal"
29+ filesystem2 "github.com/cloudwego/eino/adk/middlewares/filesystem"
2830 "github.com/cloudwego/eino/components/model"
29- "github.com/cloudwego/eino/components/tool"
3031 "github.com/cloudwego/eino/components/tool/utils"
3132 "github.com/cloudwego/eino/schema"
3233)
@@ -58,6 +59,10 @@ type Config struct {
5859 // MaxIteration limits the maximum number of reasoning iterations the agent can perform.
5960 MaxIteration int
6061
62+ Backend filesystem.Backend
63+ Shell filesystem.Shell
64+ StreamingShell filesystem.StreamingShell
65+
6166 // WithoutWriteTodos disables the built-in write_todos tool when set to true.
6267 WithoutWriteTodos bool
6368 // WithoutGeneralSubAgent disables the general-purpose subagent when set to true.
@@ -89,7 +94,7 @@ type Config struct {
8994// This function initializes built-in tools, creates a task tool for subagent orchestration,
9095// and returns a fully configured ChatModelAgent ready for execution.
9196func New (ctx context.Context , cfg * Config ) (adk.ResumableAgent , error ) {
92- middlewares , err := buildBuiltinAgentMiddlewares (cfg . WithoutWriteTodos )
97+ handlers , err := buildBuiltinAgentMiddlewares (ctx , cfg )
9398 if err != nil {
9499 return nil , err
95100 }
@@ -116,12 +121,13 @@ func New(ctx context.Context, cfg *Config) (adk.ResumableAgent, error) {
116121 instruction ,
117122 cfg .ToolsConfig ,
118123 cfg .MaxIteration ,
119- append (middlewares , cfg .Middlewares ... ),
124+ cfg .Middlewares ,
125+ append (handlers , cfg .Handlers ... ),
120126 )
121127 if err != nil {
122128 return nil , fmt .Errorf ("failed to new task tool: %w" , err )
123129 }
124- middlewares = append (middlewares , tt )
130+ handlers = append (handlers , tt )
125131 }
126132
127133 return adk .NewChatModelAgent (ctx , & adk.ChatModelAgentConfig {
@@ -131,8 +137,8 @@ func New(ctx context.Context, cfg *Config) (adk.ResumableAgent, error) {
131137 Model : cfg .ChatModel ,
132138 ToolsConfig : cfg .ToolsConfig ,
133139 MaxIterations : cfg .MaxIteration ,
134- Middlewares : append ( middlewares , cfg .Middlewares ... ) ,
135- Handlers : cfg .Handlers ,
140+ Middlewares : cfg .Middlewares ,
141+ Handlers : append ( handlers , cfg .Handlers ... ) ,
136142
137143 GenModelInput : genModelInput ,
138144 ModelRetryConfig : cfg .ModelRetryConfig ,
@@ -152,16 +158,29 @@ func genModelInput(ctx context.Context, instruction string, input *adk.AgentInpu
152158 return msgs , nil
153159}
154160
155- func buildBuiltinAgentMiddlewares (withoutWriteTodos bool ) ([]adk.AgentMiddleware , error ) {
156- var ms []adk.AgentMiddleware
157- if ! withoutWriteTodos {
161+ func buildBuiltinAgentMiddlewares (ctx context. Context , cfg * Config ) ([]adk.ChatModelAgentMiddleware , error ) {
162+ var ms []adk.ChatModelAgentMiddleware
163+ if ! cfg . WithoutWriteTodos {
158164 t , err := newWriteTodos ()
159165 if err != nil {
160166 return nil , err
161167 }
162168 ms = append (ms , t )
163169 }
164170
171+ if cfg .Backend != nil || cfg .Shell != nil || cfg .StreamingShell != nil {
172+ fm , err := filesystem2 .New (ctx , & filesystem2.Config {
173+ Backend : cfg .Backend ,
174+ Shell : cfg .Shell ,
175+ StreamingShell : cfg .StreamingShell ,
176+ WithoutLargeToolResultOffloading : true ,
177+ })
178+ if err != nil {
179+ return nil , err
180+ }
181+ ms = append (ms , fm )
182+ }
183+
165184 return ms , nil
166185}
167186
@@ -175,27 +194,27 @@ type writeTodosArguments struct {
175194 Todos []TODO `json:"todos"`
176195}
177196
178- func newWriteTodos () (adk.AgentMiddleware , error ) {
197+ func newWriteTodos () (adk.ChatModelAgentMiddleware , error ) {
179198 toolDesc , err := internal .SelectPrompt (internal.I18nPrompts {
180199 English : writeTodosToolDescription ,
181200 Chinese : writeTodosToolDescriptionChinese ,
182201 })
183202 if err != nil {
184- return adk. AgentMiddleware {} , err
203+ return nil , err
185204 }
186205 prompt , err := internal .SelectPrompt (internal.I18nPrompts {
187206 English : writeTodosPrompt ,
188207 Chinese : writeTodosPromptChinese ,
189208 })
190209 if err != nil {
191- return adk. AgentMiddleware {} , err
210+ return nil , err
192211 }
193212 resultMsg , err := internal .SelectPrompt (internal.I18nPrompts {
194213 English : "Updated todo list to %s" ,
195214 Chinese : "已更新待办列表为 %s" ,
196215 })
197216 if err != nil {
198- return adk. AgentMiddleware {} , err
217+ return nil , err
199218 }
200219
201220 t , err := utils .InferTool ("write_todos" , toolDesc , func (ctx context.Context , input writeTodosArguments ) (output string , err error ) {
@@ -207,11 +226,8 @@ func newWriteTodos() (adk.AgentMiddleware, error) {
207226 return fmt .Sprintf (resultMsg , todos ), nil
208227 })
209228 if err != nil {
210- return adk. AgentMiddleware {} , err
229+ return nil , err
211230 }
212231
213- return adk.AgentMiddleware {
214- AdditionalInstruction : prompt ,
215- AdditionalTools : []tool.BaseTool {t },
216- }, nil
232+ return buildAppendPromptTool (prompt , t ), nil
217233}
0 commit comments