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
drew/english
shentong.martin 5 months ago committed by shentongmartin
parent f3c86a123c
commit c396f82e82

@ -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,
}
}

@ -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,
}
}

@ -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,
}
}

@ -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,
}
}

Loading…
Cancel
Save