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