@@ -2,67 +2,57 @@ package aibridge
22
33import (
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