refactor(runtime): streamline request handling and improve tool preparation methods

This commit is contained in:
mlogclub
2026-04-19 11:19:51 +08:00
parent 92712d882a
commit 680793f527
9 changed files with 184 additions and 128 deletions
@@ -1,5 +1,7 @@
package runtime
import "cs-agent/internal/ai/runtime/registry"
func newPrepareService(catalog *toolCatalog) *prepareService {
return &prepareService{catalog: catalog}
}
@@ -8,30 +10,16 @@ type prepareService struct {
catalog *toolCatalog
}
func (s *prepareService) prepareToolsForRun(req *Request) error {
if req == nil || req.ToolSet != nil || s.catalog == nil {
return nil
func (s *prepareService) prepareToolsForRun(req Request) (*registry.ToolSet, error) {
if req.ToolSet != nil {
return req.ToolSet, nil
}
toolSet, err := s.catalog.resolveForRun(req)
if err != nil {
return err
}
if toolSet != nil {
req.ToolSet = toolSet
}
return nil
return s.catalog.resolveForRun(req)
}
func (s *prepareService) prepareToolsForResume(req *ResumeRequest) error {
if req == nil || req.ToolSet != nil || s.catalog == nil {
return nil
func (s *prepareService) prepareToolsForResume(req ResumeRequest) (*registry.ToolSet, error) {
if req.ToolSet != nil {
return req.ToolSet, nil
}
toolSet, err := s.catalog.resolveForResume(req)
if err != nil {
return err
}
if toolSet != nil {
req.ToolSet = toolSet
}
return nil
return s.catalog.resolveForResume(req)
}
+6 -8
View File
@@ -23,13 +23,12 @@ func NewService() *Service {
}
func (s *Service) Run(ctx context.Context, req Request) (*Summary, error) {
if s == nil || s.runtime == nil || s.prepare == nil {
return nil, nil
}
req.UserMessage.Content = utils.BuildRuntimeMessageText(req.UserMessage.MessageType, req.UserMessage.Content)
if err := s.prepare.prepareToolsForRun(&req); err != nil {
toolSet, err := s.prepare.prepareToolsForRun(req)
if err != nil {
return nil, err
}
req.ToolSet = toolSet
summary, err := s.runtime.ExecuteRun(ctx, executor.RunInput{
Conversation: req.Conversation,
UserMessage: req.UserMessage,
@@ -45,12 +44,11 @@ func (s *Service) Run(ctx context.Context, req Request) (*Summary, error) {
}
func (s *Service) Resume(ctx context.Context, req ResumeRequest) (*Summary, error) {
if s == nil || s.runtime == nil || s.prepare == nil {
return nil, nil
}
if err := s.prepare.prepareToolsForResume(&req); err != nil {
toolSet, err := s.prepare.prepareToolsForResume(req)
if err != nil {
return nil, err
}
req.ToolSet = toolSet
summary, err := s.runtime.ExecuteResume(ctx, executor.ResumeInput{
Conversation: req.Conversation,
AIAgent: req.AIAgent,
@@ -32,10 +32,7 @@ func buildRuntimeStaticTools() []registry.Tool {
return ret
}
func (c *toolCatalog) resolveForRun(req *Request) (*registry.ToolSet, error) {
if req == nil || req.ToolSet != nil || c == nil || c.registry == nil {
return nil, nil
}
func (c *toolCatalog) resolveForRun(req Request) (*registry.ToolSet, error) {
return c.registry.Resolve(registry.Context{
Conversation: req.Conversation,
AIAgent: req.AIAgent,
@@ -45,10 +42,7 @@ func (c *toolCatalog) resolveForRun(req *Request) (*registry.ToolSet, error) {
})
}
func (c *toolCatalog) resolveForResume(req *ResumeRequest) (*registry.ToolSet, error) {
if req == nil || req.ToolSet != nil || c == nil || c.registry == nil {
return nil, nil
}
func (c *toolCatalog) resolveForResume(req ResumeRequest) (*registry.ToolSet, error) {
return c.registry.Resolve(registry.Context{
Conversation: req.Conversation,
AIAgent: req.AIAgent,