* fix(cpa): 修正 Anthropic 流式转换的输入用量统计 * fix(usage): 统一 Anthropic 流式用量修正 * fix(usage): 保留原生流未采集时的执行层用量
40 lines
1.4 KiB
Go
40 lines
1.4 KiB
Go
package dialect
|
|
|
|
import "gpt-load/internal/usage"
|
|
|
|
// UsageExtractor optionally exposes provider-specific usage extraction.
|
|
type UsageExtractor interface {
|
|
// ExtractUsage consumes a borrowed body valid only for this call.
|
|
// Implementations must not mutate or retain it.
|
|
ExtractUsage(body []byte) (usage.Result, error)
|
|
NewUsageStreamExtractor() UsageStreamExtractor
|
|
}
|
|
|
|
// UsageStreamExtractor extracts usage from one provider response stream.
|
|
type UsageStreamExtractor interface {
|
|
// Observe consumes a borrowed payload valid only for this call.
|
|
// Implementations must not mutate or retain it.
|
|
Observe(payload []byte) error
|
|
Finalize() (usage.Result, bool)
|
|
}
|
|
|
|
// UsageStreamSnapshotExtractor lets an adapter normalize protocol conversions
|
|
// from the observed usage without ending the upstream stream.
|
|
type UsageStreamSnapshotExtractor interface {
|
|
UsageStreamExtractor
|
|
Snapshot() usage.Result
|
|
}
|
|
|
|
// StreamUsageInjector optionally derives an OpenAI streaming request that asks
|
|
// the upstream to include terminal usage in the response stream.
|
|
type StreamUsageInjector interface {
|
|
InjectStreamUsage(req *ParsedRequest) (*ParsedRequest, error)
|
|
}
|
|
|
|
var _ UsageExtractor = (*OpenAI)(nil)
|
|
var _ UsageExtractor = (*OpenAIResponses)(nil)
|
|
var _ UsageExtractor = (*OpenAIImages)(nil)
|
|
var _ UsageExtractor = (*Anthropic)(nil)
|
|
var _ UsageExtractor = (*Gemini)(nil)
|
|
var _ StreamUsageInjector = (*OpenAI)(nil)
|