@@ -2,67 +2,54 @@ package aibridge
22
33import (
44 "context"
5- "time"
6- )
7-
8- type ToolArgs any
95
10- type Metadata map [string ]any
6+ "cdr.dev/slog"
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"
14+ )
1115
12- type InterceptionRecord struct {
13- ID string
14- InitiatorID , Provider , Model string
15- Metadata Metadata
16- StartedAt time.Time
17- }
16+ // Type + function aliases for backwards compatibility.
17+ type (
18+ Metrics = metrics.Metrics
19+
20+ Provider = provider.Provider
21+
22+ InterceptionRecord = recorder.InterceptionRecord
23+ InterceptionRecordEnded = recorder.InterceptionRecordEnded
24+ TokenUsageRecord = recorder.TokenUsageRecord
25+ PromptUsageRecord = recorder.PromptUsageRecord
26+ ToolUsageRecord = recorder.ToolUsageRecord
27+ Recorder = recorder.Recorder
28+ RecorderWrapper = recorder.RecorderWrapper
29+ AsyncRecorder = recorder.AsyncRecorder
30+ Metadata = recorder.Metadata
31+
32+ AnthropicConfig = config.AnthropicConfig
33+ AWSBedrockConfig = config.AWSBedrockConfig
34+ OpenAIConfig = config.OpenAIConfig
35+ )
1836
19- type InterceptionRecordEnded struct {
20- ID string
21- EndedAt time.Time
37+ func AsActor (ctx context.Context , actorID string , metadata recorder.Metadata ) context.Context {
38+ return aibcontext .AsActor (ctx , actorID , metadata )
2239}
2340
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
41+ func NewAnthropicProvider (cfg config.AnthropicConfig , bedrockCfg * config.AWSBedrockConfig ) provider.Provider {
42+ return provider .NewAnthropic (cfg , bedrockCfg )
3443}
3544
36- type PromptUsageRecord struct {
37- InterceptionID string
38- MsgID , Prompt string
39- Metadata Metadata
40- CreatedAt time.Time
45+ func NewOpenAIProvider (cfg config.OpenAIConfig ) provider.Provider {
46+ return provider .NewOpenAI (cfg )
4147}
4248
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
49+ func NewMetrics (reg prometheus.Registerer ) * metrics.Metrics {
50+ return metrics .NewMetrics (reg )
5251}
5352
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
53+ func NewRecorder (logger slog.Logger , tracer trace.Tracer , clientFn func () (Recorder , error )) * RecorderWrapper {
54+ return recorder .NewRecorder (logger , tracer , clientFn )
6855}
0 commit comments