You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

343 lines
9.6 KiB

syntax = "v1"
// ========== AI Chat Types ==========
type (
AIChatMessage {
Role string `json:"role"`
Content string `json:"content"`
}
AIChatCompletionRequest {
Model string `json:"model"`
Messages []AIChatMessage `json:"messages"`
Stream bool `json:"stream,optional"`
MaxTokens int `json:"max_tokens,optional"`
Temperature float64 `json:"temperature,optional"`
ConversationId int64 `json:"conversation_id,optional,string"`
}
AIChatCompletionChoice {
Index int `json:"index"`
FinishReason string `json:"finish_reason"`
Message AIChatMessage `json:"message"`
}
AIChatCompletionUsage {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
}
AIChatCompletionResponse {
Id string `json:"id"`
Object string `json:"object"`
Model string `json:"model"`
Choices []AIChatCompletionChoice `json:"choices"`
Usage AIChatCompletionUsage `json:"usage"`
}
)
// ========== Conversation Types ==========
type (
AIConversationInfo {
Id int64 `json:"id,string"`
Title string `json:"title"`
ModelId string `json:"modelId"`
ProviderId int64 `json:"providerId,string"`
TotalTokens int64 `json:"totalTokens"`
TotalCost float64 `json:"totalCost"`
IsArchived bool `json:"isArchived"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
AIMessageInfo {
Id int64 `json:"id,string"`
ConversationId int64 `json:"conversationId,string"`
Role string `json:"role"`
Content string `json:"content"`
TokenCount int `json:"tokenCount"`
Cost float64 `json:"cost"`
ModelId string `json:"modelId"`
LatencyMs int `json:"latencyMs"`
CreatedAt string `json:"createdAt"`
}
AIConversationListRequest {
Page int64 `form:"page,optional,default=1"`
PageSize int64 `form:"pageSize,optional,default=20"`
}
AIConversationListResponse {
List []AIConversationInfo `json:"list"`
Total int64 `json:"total"`
}
AIConversationCreateRequest {
Title string `json:"title,optional"`
ModelId string `json:"modelId,optional"`
}
AIConversationGetRequest {
Id int64 `path:"id"`
}
AIConversationDetailResponse {
Conversation AIConversationInfo `json:"conversation"`
Messages []AIMessageInfo `json:"messages"`
}
AIConversationUpdateRequest {
Id int64 `path:"id"`
Title string `json:"title"`
}
AIConversationDeleteRequest {
Id int64 `path:"id"`
}
)
// ========== Provider Types ==========
type (
AIProviderInfo {
Id int64 `json:"id,string"`
Name string `json:"name"`
DisplayName string `json:"displayName"`
BaseUrl string `json:"baseUrl"`
SdkType string `json:"sdkType"`
Protocol string `json:"protocol"`
IsActive bool `json:"isActive"`
SortOrder int `json:"sortOrder"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
AIProviderListRequest {
Page int64 `form:"page,optional,default=1"`
PageSize int64 `form:"pageSize,optional,default=50"`
}
AIProviderListResponse {
List []AIProviderInfo `json:"list"`
Total int64 `json:"total"`
}
AIProviderCreateRequest {
Name string `json:"name"`
DisplayName string `json:"displayName"`
BaseUrl string `json:"baseUrl"`
SdkType string `json:"sdkType"`
Protocol string `json:"protocol,optional,default=openai"`
SortOrder int `json:"sortOrder,optional"`
}
AIProviderUpdateRequest {
Id int64 `path:"id"`
DisplayName string `json:"displayName,optional"`
BaseUrl string `json:"baseUrl,optional"`
SdkType string `json:"sdkType,optional"`
Protocol string `json:"protocol,optional"`
IsActive bool `json:"isActive,optional"`
SortOrder int `json:"sortOrder,optional"`
}
AIProviderDeleteRequest {
Id int64 `path:"id"`
}
)
// ========== Model Types ==========
type (
AIModelInfo {
Id int64 `json:"id,string"`
ProviderId int64 `json:"providerId,string"`
ProviderName string `json:"providerName"`
ModelId string `json:"modelId"`
DisplayName string `json:"displayName"`
InputPrice float64 `json:"inputPrice"`
OutputPrice float64 `json:"outputPrice"`
MaxTokens int `json:"maxTokens"`
ContextWindow int `json:"contextWindow"`
SupportsStream bool `json:"supportsStream"`
SupportsVision bool `json:"supportsVision"`
}
AIModelListResponse {
List []AIModelInfo `json:"list"`
}
AIModelCreateRequest {
ProviderId int64 `json:"providerId,string"`
ModelId string `json:"modelId"`
DisplayName string `json:"displayName"`
InputPrice float64 `json:"inputPrice"`
OutputPrice float64 `json:"outputPrice"`
MaxTokens int `json:"maxTokens,optional,default=4096"`
ContextWindow int `json:"contextWindow,optional,default=128000"`
SupportsStream bool `json:"supportsStream,optional"`
SupportsVision bool `json:"supportsVision,optional"`
}
AIModelUpdateRequest {
Id int64 `path:"id"`
DisplayName string `json:"displayName,optional"`
InputPrice float64 `json:"inputPrice,optional"`
OutputPrice float64 `json:"outputPrice,optional"`
MaxTokens int `json:"maxTokens,optional"`
ContextWindow int `json:"contextWindow,optional"`
SupportsStream bool `json:"supportsStream,optional"`
SupportsVision bool `json:"supportsVision,optional"`
IsActive bool `json:"isActive,optional"`
}
AIModelDeleteRequest {
Id int64 `path:"id"`
}
)
// ========== API Key Types ==========
type (
AIApiKeyInfo {
Id int64 `json:"id,string"`
ProviderId int64 `json:"providerId,string"`
ProviderName string `json:"providerName"`
UserId int64 `json:"userId,string"`
KeyPreview string `json:"keyPreview"`
IsActive bool `json:"isActive"`
Remark string `json:"remark"`
CreatedAt string `json:"createdAt"`
}
AIApiKeyListRequest {
Page int64 `form:"page,optional,default=1"`
PageSize int64 `form:"pageSize,optional,default=20"`
}
AIApiKeyListResponse {
List []AIApiKeyInfo `json:"list"`
Total int64 `json:"total"`
}
AIApiKeyCreateRequest {
ProviderId int64 `json:"providerId,string"`
KeyValue string `json:"keyValue"`
Remark string `json:"remark,optional"`
}
AIApiKeyUpdateRequest {
Id int64 `path:"id"`
KeyValue string `json:"keyValue,optional"`
IsActive bool `json:"isActive,optional"`
Remark string `json:"remark,optional"`
}
AIApiKeyDeleteRequest {
Id int64 `path:"id"`
}
)
// ========== Quota Types ==========
type (
AIQuotaInfo {
Balance float64 `json:"balance"`
TotalRecharged float64 `json:"totalRecharged"`
TotalConsumed float64 `json:"totalConsumed"`
FrozenAmount float64 `json:"frozenAmount"`
}
AIQuotaUserInfo {
UserId int64 `json:"userId,string"`
Username string `json:"username"`
Balance float64 `json:"balance"`
TotalRecharged float64 `json:"totalRecharged"`
TotalConsumed float64 `json:"totalConsumed"`
FrozenAmount float64 `json:"frozenAmount"`
}
AIQuotaListRequest {
Page int64 `form:"page,optional,default=1"`
PageSize int64 `form:"pageSize,optional,default=20"`
}
AIQuotaListResponse {
List []AIQuotaUserInfo `json:"list"`
Total int64 `json:"total"`
}
AIQuotaRechargeRequest {
UserId int64 `json:"userId,string"`
Amount float64 `json:"amount"`
Remark string `json:"remark,optional"`
}
)
// ========== Usage Record Types ==========
type (
AIUsageRecordInfo {
Id int64 `json:"id,string"`
UserId int64 `json:"userId,string"`
Username string `json:"username"`
ProviderId int64 `json:"providerId,string"`
ProviderName string `json:"providerName"`
ModelId string `json:"modelId"`
InputTokens int `json:"inputTokens"`
OutputTokens int `json:"outputTokens"`
Cost float64 `json:"cost"`
Status string `json:"status"`
LatencyMs int `json:"latencyMs"`
ErrorMessage string `json:"errorMessage"`
CreatedAt string `json:"createdAt"`
}
AIUsageRecordListRequest {
Page int64 `form:"page,optional,default=1"`
PageSize int64 `form:"pageSize,optional,default=20"`
UserId int64 `form:"userId,optional"`
ModelId string `form:"modelId,optional"`
Status string `form:"status,optional"`
}
AIUsageRecordListResponse {
List []AIUsageRecordInfo `json:"list"`
Total int64 `json:"total"`
}
)
// ========== Stats Types ==========
type (
AIUsageStatsResponse {
TotalCalls int64 `json:"totalCalls"`
TotalTokens int64 `json:"totalTokens"`
TotalCost float64 `json:"totalCost"`
TotalUsers int64 `json:"totalUsers"`
ModelStats []AIModelStatItem `json:"modelStats"`
DailyStats []AIDailyStatItem `json:"dailyStats"`
}
AIModelStatItem {
ModelId string `json:"modelId"`
Calls int64 `json:"calls"`
InputTokens int64 `json:"inputTokens"`
OutputTokens int64 `json:"outputTokens"`
TotalCost float64 `json:"totalCost"`
}
AIDailyStatItem {
Date string `json:"date"`
Calls int64 `json:"calls"`
TotalTokens int64 `json:"totalTokens"`
TotalCost float64 `json:"totalCost"`
}
AIUsageStatsRequest {
Days int `form:"days,optional,default=30"`
}
)