Skip to content

Commit bd03442

Browse files
authored
🔧 #164 Make client connection pool configurable across all providers (#251)
1 parent ab244b2 commit bd03442

File tree

12 files changed

+60
-23
lines changed

12 files changed

+60
-23
lines changed

docs/docs.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,12 @@ const docTemplate = `{
373373
"clients.ClientConfig": {
374374
"type": "object",
375375
"properties": {
376+
"max_idle_connections": {
377+
"type": "integer"
378+
},
379+
"max_idle_connections_per_host": {
380+
"type": "integer"
381+
},
376382
"timeout": {
377383
"type": "string"
378384
}

docs/swagger.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,12 @@
370370
"clients.ClientConfig": {
371371
"type": "object",
372372
"properties": {
373+
"max_idle_connections": {
374+
"type": "integer"
375+
},
376+
"max_idle_connections_per_host": {
377+
"type": "integer"
378+
},
373379
"timeout": {
374380
"type": "string"
375381
}

docs/swagger.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ definitions:
126126
type: object
127127
clients.ClientConfig:
128128
properties:
129+
max_idle_connections:
130+
type: integer
131+
max_idle_connections_per_host:
132+
type: integer
129133
timeout:
130134
type: string
131135
type: object

pkg/providers/anthropic/client.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,9 @@ func NewClient(providerConfig *Config, clientConfig *clients.ClientConfig, tel *
4747
errMapper: NewErrorMapper(tel),
4848
httpClient: &http.Client{
4949
Timeout: *clientConfig.Timeout,
50-
// TODO: use values from the config
5150
Transport: &http.Transport{
52-
MaxIdleConns: 100,
53-
MaxIdleConnsPerHost: 2,
51+
MaxIdleConns: *clientConfig.MaxIdleConns,
52+
MaxIdleConnsPerHost: *clientConfig.MaxIdleConnsPerHost,
5453
},
5554
},
5655
tel: tel,

pkg/providers/azureopenai/client.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,10 @@ func NewClient(providerConfig *Config, clientConfig *clients.ClientConfig, tel *
5050
finishReasonMapper: openai.NewFinishReasonMapper(tel),
5151
errMapper: NewErrorMapper(tel),
5252
httpClient: &http.Client{
53-
// TODO: use values from the config
5453
Timeout: *clientConfig.Timeout,
5554
Transport: &http.Transport{
56-
MaxIdleConns: 100,
57-
MaxIdleConnsPerHost: 2,
55+
MaxIdleConns: *clientConfig.MaxIdleConns,
56+
MaxIdleConnsPerHost: *clientConfig.MaxIdleConnsPerHost,
5857
},
5958
},
6059
tel: tel,

pkg/providers/bedrock/client.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,9 @@ func NewClient(providerConfig *Config, clientConfig *clients.ClientConfig, tel *
5757
chatRequestTemplate: NewChatRequestFromConfig(providerConfig),
5858
httpClient: &http.Client{
5959
Timeout: *clientConfig.Timeout,
60-
// TODO: use values from the config
6160
Transport: &http.Transport{
62-
MaxIdleConns: 100,
63-
MaxIdleConnsPerHost: 2,
61+
MaxIdleConns: *clientConfig.MaxIdleConns,
62+
MaxIdleConnsPerHost: *clientConfig.MaxIdleConnsPerHost,
6463
},
6564
},
6665
telemetry: tel,

pkg/providers/clients/config.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,19 @@ package clients
33
import "time"
44

55
type ClientConfig struct {
6-
Timeout *time.Duration `yaml:"timeout,omitempty" json:"timeout" swaggertype:"primitive,string"`
6+
Timeout *time.Duration `yaml:"timeout,omitempty" json:"timeout" swaggertype:"primitive,string"`
7+
MaxIdleConns *int `yaml:"max_idle_connections,omitempty" json:"max_idle_connections" swaggertype:"primitive,integer"`
8+
MaxIdleConnsPerHost *int `yaml:"max_idle_connections_per_host,omitempty" json:"max_idle_connections_per_host" swaggertype:"primitive,integer"`
79
}
810

911
func DefaultClientConfig() *ClientConfig {
1012
defaultTimeout := 10 * time.Second
13+
maxIdleConns := 100
14+
maxIdleConnsPerHost := 2
1115

1216
return &ClientConfig{
13-
Timeout: &defaultTimeout,
17+
Timeout: &defaultTimeout,
18+
MaxIdleConns: &maxIdleConns,
19+
MaxIdleConnsPerHost: &maxIdleConnsPerHost,
1420
}
1521
}

pkg/providers/clients/config_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package clients
22

33
import (
44
"testing"
5+
"time"
56

67
"github.com/stretchr/testify/require"
78
)
@@ -11,3 +12,24 @@ func TestClientConfig_DefaultConfig(t *testing.T) {
1112

1213
require.NotEmpty(t, config.Timeout)
1314
}
15+
16+
func TestDefaultClientConfig(t *testing.T) {
17+
config := DefaultClientConfig()
18+
19+
require.NotNil(t, config, "Config must not be nil")
20+
require.NotNil(t, config.Timeout, "Timeout must not be nil")
21+
require.NotNil(t, config.MaxIdleConns, "MaxIdleConns must not be nil")
22+
require.NotNil(t, config.MaxIdleConnsPerHost, "MaxIdleConnsPerHost must not be nil")
23+
24+
// Check default timeout
25+
expectedTimeout := 10 * time.Second
26+
require.Equal(t, expectedTimeout, *config.Timeout)
27+
28+
// Check MaxIdleConns
29+
expectedMaxIdleConns := 100
30+
require.Equal(t, expectedMaxIdleConns, *config.MaxIdleConns)
31+
32+
// Check MaxIdleConnsPerHost
33+
expectedMaxIdleConnsPerHost := 2
34+
require.Equal(t, expectedMaxIdleConnsPerHost, *config.MaxIdleConnsPerHost)
35+
}

pkg/providers/cohere/client.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,9 @@ func NewClient(providerConfig *Config, clientConfig *clients.ClientConfig, tel *
4545
chatRequestTemplate: NewChatRequestFromConfig(providerConfig),
4646
httpClient: &http.Client{
4747
Timeout: *clientConfig.Timeout,
48-
// TODO: use values from the config
4948
Transport: &http.Transport{
50-
MaxIdleConns: 100,
51-
MaxIdleConnsPerHost: 2,
49+
MaxIdleConns: *clientConfig.MaxIdleConns,
50+
MaxIdleConnsPerHost: *clientConfig.MaxIdleConnsPerHost,
5251
},
5352
},
5453
errMapper: NewErrorMapper(tel),

pkg/providers/octoml/client.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,9 @@ func NewClient(providerConfig *Config, clientConfig *clients.ClientConfig, tel *
4545
errMapper: NewErrorMapper(tel),
4646
httpClient: &http.Client{
4747
Timeout: *clientConfig.Timeout,
48-
// TODO: use values from the config
4948
Transport: &http.Transport{
50-
MaxIdleConns: 100,
51-
MaxIdleConnsPerHost: 2,
49+
MaxIdleConns: *clientConfig.MaxIdleConns,
50+
MaxIdleConnsPerHost: *clientConfig.MaxIdleConnsPerHost,
5251
},
5352
},
5453
telemetry: tel,

0 commit comments

Comments
 (0)