package canonical

// CanonicalModel 规范模型
type CanonicalModel struct {
	ID      string `json:"id"`
	Name    string `json:"name,omitempty"`
	Created int64  `json:"created,omitempty"`
	OwnedBy string `json:"owned_by,omitempty"`
}

// CanonicalModelList 规范模型列表
type CanonicalModelList struct {
	Models []CanonicalModel `json:"models"`
}

// CanonicalModelInfo 规范模型详情
type CanonicalModelInfo struct {
	ID      string `json:"id"`
	Name    string `json:"name,omitempty"`
	Created int64  `json:"created,omitempty"`
	OwnedBy string `json:"owned_by,omitempty"`
}

// CanonicalEmbeddingRequest 规范嵌入请求
type CanonicalEmbeddingRequest struct {
	Model          string `json:"model"`
	Input          any    `json:"input"` // string 或 []string
	EncodingFormat string `json:"encoding_format,omitempty"`
	Dimensions     *int   `json:"dimensions,omitempty"`
}

// CanonicalEmbeddingResponse 规范嵌入响应
type CanonicalEmbeddingResponse struct {
	Data  []EmbeddingData `json:"data"`
	Model string          `json:"model"`
	Usage EmbeddingUsage  `json:"usage"`
}

// EmbeddingData 嵌入数据项
type EmbeddingData struct {
	Index     int `json:"index"`
	Embedding any `json:"embedding"` // 根据格式不同可能是 []float64 或 base64 字符串
}

// EmbeddingUsage 嵌入用量
type EmbeddingUsage struct {
	PromptTokens int `json:"prompt_tokens"`
	TotalTokens  int `json:"total_tokens"`
}

// CanonicalRerankRequest 规范重排序请求
type CanonicalRerankRequest struct {
	Model           string   `json:"model"`
	Query           string   `json:"query"`
	Documents       []string `json:"documents"`
	TopN            *int     `json:"top_n,omitempty"`
	ReturnDocuments *bool    `json:"return_documents,omitempty"`
}

// CanonicalRerankResponse 规范重排序响应
type CanonicalRerankResponse struct {
	Results []RerankResult `json:"results"`
	Model   string         `json:"model"`
}

// RerankResult 重排序结果项
type RerankResult struct {
	Index          int     `json:"index"`
	RelevanceScore float64 `json:"relevance_score"`
	Document       *string `json:"document,omitempty"`
}
