mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-11 14:41:21 +00:00
* feat(relaykit): preserve hosted tools across conversions - add protocol-neutral hosted-tool DTOs, conversion metadata, and loss policies - bridge citations, grounding metadata, and hosted-tool stream lifecycles - document the public conversion behavior and channel policy controls * refactor(relaykit): normalize reasoning and thinking intent - centralize provider-neutral reasoning intent, effort, and budget mappings - parse model suffixes at the host entry boundary while preserving provider-owned tails - keep adaptive Claude thinking and explicit zero-token compatibility consistent * fix(billing): preserve authoritative usage across relay hops - carry native BillingUsage sidecars through direct and streamed protocol bridges - merge partial and terminal usage monotonically with safe fallback settlement - retain cache metadata, penultimate usage, and per-call Gemini tool surcharges * feat(relay): bridge Responses with Claude and Gemini protocols - add direct request, response, and stream converters across supported relay formats - expose Claude count_tokens and Chat-to-Responses compatibility endpoints - carry conversion diagnostics through the host while retaining the curated public goldens * fix(relay): wire relaykit conversions into host channels - connect handlers, adaptors, and channel settings to the standalone conversion layer - keep model mapping, pricing identity, retries, and provider-specific suffix behavior aligned - ignore local audit artifacts and retain focused public regression coverage
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package convmeta
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/QuantumNous/new-api/relaykit/types"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestValuesTypedNilMetaIsSafe(t *testing.T) {
|
|
var values *Values
|
|
var meta Meta = values
|
|
|
|
assert.Empty(t, meta.GetOriginModelName())
|
|
assert.Empty(t, meta.GetUpstreamModelName())
|
|
assert.False(t, meta.HasChannelMeta())
|
|
assert.Zero(t, meta.GetChannelID())
|
|
assert.Zero(t, meta.GetChannelType())
|
|
assert.False(t, meta.GetIsStream())
|
|
assert.Empty(t, meta.GetReasoningEffort())
|
|
assert.Nil(t, meta.ReasoningState())
|
|
assert.Zero(t, meta.GetEstimatePromptTokens())
|
|
assert.Zero(t, meta.GetSendResponseCount())
|
|
|
|
require.NotPanics(t, func() {
|
|
meta.SetReasoningEffort("high")
|
|
meta.IncrSendResponseCount()
|
|
meta.AppendRequestConversion(types.RelayFormatClaude)
|
|
})
|
|
|
|
convertInfo := meta.EnsureClaudeConvertInfo()
|
|
require.NotNil(t, convertInfo)
|
|
assert.Equal(t, LastMessageTypeNone, convertInfo.LastMessagesType)
|
|
require.NotNil(t, meta.ConvOptions())
|
|
require.NotNil(t, OptionsOf(meta))
|
|
assert.Empty(t, UpstreamModelName(meta))
|
|
assert.Zero(t, ChannelTypeOf(meta))
|
|
}
|