From c396f82e824908e2ac271c39b49888367c1ff9f4 Mon Sep 17 00:00:00 2001 From: "shentong.martin" Date: Thu, 25 Dec 2025 15:59:57 +0800 Subject: [PATCH] feat: make rate limit delay configurable via RATE_LIMIT_DELAY_MS env var - Add getRateLimitDelay() function to read delay from environment - When RATE_LIMIT_DELAY_MS is not set or 0, use original model without wrapper - Remove debug print statements from rateLimitedModel Change-Id: I491d061b90530a84976e26952c7245f821553d1c --- adk/human-in-the-loop/5_supervisor/agent.go | 22 +++++++++++++++--- .../6_plan-execute-replan/agent.go | 22 +++++++++++++++--- adk/human-in-the-loop/7_deep-agents/agent.go | 23 +++++++++++++++---- .../8_supervisor-plan-execute/agent.go | 20 +++++++++++++++- 4 files changed, 76 insertions(+), 11 deletions(-) diff --git a/adk/human-in-the-loop/5_supervisor/agent.go b/adk/human-in-the-loop/5_supervisor/agent.go index a2526c8..2adc7ae 100644 --- a/adk/human-in-the-loop/5_supervisor/agent.go +++ b/adk/human-in-the-loop/5_supervisor/agent.go @@ -19,6 +19,8 @@ package main import ( "context" "fmt" + "os" + "strconv" "time" "github.com/cloudwego/eino/adk" @@ -47,21 +49,35 @@ func (r *rateLimitedModel) WithTools(tools []*schema.ToolInfo) (model.ToolCallin } func (r *rateLimitedModel) Generate(ctx context.Context, input []*schema.Message, opts ...model.Option) (*schema.Message, error) { - fmt.Println("enter rateLimitedModel.generate") time.Sleep(r.delay) return r.m.Generate(ctx, input, opts...) } func (r *rateLimitedModel) Stream(ctx context.Context, input []*schema.Message, opts ...model.Option) (*schema.StreamReader[*schema.Message], error) { - fmt.Println("enter rateLimitedModel.stream") time.Sleep(r.delay) return r.m.Stream(ctx, input, opts...) } +func getRateLimitDelay() time.Duration { + delayMs := os.Getenv("RATE_LIMIT_DELAY_MS") + if delayMs == "" { + return 0 + } + ms, err := strconv.Atoi(delayMs) + if err != nil { + return 0 + } + return time.Duration(ms) * time.Millisecond +} + func newRateLimitedModel() model.ToolCallingChatModel { + delay := getRateLimitDelay() + if delay == 0 { + return commonModel.NewChatModel() + } return &rateLimitedModel{ m: commonModel.NewChatModel(), - delay: 300 * time.Millisecond, + delay: delay, } } diff --git a/adk/human-in-the-loop/6_plan-execute-replan/agent.go b/adk/human-in-the-loop/6_plan-execute-replan/agent.go index 6ba991f..5e6de56 100644 --- a/adk/human-in-the-loop/6_plan-execute-replan/agent.go +++ b/adk/human-in-the-loop/6_plan-execute-replan/agent.go @@ -19,6 +19,8 @@ package main import ( "context" "fmt" + "os" + "strconv" "strings" "time" @@ -46,21 +48,35 @@ func (r *rateLimitedModel) WithTools(tools []*schema.ToolInfo) (model.ToolCallin } func (r *rateLimitedModel) Generate(ctx context.Context, input []*schema.Message, opts ...model.Option) (*schema.Message, error) { - fmt.Println("enter rateLimitedModel.generate") time.Sleep(r.delay) return r.m.Generate(ctx, input, opts...) } func (r *rateLimitedModel) Stream(ctx context.Context, input []*schema.Message, opts ...model.Option) (*schema.StreamReader[*schema.Message], error) { - fmt.Println("enter rateLimitedModel.stream") time.Sleep(r.delay) return r.m.Stream(ctx, input, opts...) } +func getRateLimitDelay() time.Duration { + delayMs := os.Getenv("RATE_LIMIT_DELAY_MS") + if delayMs == "" { + return 0 + } + ms, err := strconv.Atoi(delayMs) + if err != nil { + return 0 + } + return time.Duration(ms) * time.Millisecond +} + func newRateLimitedModel() model.ToolCallingChatModel { + delay := getRateLimitDelay() + if delay == 0 { + return commonModel.NewChatModel() + } return &rateLimitedModel{ m: commonModel.NewChatModel(), - delay: 300 * time.Millisecond, + delay: delay, } } diff --git a/adk/human-in-the-loop/7_deep-agents/agent.go b/adk/human-in-the-loop/7_deep-agents/agent.go index 15447af..50f8d21 100644 --- a/adk/human-in-the-loop/7_deep-agents/agent.go +++ b/adk/human-in-the-loop/7_deep-agents/agent.go @@ -18,7 +18,8 @@ package main import ( "context" - "fmt" + "os" + "strconv" "time" "github.com/cloudwego/eino/adk" @@ -47,21 +48,35 @@ func (r *rateLimitedModel) WithTools(tools []*schema.ToolInfo) (model.ToolCallin } func (r *rateLimitedModel) Generate(ctx context.Context, input []*schema.Message, opts ...model.Option) (*schema.Message, error) { - fmt.Println("enter rateLimitedModel.generate") time.Sleep(r.delay) return r.m.Generate(ctx, input, opts...) } func (r *rateLimitedModel) Stream(ctx context.Context, input []*schema.Message, opts ...model.Option) (*schema.StreamReader[*schema.Message], error) { - fmt.Println("enter rateLimitedModel.stream") time.Sleep(r.delay) return r.m.Stream(ctx, input, opts...) } +func getRateLimitDelay() time.Duration { + delayMs := os.Getenv("RATE_LIMIT_DELAY_MS") + if delayMs == "" { + return 0 + } + ms, err := strconv.Atoi(delayMs) + if err != nil { + return 0 + } + return time.Duration(ms) * time.Millisecond +} + func newRateLimitedModel() model.ToolCallingChatModel { + delay := getRateLimitDelay() + if delay == 0 { + return commonModel.NewChatModel() + } return &rateLimitedModel{ m: commonModel.NewChatModel(), - delay: time.Minute, + delay: delay, } } diff --git a/adk/human-in-the-loop/8_supervisor-plan-execute/agent.go b/adk/human-in-the-loop/8_supervisor-plan-execute/agent.go index c05e001..046cfb1 100644 --- a/adk/human-in-the-loop/8_supervisor-plan-execute/agent.go +++ b/adk/human-in-the-loop/8_supervisor-plan-execute/agent.go @@ -19,6 +19,8 @@ package main import ( "context" "fmt" + "os" + "strconv" "strings" "time" @@ -56,10 +58,26 @@ func (r *rateLimitedModel) Stream(ctx context.Context, input []*schema.Message, return r.m.Stream(ctx, input, opts...) } +func getRateLimitDelay() time.Duration { + delayMs := os.Getenv("RATE_LIMIT_DELAY_MS") + if delayMs == "" { + return 0 + } + ms, err := strconv.Atoi(delayMs) + if err != nil { + return 0 + } + return time.Duration(ms) * time.Millisecond +} + func newRateLimitedModel() model.ToolCallingChatModel { + delay := getRateLimitDelay() + if delay == 0 { + return commonModel.NewChatModel() + } return &rateLimitedModel{ m: commonModel.NewChatModel(), - delay: time.Minute, + delay: delay, } }