Skip to content

Commit 6d98675

Browse files
committed
Merge branch 'main' into kacpersaw/aibridge-circuit-breaker
Resolve conflicts: - Move circuit breaker code to circuitbreaker package - Update imports to use new package structure (provider/, config/, metrics/, etc.) - Update integration tests to use new imports
2 parents 2af2875 + 7535a71 commit 6d98675

50 files changed

Lines changed: 2747 additions & 2051 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

anthropic_internal_test.go

Lines changed: 0 additions & 448 deletions
This file was deleted.

anthropic_test.go

Lines changed: 0 additions & 172 deletions
This file was deleted.

api.go

Lines changed: 40 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,67 +2,57 @@ package aibridge
22

33
import (
44
"context"
5-
"time"
5+
6+
"cdr.dev/slog/v3"
7+
"github.com/coder/aibridge/config"
8+
aibcontext "github.com/coder/aibridge/context"
9+
"github.com/coder/aibridge/metrics"
10+
"github.com/coder/aibridge/provider"
11+
"github.com/coder/aibridge/recorder"
12+
"github.com/prometheus/client_golang/prometheus"
13+
"go.opentelemetry.io/otel/trace"
614
)
715

8-
type ToolArgs any
16+
// Const + Type + function aliases for backwards compatibility.
17+
const (
18+
ProviderAnthropic = config.ProviderAnthropic
19+
ProviderOpenAI = config.ProviderOpenAI
20+
)
921

10-
type Metadata map[string]any
22+
type (
23+
Metrics = metrics.Metrics
1124

12-
type InterceptionRecord struct {
13-
ID string
14-
InitiatorID, Provider, Model string
15-
Metadata Metadata
16-
StartedAt time.Time
17-
}
25+
Provider = provider.Provider
26+
27+
InterceptionRecord = recorder.InterceptionRecord
28+
InterceptionRecordEnded = recorder.InterceptionRecordEnded
29+
TokenUsageRecord = recorder.TokenUsageRecord
30+
PromptUsageRecord = recorder.PromptUsageRecord
31+
ToolUsageRecord = recorder.ToolUsageRecord
32+
Recorder = recorder.Recorder
33+
Metadata = recorder.Metadata
34+
35+
AnthropicConfig = config.Anthropic
36+
AWSBedrockConfig = config.AWSBedrock
37+
OpenAIConfig = config.OpenAI
38+
)
1839

19-
type InterceptionRecordEnded struct {
20-
ID string
21-
EndedAt time.Time
40+
func AsActor(ctx context.Context, actorID string, metadata recorder.Metadata) context.Context {
41+
return aibcontext.AsActor(ctx, actorID, metadata)
2242
}
2343

24-
type TokenUsageRecord struct {
25-
InterceptionID string
26-
MsgID string
27-
Input, Output int64
28-
// ExtraTokenTypes holds token types which *may* exist over and above input/output.
29-
// These should ultimately get merged into [Metadata], but it's useful to keep these
30-
// with their actual type (int64) since [Metadata] is a map[string]any.
31-
ExtraTokenTypes map[string]int64
32-
Metadata Metadata
33-
CreatedAt time.Time
44+
func NewAnthropicProvider(cfg config.Anthropic, bedrockCfg *config.AWSBedrock) provider.Provider {
45+
return provider.NewAnthropic(cfg, bedrockCfg)
3446
}
3547

36-
type PromptUsageRecord struct {
37-
InterceptionID string
38-
MsgID, Prompt string
39-
Metadata Metadata
40-
CreatedAt time.Time
48+
func NewOpenAIProvider(cfg config.OpenAI) provider.Provider {
49+
return provider.NewOpenAI(cfg)
4150
}
4251

43-
type ToolUsageRecord struct {
44-
InterceptionID string
45-
MsgID, Tool string
46-
ServerURL *string
47-
Args ToolArgs
48-
Injected bool
49-
InvocationError error
50-
Metadata Metadata
51-
CreatedAt time.Time
52+
func NewMetrics(reg prometheus.Registerer) *metrics.Metrics {
53+
return metrics.NewMetrics(reg)
5254
}
5355

54-
// Recorder describes all the possible usage information we need to capture during interactions with AI providers.
55-
// Additionally, it introduces the concept of an "Interception", which includes information about which provider/model was
56-
// used and by whom. All usage records should reference this Interception by ID.
57-
type Recorder interface {
58-
// RecordInterception records metadata about an interception with an upstream AI provider.
59-
RecordInterception(ctx context.Context, req *InterceptionRecord) error
60-
// RecordInterceptionEnded records that given interception has completed.
61-
RecordInterceptionEnded(ctx context.Context, req *InterceptionRecordEnded) error
62-
// RecordTokenUsage records the tokens used in an interception with an upstream AI provider.
63-
RecordTokenUsage(ctx context.Context, req *TokenUsageRecord) error
64-
// RecordPromptUsage records the prompts used in an interception with an upstream AI provider.
65-
RecordPromptUsage(ctx context.Context, req *PromptUsageRecord) error
66-
// RecordToolUsage records the tools used in an interception with an upstream AI provider.
67-
RecordToolUsage(ctx context.Context, req *ToolUsageRecord) error
56+
func NewRecorder(logger slog.Logger, tracer trace.Tracer, clientFn func() (Recorder, error)) Recorder {
57+
return recorder.NewRecorder(logger, tracer, clientFn)
6858
}

0 commit comments

Comments
 (0)