Browse Source
- AIProvider, AIModel, AIApiKey (platform config) - AIConversation, AIChatMessage (chat data) - AIUsageRecord, AIUserQuota (billing data) - AutoMigrate updated in servicecontext.gomaster
8 changed files with 163 additions and 1 deletions
@ -0,0 +1,20 @@ |
|||
package model |
|||
|
|||
import "time" |
|||
|
|||
// AIApiKey AI API密钥
|
|||
type AIApiKey struct { |
|||
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` |
|||
ProviderId int64 `gorm:"column:provider_id;index;not null" json:"providerId"` |
|||
UserId int64 `gorm:"column:user_id;index;default:0" json:"userId"` |
|||
KeyValue string `gorm:"column:key_value;type:text;not null" json:"-"` |
|||
IsActive bool `gorm:"column:is_active;default:true" json:"isActive"` |
|||
Remark string `gorm:"column:remark;type:varchar(255)" json:"remark"` |
|||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"createdAt"` |
|||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updatedAt"` |
|||
} |
|||
|
|||
// TableName 指定表名
|
|||
func (AIApiKey) TableName() string { |
|||
return "ai_api_key" |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
package model |
|||
|
|||
import "time" |
|||
|
|||
// AIChatMessage AI聊天消息
|
|||
type AIChatMessage struct { |
|||
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` |
|||
ConversationId int64 `gorm:"column:conversation_id;index;not null" json:"conversationId"` |
|||
Role string `gorm:"column:role;type:varchar(20);not null" json:"role"` |
|||
Content string `gorm:"column:content;type:longtext" json:"content"` |
|||
TokenCount int `gorm:"column:token_count;default:0" json:"tokenCount"` |
|||
Cost float64 `gorm:"column:cost;type:decimal(10,6);default:0" json:"cost"` |
|||
ModelId string `gorm:"column:model_id;type:varchar(100)" json:"modelId"` |
|||
LatencyMs int `gorm:"column:latency_ms;default:0" json:"latencyMs"` |
|||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"createdAt"` |
|||
} |
|||
|
|||
// TableName 指定表名
|
|||
func (AIChatMessage) TableName() string { |
|||
return "ai_chat_message" |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
package model |
|||
|
|||
import "time" |
|||
|
|||
// AIConversation AI对话
|
|||
type AIConversation struct { |
|||
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` |
|||
UserId int64 `gorm:"column:user_id;index;not null" json:"userId"` |
|||
Title string `gorm:"column:title;type:varchar(200);default:'新对话'" json:"title"` |
|||
ModelId string `gorm:"column:model_id;type:varchar(100)" json:"modelId"` |
|||
ProviderId int64 `gorm:"column:provider_id;default:0" json:"providerId"` |
|||
TotalTokens int64 `gorm:"column:total_tokens;default:0" json:"totalTokens"` |
|||
TotalCost float64 `gorm:"column:total_cost;type:decimal(10,6);default:0" json:"totalCost"` |
|||
IsArchived bool `gorm:"column:is_archived;default:false" json:"isArchived"` |
|||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"createdAt"` |
|||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updatedAt"` |
|||
} |
|||
|
|||
// TableName 指定表名
|
|||
func (AIConversation) TableName() string { |
|||
return "ai_conversation" |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
package model |
|||
|
|||
import "time" |
|||
|
|||
// AIModel AI模型配置
|
|||
type AIModel struct { |
|||
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` |
|||
ProviderId int64 `gorm:"column:provider_id;index;not null" json:"providerId"` |
|||
ModelId string `gorm:"column:model_id;type:varchar(100);not null" json:"modelId"` |
|||
DisplayName string `gorm:"column:display_name;type:varchar(100)" json:"displayName"` |
|||
InputPrice float64 `gorm:"column:input_price;type:decimal(10,6);default:0" json:"inputPrice"` |
|||
OutputPrice float64 `gorm:"column:output_price;type:decimal(10,6);default:0" json:"outputPrice"` |
|||
MaxTokens int `gorm:"column:max_tokens;default:4096" json:"maxTokens"` |
|||
ContextWindow int `gorm:"column:context_window;default:128000" json:"contextWindow"` |
|||
SupportsStream bool `gorm:"column:supports_stream;default:true" json:"supportsStream"` |
|||
SupportsVision bool `gorm:"column:supports_vision;default:false" json:"supportsVision"` |
|||
IsActive bool `gorm:"column:is_active;default:true" json:"isActive"` |
|||
SortOrder int `gorm:"column:sort_order;default:0" json:"sortOrder"` |
|||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"createdAt"` |
|||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updatedAt"` |
|||
} |
|||
|
|||
// TableName 指定表名
|
|||
func (AIModel) TableName() string { |
|||
return "ai_model" |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
package model |
|||
|
|||
import "time" |
|||
|
|||
// AIProvider AI供应商模型
|
|||
type AIProvider struct { |
|||
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` |
|||
Name string `gorm:"column:name;type:varchar(50);uniqueIndex;not null" json:"name"` |
|||
DisplayName string `gorm:"column:display_name;type:varchar(100);not null" json:"displayName"` |
|||
BaseUrl string `gorm:"column:base_url;type:varchar(255)" json:"baseUrl"` |
|||
SdkType string `gorm:"column:sdk_type;type:varchar(20);default:'openai_compat'" json:"sdkType"` |
|||
Protocol string `gorm:"column:protocol;type:varchar(20);default:'openai'" json:"protocol"` |
|||
IsActive bool `gorm:"column:is_active;default:true" json:"isActive"` |
|||
SortOrder int `gorm:"column:sort_order;default:0" json:"sortOrder"` |
|||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"createdAt"` |
|||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updatedAt"` |
|||
} |
|||
|
|||
// TableName 指定表名
|
|||
func (AIProvider) TableName() string { |
|||
return "ai_provider" |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
package model |
|||
|
|||
import "time" |
|||
|
|||
// AIUsageRecord AI使用记录
|
|||
type AIUsageRecord struct { |
|||
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` |
|||
UserId int64 `gorm:"column:user_id;index;not null" json:"userId"` |
|||
ProviderId int64 `gorm:"column:provider_id;index" json:"providerId"` |
|||
ModelId string `gorm:"column:model_id;type:varchar(100)" json:"modelId"` |
|||
InputTokens int `gorm:"column:input_tokens;default:0" json:"inputTokens"` |
|||
OutputTokens int `gorm:"column:output_tokens;default:0" json:"outputTokens"` |
|||
Cost float64 `gorm:"column:cost;type:decimal(10,6);default:0" json:"cost"` |
|||
ApiKeyId int64 `gorm:"column:api_key_id;default:0" json:"apiKeyId"` |
|||
Status string `gorm:"column:status;type:varchar(20);default:'ok'" json:"status"` |
|||
LatencyMs int `gorm:"column:latency_ms;default:0" json:"latencyMs"` |
|||
ErrorMessage string `gorm:"column:error_message;type:text" json:"errorMessage"` |
|||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"createdAt"` |
|||
} |
|||
|
|||
// TableName 指定表名
|
|||
func (AIUsageRecord) TableName() string { |
|||
return "ai_usage_record" |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
package model |
|||
|
|||
import "time" |
|||
|
|||
// AIUserQuota AI用户额度
|
|||
type AIUserQuota struct { |
|||
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` |
|||
UserId int64 `gorm:"column:user_id;uniqueIndex;not null" json:"userId"` |
|||
Balance float64 `gorm:"column:balance;type:decimal(10,4);default:0" json:"balance"` |
|||
TotalRecharged float64 `gorm:"column:total_recharged;type:decimal(10,4);default:0" json:"totalRecharged"` |
|||
TotalConsumed float64 `gorm:"column:total_consumed;type:decimal(10,4);default:0" json:"totalConsumed"` |
|||
FrozenAmount float64 `gorm:"column:frozen_amount;type:decimal(10,4);default:0" json:"frozenAmount"` |
|||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updatedAt"` |
|||
} |
|||
|
|||
// TableName 指定表名
|
|||
func (AIUserQuota) TableName() string { |
|||
return "ai_user_quota" |
|||
} |
|||
Loading…
Reference in new issue