diff --git a/internal/runtime/executor/compat_helpers.go b/internal/runtime/executor/compat_helpers.go index 1d4289db..2d437d9b 100644 --- a/internal/runtime/executor/compat_helpers.go +++ b/internal/runtime/executor/compat_helpers.go @@ -8,7 +8,9 @@ import ( "github.com/router-for-me/CLIProxyAPI/v6/internal/config" "github.com/router-for-me/CLIProxyAPI/v6/internal/runtime/executor/helps" cliproxyauth "github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/auth" + cliproxyexecutor "github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/executor" "github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/usage" + "github.com/tidwall/gjson" "github.com/tiktoken-go/tokenizer" ) @@ -47,3 +49,81 @@ func countClaudeChatTokens(enc tokenizer.Codec, payload []byte) (int64, error) { func buildOpenAIUsageJSON(count int64) []byte { return helps.BuildOpenAIUsageJSON(count) } + +type upstreamRequestLog = helps.UpstreamRequestLog + +func recordAPIRequest(ctx context.Context, cfg *config.Config, info upstreamRequestLog) { + helps.RecordAPIRequest(ctx, cfg, info) +} + +func recordAPIResponseMetadata(ctx context.Context, cfg *config.Config, status int, headers http.Header) { + helps.RecordAPIResponseMetadata(ctx, cfg, status, headers) +} + +func recordAPIResponseError(ctx context.Context, cfg *config.Config, err error) { + helps.RecordAPIResponseError(ctx, cfg, err) +} + +func appendAPIResponseChunk(ctx context.Context, cfg *config.Config, chunk []byte) { + helps.AppendAPIResponseChunk(ctx, cfg, chunk) +} + +func payloadRequestedModel(opts cliproxyexecutor.Options, fallback string) string { + return helps.PayloadRequestedModel(opts, fallback) +} + +func applyPayloadConfigWithRoot(cfg *config.Config, model, protocol, root string, payload, original []byte, requestedModel string) []byte { + return helps.ApplyPayloadConfigWithRoot(cfg, model, protocol, root, payload, original, requestedModel) +} + +func summarizeErrorBody(contentType string, body []byte) string { + return helps.SummarizeErrorBody(contentType, body) +} + +func apiKeyFromContext(ctx context.Context) string { + return helps.APIKeyFromContext(ctx) +} + +func tokenizerForModel(model string) (tokenizer.Codec, error) { + return helps.TokenizerForModel(model) +} + +func collectOpenAIContent(content gjson.Result, segments *[]string) { + helps.CollectOpenAIContent(content, segments) +} + +type usageReporter struct { + reporter *helps.UsageReporter +} + +func newUsageReporter(ctx context.Context, provider, model string, auth *cliproxyauth.Auth) *usageReporter { + return &usageReporter{reporter: helps.NewUsageReporter(ctx, provider, model, auth)} +} + +func (r *usageReporter) publish(ctx context.Context, detail usage.Detail) { + if r == nil || r.reporter == nil { + return + } + r.reporter.Publish(ctx, detail) +} + +func (r *usageReporter) publishFailure(ctx context.Context) { + if r == nil || r.reporter == nil { + return + } + r.reporter.PublishFailure(ctx) +} + +func (r *usageReporter) trackFailure(ctx context.Context, errPtr *error) { + if r == nil || r.reporter == nil { + return + } + r.reporter.TrackFailure(ctx, errPtr) +} + +func (r *usageReporter) ensurePublished(ctx context.Context) { + if r == nil || r.reporter == nil { + return + } + r.reporter.EnsurePublished(ctx) +} diff --git a/internal/runtime/executor/helps/token_helpers.go b/internal/runtime/executor/helps/token_helpers.go index 592f7a49..44c31ddd 100644 --- a/internal/runtime/executor/helps/token_helpers.go +++ b/internal/runtime/executor/helps/token_helpers.go @@ -201,6 +201,10 @@ func collectOpenAIContent(content gjson.Result, segments *[]string) { } } +func CollectOpenAIContent(content gjson.Result, segments *[]string) { + collectOpenAIContent(content, segments) +} + func collectOpenAIToolCalls(calls gjson.Result, segments *[]string) { if !calls.Exists() || !calls.IsArray() { return