diff --git a/pkg/providers/clients/config.go b/pkg/clients/config.go similarity index 100% rename from pkg/providers/clients/config.go rename to pkg/clients/config.go diff --git a/pkg/providers/clients/config_test.go b/pkg/clients/config_test.go similarity index 100% rename from pkg/providers/clients/config_test.go rename to pkg/clients/config_test.go diff --git a/pkg/providers/clients/errors.go b/pkg/clients/errors.go similarity index 100% rename from pkg/providers/clients/errors.go rename to pkg/clients/errors.go diff --git a/pkg/providers/clients/errors_test.go b/pkg/clients/errors_test.go similarity index 100% rename from pkg/providers/clients/errors_test.go rename to pkg/clients/errors_test.go diff --git a/pkg/providers/clients/sse.go b/pkg/clients/sse.go similarity index 100% rename from pkg/providers/clients/sse.go rename to pkg/clients/sse.go diff --git a/pkg/providers/clients/sse_test.go b/pkg/clients/sse_test.go similarity index 100% rename from pkg/providers/clients/sse_test.go rename to pkg/clients/sse_test.go diff --git a/pkg/providers/clients/stream.go b/pkg/clients/stream.go similarity index 100% rename from pkg/providers/clients/stream.go rename to pkg/clients/stream.go diff --git a/pkg/providers/anthropic/chat.go b/pkg/providers/anthropic/chat.go index 80b45f2b..03f7591f 100644 --- a/pkg/providers/anthropic/chat.go +++ b/pkg/providers/anthropic/chat.go @@ -5,12 +5,11 @@ import ( "context" "encoding/json" "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "go.uber.org/zap" ) diff --git a/pkg/providers/anthropic/chat_stream.go b/pkg/providers/anthropic/chat_stream.go index 5a6f2112..6040d2c1 100644 --- a/pkg/providers/anthropic/chat_stream.go +++ b/pkg/providers/anthropic/chat_stream.go @@ -2,8 +2,7 @@ package anthropic import ( "context" - - "github.com/EinStack/glide/pkg/providers/clients" + clients2 "github.com/EinStack/glide/pkg/clients" "github.com/EinStack/glide/pkg/api/schemas" ) @@ -12,6 +11,6 @@ func (c *Client) SupportChatStream() bool { return false } -func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients.ChatStream, error) { - return nil, clients.ErrChatStreamNotImplemented +func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients2.ChatStream, error) { + return nil, clients2.ErrChatStreamNotImplemented } diff --git a/pkg/providers/anthropic/client.go b/pkg/providers/anthropic/client.go index bb34fe07..11da9173 100644 --- a/pkg/providers/anthropic/client.go +++ b/pkg/providers/anthropic/client.go @@ -1,13 +1,12 @@ package anthropic import ( + "github.com/EinStack/glide/pkg/clients" "net/http" "net/url" "time" "github.com/EinStack/glide/pkg/telemetry" - - "github.com/EinStack/glide/pkg/providers/clients" ) const ( diff --git a/pkg/providers/anthropic/client_test.go b/pkg/providers/anthropic/client_test.go index b0c11f36..75be00f1 100644 --- a/pkg/providers/anthropic/client_test.go +++ b/pkg/providers/anthropic/client_test.go @@ -3,6 +3,7 @@ package anthropic import ( "context" "encoding/json" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -10,8 +11,6 @@ import ( "path/filepath" "testing" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "github.com/EinStack/glide/pkg/telemetry" diff --git a/pkg/providers/anthropic/errors.go b/pkg/providers/anthropic/errors.go index 126de68d..222b1921 100644 --- a/pkg/providers/anthropic/errors.go +++ b/pkg/providers/anthropic/errors.go @@ -2,13 +2,13 @@ package anthropic import ( "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" "go.uber.org/zap" ) diff --git a/pkg/providers/azureopenai/chat.go b/pkg/providers/azureopenai/chat.go index 22005fa3..c3c73656 100644 --- a/pkg/providers/azureopenai/chat.go +++ b/pkg/providers/azureopenai/chat.go @@ -5,11 +5,10 @@ import ( "context" "encoding/json" "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/providers/openai" "github.com/EinStack/glide/pkg/api/schemas" diff --git a/pkg/providers/azureopenai/chat_stream.go b/pkg/providers/azureopenai/chat_stream.go index 8e73a556..bf9bd215 100644 --- a/pkg/providers/azureopenai/chat_stream.go +++ b/pkg/providers/azureopenai/chat_stream.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + clients2 "github.com/EinStack/glide/pkg/clients" "io" "net/http" @@ -12,7 +13,6 @@ import ( "github.com/EinStack/glide/pkg/providers/openai" - "github.com/EinStack/glide/pkg/providers/clients" "github.com/r3labs/sse/v2" "go.uber.org/zap" @@ -82,7 +82,7 @@ func (s *ChatStream) Recv() (*schemas.ChatStreamChunk, error) { // if err is io.EOF, this still means that the stream is interrupted unexpectedly // because the normal stream termination is done via finding out streamDoneMarker - return nil, clients.ErrProviderUnavailable + return nil, clients2.ErrProviderUnavailable } s.tel.L().Debug( @@ -91,7 +91,7 @@ func (s *ChatStream) Recv() (*schemas.ChatStreamChunk, error) { zap.ByteString("rawChunk", rawEvent), ) - event, err := clients.ParseSSEvent(rawEvent) + event, err := clients2.ParseSSEvent(rawEvent) if bytes.Equal(event.Data, openai.StreamDoneMarker) { s.tel.L().Info( @@ -155,7 +155,7 @@ func (c *Client) SupportChatStream() bool { return true } -func (c *Client) ChatStream(ctx context.Context, params *schemas.ChatParams) (clients.ChatStream, error) { +func (c *Client) ChatStream(ctx context.Context, params *schemas.ChatParams) (clients2.ChatStream, error) { // Create a new chat request httpRequest, err := c.makeStreamReq(ctx, params) if err != nil { diff --git a/pkg/providers/azureopenai/chat_stream_test.go b/pkg/providers/azureopenai/chat_stream_test.go index 5aade1f5..49d792d8 100644 --- a/pkg/providers/azureopenai/chat_stream_test.go +++ b/pkg/providers/azureopenai/chat_stream_test.go @@ -3,6 +3,7 @@ package azureopenai import ( "context" "encoding/json" + clients2 "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -14,14 +15,12 @@ import ( "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/stretchr/testify/require" ) func TestAzureOpenAIClient_ChatStreamSupported(t *testing.T) { providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() client, err := NewClient(providerCfg, clientCfg, telemetry.NewTelemetryMock()) require.NoError(t, err) @@ -64,7 +63,7 @@ func TestAzureOpenAIClient_ChatStreamRequest(t *testing.T) { ctx := context.Background() providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() providerCfg.BaseURL = AzureopenAIServer.URL @@ -132,7 +131,7 @@ func TestAzureOpenAIClient_ChatStreamRequestInterrupted(t *testing.T) { ctx := context.Background() providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() providerCfg.BaseURL = openAIServer.URL @@ -153,7 +152,7 @@ func TestAzureOpenAIClient_ChatStreamRequestInterrupted(t *testing.T) { for { chunk, err := stream.Recv() if err != nil { - require.ErrorIs(t, err, clients.ErrProviderUnavailable) + require.ErrorIs(t, err, clients2.ErrProviderUnavailable) return } diff --git a/pkg/providers/azureopenai/client.go b/pkg/providers/azureopenai/client.go index 0f594805..c1399307 100644 --- a/pkg/providers/azureopenai/client.go +++ b/pkg/providers/azureopenai/client.go @@ -2,14 +2,13 @@ package azureopenai import ( "fmt" + "github.com/EinStack/glide/pkg/clients" "net/http" "time" "github.com/EinStack/glide/pkg/providers/openai" "github.com/EinStack/glide/pkg/telemetry" - - "github.com/EinStack/glide/pkg/providers/clients" ) const ( diff --git a/pkg/providers/azureopenai/client_test.go b/pkg/providers/azureopenai/client_test.go index 1700bca0..b92c9142 100644 --- a/pkg/providers/azureopenai/client_test.go +++ b/pkg/providers/azureopenai/client_test.go @@ -3,6 +3,7 @@ package azureopenai import ( "context" "encoding/json" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -10,8 +11,6 @@ import ( "path/filepath" "testing" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "github.com/EinStack/glide/pkg/telemetry" diff --git a/pkg/providers/azureopenai/errors.go b/pkg/providers/azureopenai/errors.go index 6a30e989..b7bb4e14 100644 --- a/pkg/providers/azureopenai/errors.go +++ b/pkg/providers/azureopenai/errors.go @@ -2,13 +2,13 @@ package azureopenai import ( "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" "go.uber.org/zap" ) diff --git a/pkg/providers/bedrock/chat_stream.go b/pkg/providers/bedrock/chat_stream.go index bb07da7d..99f3c8d1 100644 --- a/pkg/providers/bedrock/chat_stream.go +++ b/pkg/providers/bedrock/chat_stream.go @@ -2,8 +2,7 @@ package bedrock import ( "context" - - "github.com/EinStack/glide/pkg/providers/clients" + clients2 "github.com/EinStack/glide/pkg/clients" "github.com/EinStack/glide/pkg/api/schemas" ) @@ -12,6 +11,6 @@ func (c *Client) SupportChatStream() bool { return false } -func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients.ChatStream, error) { - return nil, clients.ErrChatStreamNotImplemented +func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients2.ChatStream, error) { + return nil, clients2.ErrChatStreamNotImplemented } diff --git a/pkg/providers/bedrock/client.go b/pkg/providers/bedrock/client.go index 0567b9fc..5385691d 100644 --- a/pkg/providers/bedrock/client.go +++ b/pkg/providers/bedrock/client.go @@ -3,14 +3,13 @@ package bedrock import ( "context" "errors" + "github.com/EinStack/glide/pkg/clients" "net/http" "net/url" "time" "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" diff --git a/pkg/providers/bedrock/client_test.go b/pkg/providers/bedrock/client_test.go index cdae1f68..957a754d 100644 --- a/pkg/providers/bedrock/client_test.go +++ b/pkg/providers/bedrock/client_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -11,8 +12,6 @@ import ( "path/filepath" "testing" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "github.com/EinStack/glide/pkg/telemetry" diff --git a/pkg/providers/cohere/chat.go b/pkg/providers/cohere/chat.go index ddf75680..12ec6206 100644 --- a/pkg/providers/cohere/chat.go +++ b/pkg/providers/cohere/chat.go @@ -5,12 +5,11 @@ import ( "context" "encoding/json" "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "go.uber.org/zap" diff --git a/pkg/providers/cohere/chat_stream.go b/pkg/providers/cohere/chat_stream.go index 1d8ed243..8fb670a3 100644 --- a/pkg/providers/cohere/chat_stream.go +++ b/pkg/providers/cohere/chat_stream.go @@ -5,13 +5,12 @@ import ( "context" "encoding/json" "fmt" + clients2 "github.com/EinStack/glide/pkg/clients" "io" "net/http" "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" - "go.uber.org/zap" "github.com/EinStack/glide/pkg/api/schemas" @@ -96,7 +95,7 @@ func (s *ChatStream) Recv() (*schemas.ChatStreamChunk, error) { // if io.EOF occurred in the middle of the stream, then the stream was interrupted - return nil, clients.ErrProviderUnavailable + return nil, clients2.ErrProviderUnavailable } s.tel.L().Debug( @@ -178,7 +177,7 @@ func (c *Client) SupportChatStream() bool { return true } -func (c *Client) ChatStream(ctx context.Context, params *schemas.ChatParams) (clients.ChatStream, error) { +func (c *Client) ChatStream(ctx context.Context, params *schemas.ChatParams) (clients2.ChatStream, error) { // Create a new chat request httpRequest, err := c.makeStreamReq(ctx, params) if err != nil { diff --git a/pkg/providers/cohere/chat_stream_test.go b/pkg/providers/cohere/chat_stream_test.go index 7deb5b88..3d9410be 100644 --- a/pkg/providers/cohere/chat_stream_test.go +++ b/pkg/providers/cohere/chat_stream_test.go @@ -3,6 +3,7 @@ package cohere import ( "context" "encoding/json" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -14,8 +15,6 @@ import ( "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/stretchr/testify/require" ) diff --git a/pkg/providers/cohere/client.go b/pkg/providers/cohere/client.go index c13ff64b..c8a00b7f 100644 --- a/pkg/providers/cohere/client.go +++ b/pkg/providers/cohere/client.go @@ -1,13 +1,12 @@ package cohere import ( + "github.com/EinStack/glide/pkg/clients" "net/http" "net/url" "time" "github.com/EinStack/glide/pkg/telemetry" - - "github.com/EinStack/glide/pkg/providers/clients" ) const ( diff --git a/pkg/providers/cohere/client_test.go b/pkg/providers/cohere/client_test.go index 2e5ab487..959de556 100644 --- a/pkg/providers/cohere/client_test.go +++ b/pkg/providers/cohere/client_test.go @@ -4,6 +4,7 @@ package cohere import ( "context" "encoding/json" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -15,8 +16,6 @@ import ( "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/stretchr/testify/require" ) diff --git a/pkg/providers/cohere/errors.go b/pkg/providers/cohere/errors.go index 118ef719..bac434ff 100644 --- a/pkg/providers/cohere/errors.go +++ b/pkg/providers/cohere/errors.go @@ -2,13 +2,13 @@ package cohere import ( "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" "go.uber.org/zap" ) diff --git a/pkg/providers/config.go b/pkg/providers/config.go index 206be273..e656822c 100644 --- a/pkg/providers/config.go +++ b/pkg/providers/config.go @@ -3,17 +3,15 @@ package providers import ( "errors" "fmt" + "github.com/EinStack/glide/pkg/clients" + "github.com/EinStack/glide/pkg/resiliency/health" "github.com/EinStack/glide/pkg/routers/latency" "github.com/EinStack/glide/pkg/providers/ollama" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/providers/bedrock" - "github.com/EinStack/glide/pkg/routers/health" - "github.com/EinStack/glide/pkg/providers/openai" "github.com/EinStack/glide/pkg/telemetry" diff --git a/pkg/providers/lang.go b/pkg/providers/lang.go index d2a6aa06..4e16b979 100644 --- a/pkg/providers/lang.go +++ b/pkg/providers/lang.go @@ -2,17 +2,15 @@ package providers import ( "context" + "github.com/EinStack/glide/pkg/clients" + health2 "github.com/EinStack/glide/pkg/resiliency/health" "io" "time" "github.com/EinStack/glide/pkg/config/fields" - "github.com/EinStack/glide/pkg/routers/health" - "github.com/EinStack/glide/pkg/routers/latency" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" ) @@ -42,17 +40,17 @@ type LanguageModel struct { modelID string weight int client LangProvider - healthTracker *health.Tracker + healthTracker *health2.Tracker chatLatency *latency.MovingAverage chatStreamLatency *latency.MovingAverage latencyUpdateInterval *fields.Duration } -func NewLangModel(modelID string, client LangProvider, budget *health.ErrorBudget, latencyConfig latency.Config, weight int) *LanguageModel { +func NewLangModel(modelID string, client LangProvider, budget *health2.ErrorBudget, latencyConfig latency.Config, weight int) *LanguageModel { return &LanguageModel{ modelID: modelID, client: client, - healthTracker: health.NewTracker(budget), + healthTracker: health2.NewTracker(budget), chatLatency: latency.NewMovingAverage(latencyConfig.Decay, latencyConfig.WarmupSamples), chatStreamLatency: latency.NewMovingAverage(latencyConfig.Decay, latencyConfig.WarmupSamples), latencyUpdateInterval: latencyConfig.UpdateInterval, diff --git a/pkg/providers/octoml/chat_stream.go b/pkg/providers/octoml/chat_stream.go index d0e33420..999612bc 100644 --- a/pkg/providers/octoml/chat_stream.go +++ b/pkg/providers/octoml/chat_stream.go @@ -2,8 +2,7 @@ package octoml import ( "context" - - "github.com/EinStack/glide/pkg/providers/clients" + clients2 "github.com/EinStack/glide/pkg/clients" "github.com/EinStack/glide/pkg/api/schemas" ) @@ -12,6 +11,6 @@ func (c *Client) SupportChatStream() bool { return false } -func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients.ChatStream, error) { - return nil, clients.ErrChatStreamNotImplemented +func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients2.ChatStream, error) { + return nil, clients2.ErrChatStreamNotImplemented } diff --git a/pkg/providers/octoml/client.go b/pkg/providers/octoml/client.go index 07f889bb..11e3b269 100644 --- a/pkg/providers/octoml/client.go +++ b/pkg/providers/octoml/client.go @@ -2,13 +2,12 @@ package octoml import ( "errors" + "github.com/EinStack/glide/pkg/clients" "net/http" "net/url" "time" "github.com/EinStack/glide/pkg/telemetry" - - "github.com/EinStack/glide/pkg/providers/clients" ) const ( diff --git a/pkg/providers/octoml/client_test.go b/pkg/providers/octoml/client_test.go index f35de1f7..485d0474 100644 --- a/pkg/providers/octoml/client_test.go +++ b/pkg/providers/octoml/client_test.go @@ -3,6 +3,7 @@ package octoml import ( "context" "encoding/json" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -12,8 +13,6 @@ import ( "github.com/EinStack/glide/pkg/api/schemas" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/telemetry" "github.com/stretchr/testify/require" diff --git a/pkg/providers/octoml/errors.go b/pkg/providers/octoml/errors.go index 97f16840..9f446f67 100644 --- a/pkg/providers/octoml/errors.go +++ b/pkg/providers/octoml/errors.go @@ -2,13 +2,13 @@ package octoml import ( "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" "go.uber.org/zap" ) diff --git a/pkg/providers/ollama/chat.go b/pkg/providers/ollama/chat.go index b93f5b10..87acef9b 100644 --- a/pkg/providers/ollama/chat.go +++ b/pkg/providers/ollama/chat.go @@ -5,12 +5,11 @@ import ( "context" "encoding/json" "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/google/uuid" "github.com/EinStack/glide/pkg/api/schemas" diff --git a/pkg/providers/ollama/chat_stream.go b/pkg/providers/ollama/chat_stream.go index 31075ca1..a5a265d4 100644 --- a/pkg/providers/ollama/chat_stream.go +++ b/pkg/providers/ollama/chat_stream.go @@ -2,8 +2,7 @@ package ollama import ( "context" - - "github.com/EinStack/glide/pkg/providers/clients" + clients2 "github.com/EinStack/glide/pkg/clients" "github.com/EinStack/glide/pkg/api/schemas" ) @@ -12,6 +11,6 @@ func (c *Client) SupportChatStream() bool { return false } -func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients.ChatStream, error) { - return nil, clients.ErrChatStreamNotImplemented +func (c *Client) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients2.ChatStream, error) { + return nil, clients2.ErrChatStreamNotImplemented } diff --git a/pkg/providers/ollama/client.go b/pkg/providers/ollama/client.go index 5a61898e..d54e43ed 100644 --- a/pkg/providers/ollama/client.go +++ b/pkg/providers/ollama/client.go @@ -1,13 +1,12 @@ package ollama import ( + "github.com/EinStack/glide/pkg/clients" "net/http" "net/url" "time" "github.com/EinStack/glide/pkg/telemetry" - - "github.com/EinStack/glide/pkg/providers/clients" ) const ( diff --git a/pkg/providers/ollama/client_test.go b/pkg/providers/ollama/client_test.go index e6c584cf..61958fa9 100644 --- a/pkg/providers/ollama/client_test.go +++ b/pkg/providers/ollama/client_test.go @@ -3,6 +3,7 @@ package ollama import ( "context" "encoding/json" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -10,8 +11,6 @@ import ( "path/filepath" "testing" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "github.com/EinStack/glide/pkg/telemetry" diff --git a/pkg/providers/openai/chat.go b/pkg/providers/openai/chat.go index 519d7d43..efc5edcf 100644 --- a/pkg/providers/openai/chat.go +++ b/pkg/providers/openai/chat.go @@ -5,11 +5,10 @@ import ( "context" "encoding/json" "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "go.uber.org/zap" ) diff --git a/pkg/providers/openai/chat_stream.go b/pkg/providers/openai/chat_stream.go index 08ca2b21..5b8f8b41 100644 --- a/pkg/providers/openai/chat_stream.go +++ b/pkg/providers/openai/chat_stream.go @@ -5,10 +5,10 @@ import ( "context" "encoding/json" "fmt" + clients2 "github.com/EinStack/glide/pkg/clients" "io" "net/http" - "github.com/EinStack/glide/pkg/providers/clients" "github.com/r3labs/sse/v2" "go.uber.org/zap" @@ -74,7 +74,7 @@ func (s *ChatStream) Recv() (*schemas.ChatStreamChunk, error) { // if err is io.EOF, this still means that the stream is interrupted unexpectedly // because the normal stream termination is done via finding out streamDoneMarker - return nil, clients.ErrProviderUnavailable + return nil, clients2.ErrProviderUnavailable } s.logger.Debug( @@ -82,7 +82,7 @@ func (s *ChatStream) Recv() (*schemas.ChatStreamChunk, error) { zap.ByteString("rawChunk", rawEvent), ) - event, err := clients.ParseSSEvent(rawEvent) + event, err := clients2.ParseSSEvent(rawEvent) if bytes.Equal(event.Data, StreamDoneMarker) { return nil, io.EOF @@ -141,7 +141,7 @@ func (c *Client) SupportChatStream() bool { return true } -func (c *Client) ChatStream(ctx context.Context, params *schemas.ChatParams) (clients.ChatStream, error) { +func (c *Client) ChatStream(ctx context.Context, params *schemas.ChatParams) (clients2.ChatStream, error) { // Create a new chat request httpRequest, err := c.makeStreamReq(ctx, params) if err != nil { diff --git a/pkg/providers/openai/chat_stream_test.go b/pkg/providers/openai/chat_stream_test.go index 1ab8483b..459192b7 100644 --- a/pkg/providers/openai/chat_stream_test.go +++ b/pkg/providers/openai/chat_stream_test.go @@ -3,6 +3,7 @@ package openai import ( "context" "encoding/json" + clients2 "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -14,14 +15,12 @@ import ( "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/stretchr/testify/require" ) func TestOpenAIClient_ChatStreamSupported(t *testing.T) { providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() client, err := NewClient(providerCfg, clientCfg, telemetry.NewTelemetryMock()) require.NoError(t, err) @@ -64,7 +63,7 @@ func TestOpenAIClient_ChatStreamRequest(t *testing.T) { ctx := context.Background() providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() providerCfg.BaseURL = openAIServer.URL @@ -132,7 +131,7 @@ func TestOpenAIClient_ChatStreamRequestInterrupted(t *testing.T) { ctx := context.Background() providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() providerCfg.BaseURL = openAIServer.URL @@ -153,7 +152,7 @@ func TestOpenAIClient_ChatStreamRequestInterrupted(t *testing.T) { for { chunk, err := stream.Recv() if err != nil { - require.ErrorIs(t, err, clients.ErrProviderUnavailable) + require.ErrorIs(t, err, clients2.ErrProviderUnavailable) return } diff --git a/pkg/providers/openai/chat_test.go b/pkg/providers/openai/chat_test.go index 3109f150..4d626e81 100644 --- a/pkg/providers/openai/chat_test.go +++ b/pkg/providers/openai/chat_test.go @@ -3,6 +3,7 @@ package openai import ( "context" "encoding/json" + clients2 "github.com/EinStack/glide/pkg/clients" "io" "net/http" "net/http/httptest" @@ -10,8 +11,6 @@ import ( "path/filepath" "testing" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" "github.com/EinStack/glide/pkg/telemetry" @@ -49,7 +48,7 @@ func TestOpenAIClient_ChatRequest(t *testing.T) { ctx := context.Background() providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() providerCfg.BaseURL = openAIServer.URL @@ -78,7 +77,7 @@ func TestOpenAIClient_RateLimit(t *testing.T) { ctx := context.Background() providerCfg := DefaultConfig() - clientCfg := clients.DefaultClientConfig() + clientCfg := clients2.DefaultClientConfig() providerCfg.BaseURL = openAIServer.URL @@ -93,5 +92,5 @@ func TestOpenAIClient_RateLimit(t *testing.T) { _, err = client.Chat(ctx, &chatParams) require.Error(t, err) - require.IsType(t, &clients.RateLimitError{}, err) + require.IsType(t, &clients2.RateLimitError{}, err) } diff --git a/pkg/providers/openai/client.go b/pkg/providers/openai/client.go index 832ade57..ec20b3ca 100644 --- a/pkg/providers/openai/client.go +++ b/pkg/providers/openai/client.go @@ -1,6 +1,7 @@ package openai import ( + "github.com/EinStack/glide/pkg/clients" "net/http" "net/url" "time" @@ -8,8 +9,6 @@ import ( "go.uber.org/zap" "github.com/EinStack/glide/pkg/telemetry" - - "github.com/EinStack/glide/pkg/providers/clients" ) const ( diff --git a/pkg/providers/openai/errors.go b/pkg/providers/openai/errors.go index 14978f8c..0cf2a418 100644 --- a/pkg/providers/openai/errors.go +++ b/pkg/providers/openai/errors.go @@ -2,13 +2,13 @@ package openai import ( "fmt" + "github.com/EinStack/glide/pkg/clients" "io" "net/http" "time" "github.com/EinStack/glide/pkg/telemetry" - "github.com/EinStack/glide/pkg/providers/clients" "go.uber.org/zap" ) diff --git a/pkg/providers/testing/lang.go b/pkg/providers/testing/lang.go index 0f7f1f4e..39389cc8 100644 --- a/pkg/providers/testing/lang.go +++ b/pkg/providers/testing/lang.go @@ -2,10 +2,9 @@ package testing import ( "context" + clients2 "github.com/EinStack/glide/pkg/clients" "io" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/api/schemas" ) @@ -124,7 +123,7 @@ func (c *ProviderMock) SupportChatStream() bool { func (c *ProviderMock) Chat(_ context.Context, _ *schemas.ChatParams) (*schemas.ChatResponse, error) { if c.chatResps == nil { - return nil, clients.ErrProviderUnavailable + return nil, clients2.ErrProviderUnavailable } responses := *c.chatResps @@ -139,9 +138,9 @@ func (c *ProviderMock) Chat(_ context.Context, _ *schemas.ChatParams) (*schemas. return response.Resp(), nil } -func (c *ProviderMock) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients.ChatStream, error) { +func (c *ProviderMock) ChatStream(_ context.Context, _ *schemas.ChatParams) (clients2.ChatStream, error) { if c.chatStreams == nil || c.idx >= len(*c.chatStreams) { - return nil, clients.ErrProviderUnavailable + return nil, clients2.ErrProviderUnavailable } streams := *c.chatStreams diff --git a/pkg/routers/health/buckets.go b/pkg/resiliency/health/buckets.go similarity index 100% rename from pkg/routers/health/buckets.go rename to pkg/resiliency/health/buckets.go diff --git a/pkg/routers/health/buckets_test.go b/pkg/resiliency/health/buckets_test.go similarity index 100% rename from pkg/routers/health/buckets_test.go rename to pkg/resiliency/health/buckets_test.go diff --git a/pkg/routers/health/error_budget.go b/pkg/resiliency/health/error_budget.go similarity index 100% rename from pkg/routers/health/error_budget.go rename to pkg/resiliency/health/error_budget.go diff --git a/pkg/routers/health/error_budget_test.go b/pkg/resiliency/health/error_budget_test.go similarity index 100% rename from pkg/routers/health/error_budget_test.go rename to pkg/resiliency/health/error_budget_test.go diff --git a/pkg/routers/health/ratelimit.go b/pkg/resiliency/health/ratelimit.go similarity index 100% rename from pkg/routers/health/ratelimit.go rename to pkg/resiliency/health/ratelimit.go diff --git a/pkg/routers/health/ratelimit_test.go b/pkg/resiliency/health/ratelimit_test.go similarity index 100% rename from pkg/routers/health/ratelimit_test.go rename to pkg/resiliency/health/ratelimit_test.go diff --git a/pkg/routers/health/tracker.go b/pkg/resiliency/health/tracker.go similarity index 94% rename from pkg/routers/health/tracker.go rename to pkg/resiliency/health/tracker.go index 8cba6e65..13e89b54 100644 --- a/pkg/routers/health/tracker.go +++ b/pkg/resiliency/health/tracker.go @@ -2,8 +2,7 @@ package health import ( "errors" - - "github.com/EinStack/glide/pkg/providers/clients" + "github.com/EinStack/glide/pkg/clients" ) // Tracker tracks errors and general health of model provider diff --git a/pkg/routers/health/tracker_test.go b/pkg/resiliency/health/tracker_test.go similarity index 93% rename from pkg/routers/health/tracker_test.go rename to pkg/resiliency/health/tracker_test.go index 8927a041..032da2ed 100644 --- a/pkg/routers/health/tracker_test.go +++ b/pkg/resiliency/health/tracker_test.go @@ -1,10 +1,10 @@ package health import ( + "github.com/EinStack/glide/pkg/clients" "testing" "time" - "github.com/EinStack/glide/pkg/providers/clients" "github.com/stretchr/testify/require" ) diff --git a/pkg/routers/retry/config.go b/pkg/resiliency/retry/config.go similarity index 100% rename from pkg/routers/retry/config.go rename to pkg/resiliency/retry/config.go diff --git a/pkg/routers/retry/config_test.go b/pkg/resiliency/retry/config_test.go similarity index 100% rename from pkg/routers/retry/config_test.go rename to pkg/resiliency/retry/config_test.go diff --git a/pkg/routers/retry/exp.go b/pkg/resiliency/retry/exp.go similarity index 100% rename from pkg/routers/retry/exp.go rename to pkg/resiliency/retry/exp.go diff --git a/pkg/routers/retry/exp_test.go b/pkg/resiliency/retry/exp_test.go similarity index 100% rename from pkg/routers/retry/exp_test.go rename to pkg/resiliency/retry/exp_test.go diff --git a/pkg/routers/config.go b/pkg/routers/config.go index 3ae65a3a..557ecd91 100644 --- a/pkg/routers/config.go +++ b/pkg/routers/config.go @@ -14,9 +14,9 @@ type Config struct { EmbeddingRouters []EmbeddingRouterConfig `yaml:"embedding" validate:"required,dive"` } -func (c *Config) BuildLangRouters(tel *telemetry.Telemetry) ([]*LangRouter, error) { +func (c *Config) BuildLangRouters(tel *telemetry.Telemetry) ([]*lang.LangRouter, error) { seenIDs := make(map[string]bool, len(c.LanguageRouters)) - routers := make([]*LangRouter, 0, len(c.LanguageRouters)) + routers := make([]*lang.LangRouter, 0, len(c.LanguageRouters)) var errs error @@ -34,7 +34,7 @@ func (c *Config) BuildLangRouters(tel *telemetry.Telemetry) ([]*LangRouter, erro tel.L().Debug("Init router", zap.String("routerID", routerConfig.ID)) - router, err := NewLangRouter(&c.LanguageRouters[idx], tel) + router, err := lang.NewLangRouter(&c.LanguageRouters[idx], tel) if err != nil { errs = multierr.Append(errs, err) continue diff --git a/pkg/routers/embed/config.go b/pkg/routers/embed/config.go index 93346b43..52d77eef 100644 --- a/pkg/routers/embed/config.go +++ b/pkg/routers/embed/config.go @@ -2,7 +2,7 @@ package embed import ( "github.com/EinStack/glide/pkg/providers" - "github.com/EinStack/glide/pkg/routers/retry" + "github.com/EinStack/glide/pkg/resiliency/retry" "github.com/EinStack/glide/pkg/routers/routing" ) diff --git a/pkg/routers/embed/router.go b/pkg/routers/embed/router.go index dd3542c3..94a87fbb 100644 --- a/pkg/routers/embed/router.go +++ b/pkg/routers/embed/router.go @@ -3,20 +3,20 @@ package embed import ( "context" "github.com/EinStack/glide/pkg/api/schemas" - "github.com/EinStack/glide/pkg/routers" - "github.com/EinStack/glide/pkg/routers/retry" + "github.com/EinStack/glide/pkg/resiliency/retry" + "github.com/EinStack/glide/pkg/routers/lang" "github.com/EinStack/glide/pkg/telemetry" "go.uber.org/zap" ) type EmbeddingRouter struct { - routerID routers.RouterID + routerID lang.RouterID Config *LangRouterConfig retry *retry.ExpRetry tel *telemetry.Telemetry logger *zap.Logger } -func (r *routers.LangRouter) Embed(ctx context.Context, req *schemas.EmbedRequest) (*schemas.EmbedResponse, error) { +func (r *lang.LangRouter) Embed(ctx context.Context, req *schemas.EmbedRequest) (*schemas.EmbedResponse, error) { } diff --git a/pkg/routers/lang/config.go b/pkg/routers/lang/config.go index f35d1109..f4245d34 100644 --- a/pkg/routers/lang/config.go +++ b/pkg/routers/lang/config.go @@ -3,7 +3,7 @@ package lang import ( "fmt" "github.com/EinStack/glide/pkg/providers" - "github.com/EinStack/glide/pkg/routers/retry" + retry2 "github.com/EinStack/glide/pkg/resiliency/retry" "github.com/EinStack/glide/pkg/routers/routing" "github.com/EinStack/glide/pkg/telemetry" "go.uber.org/multierr" @@ -17,7 +17,7 @@ import ( type LangRouterConfig struct { ID string `yaml:"id" json:"routers" validate:"required"` // Unique router ID Enabled bool `yaml:"enabled" json:"enabled" validate:"required"` // Is router enabled? - Retry *retry.ExpRetryConfig `yaml:"retry" json:"retry" validate:"required"` // retry when no healthy model is available to router + Retry *retry2.ExpRetryConfig `yaml:"retry" json:"retry" validate:"required"` // retry when no healthy model is available to router RoutingStrategy routing.Strategy `yaml:"strategy" json:"strategy" swaggertype:"primitive,string" validate:"required"` // strategy on picking the next model to serve the request Models []providers.LangModelConfig `yaml:"models" json:"models" validate:"required,min=1,dive"` // the list of models that could handle requests } @@ -119,11 +119,11 @@ func (c *LangRouterConfig) BuildModels(tel *telemetry.Telemetry) ([]*providers.L return chatModels, chatStreamModels, nil } -func (c *LangRouterConfig) BuildRetry() *retry.ExpRetry { +func (c *LangRouterConfig) BuildRetry() *retry2.ExpRetry { retryConfig := c.Retry maxDelay := time.Duration(*retryConfig.MaxDelay) - return retry.NewExpRetry( + return retry2.NewExpRetry( retryConfig.MaxRetries, retryConfig.BaseMultiplier, time.Duration(retryConfig.MinDelay), @@ -166,7 +166,7 @@ func DefaultLangRouterConfig() LangRouterConfig { return LangRouterConfig{ Enabled: true, RoutingStrategy: routing.Priority, - Retry: retry.DefaultExpRetryConfig(), + Retry: retry2.DefaultExpRetryConfig(), } } diff --git a/pkg/routers/lang/config_test.go b/pkg/routers/lang/config_test.go index abbb5bcd..fde65344 100644 --- a/pkg/routers/lang/config_test.go +++ b/pkg/routers/lang/config_test.go @@ -1,23 +1,20 @@ package lang import ( + "github.com/EinStack/glide/pkg/clients" "github.com/EinStack/glide/pkg/providers/cohere" + "github.com/EinStack/glide/pkg/resiliency/health" + "github.com/EinStack/glide/pkg/resiliency/retry" routers2 "github.com/EinStack/glide/pkg/routers" "github.com/EinStack/glide/pkg/telemetry" "testing" "github.com/EinStack/glide/pkg/routers/routing" - "github.com/EinStack/glide/pkg/routers/retry" - "github.com/EinStack/glide/pkg/routers/latency" - "github.com/EinStack/glide/pkg/routers/health" - "github.com/EinStack/glide/pkg/providers/openai" - "github.com/EinStack/glide/pkg/providers/clients" - "github.com/EinStack/glide/pkg/providers" "github.com/stretchr/testify/require" diff --git a/pkg/routers/lang.go b/pkg/routers/lang/router.go similarity index 97% rename from pkg/routers/lang.go rename to pkg/routers/lang/router.go index 4a7d0d0f..368ae260 100644 --- a/pkg/routers/lang.go +++ b/pkg/routers/lang/router.go @@ -1,10 +1,10 @@ -package routers +package lang import ( "context" "errors" + "github.com/EinStack/glide/pkg/resiliency/retry" - "github.com/EinStack/glide/pkg/routers/retry" "go.uber.org/zap" "github.com/EinStack/glide/pkg/providers" @@ -238,3 +238,7 @@ func (r *LangRouter) ChatStream( &schemas.ReasonError, ) } + +func (r *LangRouter) Embed(ctx context.Context, req *schemas.EmbedRequest) (*schemas.EmbedResponse, error) { + +} diff --git a/pkg/routers/lang_test.go b/pkg/routers/lang/router_test.go similarity index 98% rename from pkg/routers/lang_test.go rename to pkg/routers/lang/router_test.go index f56216e3..8641cb0a 100644 --- a/pkg/routers/lang_test.go +++ b/pkg/routers/lang/router_test.go @@ -1,17 +1,17 @@ -package routers +package lang import ( "context" + "github.com/EinStack/glide/pkg/clients" + "github.com/EinStack/glide/pkg/resiliency/health" + "github.com/EinStack/glide/pkg/resiliency/retry" "testing" "time" "github.com/EinStack/glide/pkg/api/schemas" "github.com/EinStack/glide/pkg/providers" - "github.com/EinStack/glide/pkg/providers/clients" ptesting "github.com/EinStack/glide/pkg/providers/testing" - "github.com/EinStack/glide/pkg/routers/health" "github.com/EinStack/glide/pkg/routers/latency" - "github.com/EinStack/glide/pkg/routers/retry" "github.com/EinStack/glide/pkg/routers/routing" "github.com/EinStack/glide/pkg/telemetry" "github.com/stretchr/testify/require" diff --git a/pkg/routers/manager.go b/pkg/routers/manager.go index 123ea09e..7516e03f 100644 --- a/pkg/routers/manager.go +++ b/pkg/routers/manager.go @@ -2,14 +2,15 @@ package routers import ( "github.com/EinStack/glide/pkg/api/schemas" + "github.com/EinStack/glide/pkg/routers/lang" "github.com/EinStack/glide/pkg/telemetry" ) type RouterManager struct { Config *Config tel *telemetry.Telemetry - langRouterMap *map[string]*LangRouter - langRouters []*LangRouter + langRouterMap *map[string]*lang.LangRouter + langRouters []*lang.LangRouter } // NewManager creates a new instance of Router Manager that creates, holds and returns all routers @@ -19,7 +20,7 @@ func NewManager(cfg *Config, tel *telemetry.Telemetry) (*RouterManager, error) { return nil, err } - langRouterMap := make(map[string]*LangRouter, len(langRouters)) + langRouterMap := make(map[string]*lang.LangRouter, len(langRouters)) for _, router := range langRouters { langRouterMap[router.ID()] = router @@ -35,12 +36,12 @@ func NewManager(cfg *Config, tel *telemetry.Telemetry) (*RouterManager, error) { return &manager, err } -func (r *RouterManager) GetLangRouters() []*LangRouter { +func (r *RouterManager) GetLangRouters() []*lang.LangRouter { return r.langRouters } // GetLangRouter returns a router by type and ID -func (r *RouterManager) GetLangRouter(routerID string) (*LangRouter, error) { +func (r *RouterManager) GetLangRouter(routerID string) (*lang.LangRouter, error) { if router, found := (*r.langRouterMap)[routerID]; found { return router, nil }