Skip to content

Commit 588fd7d

Browse files
committed
chore: rearrange code into packages
Adds following packages - config: contains config structs and some constants - context: actor related context functions - intercept: - chatcompletions: OpenAI chat completions interceptors - eventstream - messages: Anthrpic messages interceptors - provider: OpenAI/Antropic providers - recorder
1 parent 28287ae commit 588fd7d

37 files changed

Lines changed: 1590 additions & 1454 deletions

anthropic_test.go

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

api.go

Lines changed: 39 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,67 +2,54 @@ package aibridge
22

33
import (
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

Comments
 (0)