Files
team-api/relaykit/dto/usage.go
T
2026-08-17 10:01:04 +08:00

174 lines
7.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package dto
import "encoding/json"
// Usage Token 使用量
type Usage struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
}
// UsageWithDetails 带 token 细分的 Usage(用于详细计费)
type UsageWithDetails struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
PromptTokensDetails *TokenDetails `json:"prompt_tokens_details,omitempty"`
CompletionTokenDetails *TokenDetails `json:"completion_tokens_details,omitempty"`
}
// TokenDetails Token 类型细分
type TokenDetails struct {
CachedTokens int `json:"cached_tokens,omitempty"`
CachedCreationTokens int `json:"cached_creation_tokens,omitempty"` // Claude cache_creation_input_tokens
CachedCreation5mTokens int `json:"cached_creation_5m_tokens,omitempty"` // Claude 5分钟缓存创建
CachedCreation1hTokens int `json:"cached_creation_1h_tokens,omitempty"` // Claude 1小时缓存创建
CacheWriteTokens int `json:"cache_write_tokens,omitempty"` // OpenAI Responses cache_write_tokens(观测字段,prompt_tokens 子集)
AudioTokens int `json:"audio_tokens,omitempty"`
TextTokens int `json:"text_tokens,omitempty"`
ImageTokens int `json:"image_tokens,omitempty"`
ReasoningTokens int `json:"reasoning_tokens,omitempty"`
AcceptedPredictionTokens int `json:"accepted_prediction_tokens,omitempty"`
RejectedPredictionTokens int `json:"rejected_prediction_tokens,omitempty"`
}
// CompletionsRequest 文本补全请求
type CompletionsRequest struct {
Model string `json:"model"`
Prompt any `json:"prompt"` // string 或 []string
MaxTokens *int `json:"max_tokens,omitempty"`
Temperature *float64 `json:"temperature,omitempty"`
TopP *float64 `json:"top_p,omitempty"`
N *int `json:"n,omitempty"`
Stream *bool `json:"stream,omitempty"`
StreamOptions *StreamOptions `json:"stream_options,omitempty"`
Stop any `json:"stop,omitempty"`
Suffix string `json:"suffix,omitempty"`
User string `json:"user,omitempty"`
Echo *bool `json:"echo,omitempty"`
LogProbs *bool `json:"logprobs,omitempty"`
TopLogProbs *int `json:"top_logprobs,omitempty"`
LogitBias map[string]int `json:"logit_bias,omitempty"`
PresencePenalty *float64 `json:"presence_penalty,omitempty"`
FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"`
BestOf *int `json:"best_of,omitempty"`
}
// CompletionsResponse 文本补全响应
type CompletionsResponse struct {
ID string `json:"id"`
Object string `json:"object"`
Created int64 `json:"created"`
Model string `json:"model"`
SystemFingerprint *string `json:"system_fingerprint,omitempty"`
Choices []CompletionsChoice `json:"choices"`
Usage UsageWithDetails `json:"usage"`
}
// CompletionsChoice 补全选择项
type CompletionsChoice struct {
Index int `json:"index"`
Text string `json:"text"`
FinishReason string `json:"finish_reason"`
LogProbs any `json:"logprobs,omitempty"`
}
// CompletionsStreamResponse 补全流式响应
type CompletionsStreamResponse struct {
ID string `json:"id"`
Object string `json:"object"`
Created int64 `json:"created"`
Model string `json:"model"`
SystemFingerprint *string `json:"system_fingerprint,omitempty"`
Choices []CompletionsStreamChoice `json:"choices"`
Usage *UsageWithDetails `json:"usage"`
}
// CompletionsStreamChoice 补全流式选择项
type CompletionsStreamChoice struct {
Index int `json:"index"`
Text string `json:"text"`
FinishReason *string `json:"finish_reason"`
}
// EmbeddingRequest 嵌入请求
type EmbeddingRequest struct {
Model string `json:"model"`
Input any `json:"input"` // string 或 []string
EncodingFormat string `json:"encoding_format,omitempty"`
Dimensions *int `json:"dimensions,omitempty"`
User string `json:"user,omitempty"`
}
// EmbeddingResponse 嵌入响应
type EmbeddingResponse struct {
Object string `json:"object"`
Data []Embedding `json:"data"`
Model string `json:"model"`
Usage UsageWithDetails `json:"usage"`
}
// Embedding 单个嵌入结果
type Embedding struct {
Object string `json:"object"`
Index int `json:"index"`
Embedding []float64 `json:"embedding"`
}
// ImageRequest 图像生成/编辑请求(兼容 OpenAI /v1/images/generations 和 /v1/images/edits)
type ImageRequest struct {
Model string `json:"model"`
Prompt string `json:"prompt"`
N *int `json:"n,omitempty"`
Size string `json:"size,omitempty"`
Quality string `json:"quality,omitempty"`
ResponseFormat string `json:"response_format,omitempty"`
Style string `json:"style,omitempty"`
User string `json:"user,omitempty"`
OutputFormat string `json:"output_format,omitempty"`
OutputCompression *int `json:"output_compression,omitempty"`
Background string `json:"background,omitempty"`
Moderation string `json:"moderation,omitempty"`
PartialImages *int `json:"partial_images,omitempty"`
Stream *bool `json:"stream,omitempty"`
Image json.RawMessage `json:"image,omitempty"` // 单张图片(multipart 文件或 JSON base64)
Images json.RawMessage `json:"images,omitempty"` // 多张参考图片(JSON base64 数组)
Mask json.RawMessage `json:"mask,omitempty"` // 编辑遮罩(multipart 文件或 JSON base64)
InputFidelity json.RawMessage `json:"input_fidelity,omitempty"` // 输入保真度控制
Watermark *bool `json:"watermark,omitempty"` // 水印控制
}
// ImageResponse 图像生成响应
type ImageResponse struct {
Created int64 `json:"created"`
Data []ImageData `json:"data"`
Background string `json:"background,omitempty"`
OutputFormat string `json:"output_format,omitempty"`
Size string `json:"size,omitempty"`
Quality string `json:"quality,omitempty"`
Usage *ImageUsage `json:"usage,omitempty"`
}
// ImageData 单个图像数据
type ImageData struct {
URL string `json:"url,omitempty"`
B64JSON string `json:"b64_json,omitempty"`
RevisedPrompt string `json:"revised_prompt,omitempty"`
ContentType string `json:"content_type,omitempty"`
}
// ImageUsage GPT Image token 用量(gpt-image-1, gpt-image-2)
type ImageUsage struct {
TotalTokens int `json:"total_tokens"`
InputTokens int `json:"input_tokens"`
OutputTokens int `json:"output_tokens"`
InputTokensDetails *ImageTokenDetails `json:"input_tokens_details,omitempty"`
}
// ImageTokenDetails GPT Image 输入 token 细分
type ImageTokenDetails struct {
TextTokens int `json:"text_tokens"`
ImageTokens int `json:"image_tokens"`
}