feat: publish sanitized custom.97 source
This commit is contained in:
1022 files changed
+69903
-19207
No files matched your search
@@ -7,6 +7,7 @@ import (
|
||||
relaycommon "github.com/QuantumNous/new-api/relay/common"
|
||||
"github.com/QuantumNous/new-api/relaykit/dto"
|
||||
"github.com/QuantumNous/new-api/setting/operation_setting"
|
||||
"github.com/QuantumNous/new-api/tokenkit"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -20,10 +21,10 @@ func TestResponsesUsageAccumulatorTerminalAccounting(t *testing.T) {
|
||||
}{
|
||||
{eventType: "response.completed", wantImages: 1},
|
||||
{eventType: "response.done", wantImages: 1},
|
||||
{eventType: "response.incomplete"},
|
||||
{eventType: "response.failed"},
|
||||
{eventType: "response.cancelled"},
|
||||
{eventType: "response.canceled"},
|
||||
{eventType: "response.incomplete", wantImages: 1},
|
||||
{eventType: "response.failed", wantImages: 1},
|
||||
{eventType: "response.cancelled", wantImages: 1},
|
||||
{eventType: "response.canceled", wantImages: 1},
|
||||
} {
|
||||
t.Run(tc.eventType, func(t *testing.T) {
|
||||
info := &relaycommon.RelayInfo{OriginModelName: "gpt-5.1", StreamStatus: relaycommon.NewStreamStatus()}
|
||||
@@ -34,10 +35,10 @@ func TestResponsesUsageAccumulatorTerminalAccounting(t *testing.T) {
|
||||
{Type: dto.BuildInCallFunctionCall, Name: "responses_priced_fn"},
|
||||
{Type: dto.BuildInCallFunctionCall, Name: "responses_unpriced_fn"},
|
||||
} {
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: dto.ResponsesOutputTypeItemDone, Item: &item})
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: dto.ResponsesOutputTypeItemDone, Item: &item}, nil)
|
||||
}
|
||||
image := dto.ResponsesOutput{ID: "image-1", Type: dto.ResponsesOutputTypeImageGenerationCall, Status: "completed", Result: "image-data"}
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: dto.ResponsesOutputTypeItemDone, Item: &image})
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: dto.ResponsesOutputTypeItemDone, Item: &image}, nil)
|
||||
upstream := &dto.Usage{InputTokens: 20, OutputTokens: 5, TotalTokens: 25, InputTokensDetails: &dto.InputTokenDetails{CachedTokens: 4}}
|
||||
upstream.BillingUsage = dto.NewOpenAIResponsesBillingUsage(upstream)
|
||||
terminal := &dto.ResponsesStreamResponse{
|
||||
@@ -46,8 +47,8 @@ func TestResponsesUsageAccumulatorTerminalAccounting(t *testing.T) {
|
||||
Usage: upstream, Output: []dto.ResponsesOutput{image},
|
||||
},
|
||||
}
|
||||
accumulator.Observe(terminal)
|
||||
accumulator.Observe(terminal)
|
||||
accumulator.Observe(terminal, nil)
|
||||
accumulator.Observe(terminal, nil)
|
||||
usage := accumulator.Finish()
|
||||
assert.Equal(t, tc.eventType == "response.failed", info.StreamStatus.ResponseFailed())
|
||||
assert.NotEmpty(t, info.StreamStatus.ResponseOutcome())
|
||||
@@ -81,11 +82,11 @@ func TestResponsesUsageAccumulatorInterruptedTextFallback(t *testing.T) {
|
||||
info := &relaycommon.RelayInfo{ChannelMeta: &relaycommon.ChannelMeta{UpstreamModelName: "gpt-4o"}}
|
||||
info.SetEstimatePromptTokens(100)
|
||||
accumulator := NewResponsesUsageAccumulator(info)
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: "response.output_text.delta", Delta: "hello"})
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: "response.output_text.delta", Delta: "hello"}, nil)
|
||||
if withUsage {
|
||||
upstream := &dto.Usage{InputTokens: 20, InputTokensDetails: &dto.InputTokenDetails{CachedTokens: 4}}
|
||||
upstream.BillingUsage = dto.NewOpenAIResponsesBillingUsage(upstream)
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: "response.failed", Response: &dto.OpenAIResponsesResponse{Usage: upstream}})
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: "response.failed", Response: &dto.OpenAIResponsesResponse{Usage: upstream}}, nil)
|
||||
}
|
||||
usage := accumulator.Finish()
|
||||
assert.Equal(t, 1, usage.CompletionTokens)
|
||||
@@ -103,7 +104,7 @@ func TestResponsesUsageAccumulatorInterruptedTextFallback(t *testing.T) {
|
||||
assert.Equal(t, 100, usage.PromptTokens)
|
||||
assert.Equal(t, 101, usage.TotalTokens)
|
||||
}
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: "response.output_text.delta", Delta: " late output"})
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{Type: "response.output_text.delta", Delta: " late output"}, nil)
|
||||
assert.Equal(t, usage, accumulator.Finish())
|
||||
assert.Equal(t, 1, usage.CompletionTokens)
|
||||
})
|
||||
@@ -144,11 +145,11 @@ func TestResponsesUsageAccumulatorDisconnectBillsCompletedImage(t *testing.T) {
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{
|
||||
Type: dto.ResponsesOutputTypeItemDone,
|
||||
Item: &dto.ResponsesOutput{ID: "complete-image", Type: dto.ResponsesOutputTypeImageGenerationCall, Status: "completed", Result: "final-image-data"},
|
||||
})
|
||||
}, nil)
|
||||
accumulator.Observe(&dto.ResponsesStreamResponse{
|
||||
Type: dto.ResponsesOutputTypeItemDone,
|
||||
Item: &dto.ResponsesOutput{ID: "partial-image", Type: dto.ResponsesOutputTypeImageGenerationCall, Status: "partial", Result: "partial-image-data"},
|
||||
})
|
||||
}, nil)
|
||||
usage := accumulator.Finish()
|
||||
assert.Zero(t, usage.TotalTokens)
|
||||
require.Contains(t, info.ResponsesUsageInfo.BuiltInTools, dto.BuildInToolImageGeneration)
|
||||
@@ -272,7 +273,7 @@ func TestResponsesUsageAccumulatorMissingUsageEstimation(t *testing.T) {
|
||||
{Type: dto.ResponsesOutputTypeItemDone, Item: &dto.ResponsesOutput{Type: dto.BuildInCallFunctionCall, Name: "shell"}},
|
||||
},
|
||||
wantPrompt: 100,
|
||||
wantCompletion: CountTextToken(summary+arguments, model),
|
||||
wantCompletion: tokenkit.Count(model, summary+arguments),
|
||||
},
|
||||
{
|
||||
name: "created only then disconnect bills the prompt",
|
||||
@@ -302,7 +303,7 @@ func TestResponsesUsageAccumulatorMissingUsageEstimation(t *testing.T) {
|
||||
}},
|
||||
},
|
||||
wantPrompt: 100,
|
||||
wantCompletion: CountTextToken("final answer", model),
|
||||
wantCompletion: tokenkit.Count(model, "final answer"),
|
||||
},
|
||||
{
|
||||
name: "explicit failure without usage bills nothing",
|
||||
@@ -330,7 +331,7 @@ func TestResponsesUsageAccumulatorMissingUsageEstimation(t *testing.T) {
|
||||
info.SetEstimatePromptTokens(100)
|
||||
accumulator := NewResponsesUsageAccumulator(info)
|
||||
for i := range tc.events {
|
||||
accumulator.Observe(&tc.events[i])
|
||||
accumulator.Observe(&tc.events[i], nil)
|
||||
}
|
||||
usage := accumulator.Finish()
|
||||
assert.Equal(t, tc.wantPrompt, usage.PromptTokens)
|
||||
|
||||
Reference in new issue
Block a user