mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
cccf436db2
Cherry-pick of https://github.com/coder/coder/pull/25794
Original PR: #25794 — feat: serve 503 sentinel for disabled providers
Merge commit: 5b10268827
Requested by: @dannykopping
Signed-off-by: Danny Kopping <danny@coder.com>
Co-authored-by: Danny Kopping <danny@coder.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
75 lines
2.4 KiB
Go
75 lines
2.4 KiB
Go
package aibridge
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"go.opentelemetry.io/otel/trace"
|
|
|
|
"cdr.dev/slog/v3"
|
|
"github.com/coder/coder/v2/aibridge/config"
|
|
aibcontext "github.com/coder/coder/v2/aibridge/context"
|
|
"github.com/coder/coder/v2/aibridge/metrics"
|
|
"github.com/coder/coder/v2/aibridge/provider"
|
|
"github.com/coder/coder/v2/aibridge/recorder"
|
|
)
|
|
|
|
// Const + Type + function aliases for backwards compatibility.
|
|
const (
|
|
ProviderAnthropic = config.ProviderAnthropic
|
|
ProviderOpenAI = config.ProviderOpenAI
|
|
ProviderCopilot = config.ProviderCopilot
|
|
)
|
|
|
|
type (
|
|
Metrics = metrics.Metrics
|
|
|
|
Provider = provider.Provider
|
|
|
|
InterceptionRecord = recorder.InterceptionRecord
|
|
InterceptionRecordEnded = recorder.InterceptionRecordEnded
|
|
TokenUsageRecord = recorder.TokenUsageRecord
|
|
PromptUsageRecord = recorder.PromptUsageRecord
|
|
ToolUsageRecord = recorder.ToolUsageRecord
|
|
ModelThoughtRecord = recorder.ModelThoughtRecord
|
|
Recorder = recorder.Recorder
|
|
Metadata = recorder.Metadata
|
|
|
|
AnthropicConfig = config.Anthropic
|
|
AWSBedrockConfig = config.AWSBedrock
|
|
OpenAIConfig = config.OpenAI
|
|
CopilotConfig = config.Copilot
|
|
)
|
|
|
|
func AsActor(ctx context.Context, actorID string, metadata recorder.Metadata) context.Context {
|
|
return aibcontext.AsActor(ctx, actorID, metadata)
|
|
}
|
|
|
|
func NewAnthropicProvider(cfg config.Anthropic, bedrockCfg *config.AWSBedrock) provider.Provider {
|
|
return provider.NewAnthropic(cfg, bedrockCfg)
|
|
}
|
|
|
|
func NewOpenAIProvider(cfg config.OpenAI) provider.Provider {
|
|
return provider.NewOpenAI(cfg)
|
|
}
|
|
|
|
func NewCopilotProvider(cfg config.Copilot) provider.Provider {
|
|
return provider.NewCopilot(cfg)
|
|
}
|
|
|
|
// NewDisabledProviderStub returns a Provider that reports Enabled() ==
|
|
// false and has no-op implementations for all other methods. Use this
|
|
// instead of constructing a concrete provider for disabled rows so that
|
|
// adding a new provider type does not require updating a switch here.
|
|
func NewDisabledProviderStub(name, providerType string) provider.Provider {
|
|
return provider.NewDisabledStub(name, providerType)
|
|
}
|
|
|
|
func NewMetrics(reg prometheus.Registerer) *metrics.Metrics {
|
|
return metrics.NewMetrics(reg)
|
|
}
|
|
|
|
func NewRecorder(logger slog.Logger, tracer trace.Tracer, clientFn func() (Recorder, error)) Recorder {
|
|
return recorder.NewWrappedRecorder(logger, tracer, clientFn)
|
|
}
|