260 lines
9.3 KiB
Markdown
260 lines
9.3 KiB
Markdown
# ai 繪圖
|
|
|
|
用戶:
|
|
|
|
```go
|
|
type User struct {
|
|
ID int `json:"id" gorm:"primary_key"`
|
|
Name string `json:"name"`
|
|
Email string `json:"email" gorm:"unique;not null"`
|
|
Password string `json:"-"`
|
|
Slat string `json:"-"`
|
|
Admin bool `json:"admin"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/users](/api/users) 用戶列表
|
|
- [x] POST [/api/users](/api/users) 創建用戶 `{email:'', password:'', name:''}`
|
|
- [x] GET [/api/users](/api/users) 查詢指定用戶
|
|
- [x] PATCH [/api/users/{id}](/api/users/{id}) 修改指定用戶
|
|
- [x] DELETE [/api/users/{id}](/api/users/{id}) 刪除指定用戶
|
|
|
|
|
|
會話:
|
|
|
|
```go
|
|
type Session struct {
|
|
ID string `json:"id" gorm:"primary_key"`
|
|
IP string `json:"ip"`
|
|
UserID int `json:"user_id"`
|
|
UserAgent string `json:"user_agent"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/sessions](/api/sessions) 會話列表
|
|
- [x] POST [/api/sessions](/api/sessions) 登錄賬戶(創建會話) `{email:'', password:''}`
|
|
- [x] GET [/api/sessions/{id}](/api/sessions/{id}) 查詢會話詳情
|
|
- [x] PATCH [/api/sessions/{id}](/api/sessions/{id}) 修改會話狀態
|
|
- [x] DELETE [/api/sessions/{id}](/api/sessions/{id}) 註銷登錄(刪除指定會話)
|
|
|
|
|
|
數據集:
|
|
|
|
```go
|
|
type Dataset struct {
|
|
ID int `json:"id" gorm:"primary_key"`
|
|
Name string `json:"name"`
|
|
Info string `json:"info"`
|
|
Images ImageList `json:"images"`
|
|
UserID int `json:"user_id"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
|
|
type ImageList []string // image URL
|
|
```
|
|
|
|
- [x] GET [/api/datasets](/api/datasets) 數據集列表
|
|
- [x] POST [/api/datasets](/api/datasets) 創建數據集 `{images:['https://oss..']}`
|
|
- [x] GET [/api/datasets/{id}](/api/datasets/{id}) 查詢指定數據集
|
|
- [x] PATCH [/api/datasets/{id}](/api/datasets/{id}) 修改指定數據集
|
|
- [x] DELETE [/api/datasets/{id}](/api/datasets/{id}) 刪除指定數據集
|
|
|
|
|
|
標籤:
|
|
|
|
```go
|
|
type Tag struct {
|
|
ID int `json:"id" gorm:"primary_key"`
|
|
Name string `json:"name"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/tags](/api/tags) 標籤列表(全部)
|
|
- [x] POST [/api/tags](/api/tags) 創建標籤 `{name:''}`
|
|
- [x] GET [/api/tags/{id}](/api/tags/{id}) 標籤詳情
|
|
- [x] PATCH [/api/tags/{id}](/api/tags/{id}) 修改標籤
|
|
- [x] DELETE [/api/tags/{id}](/api/tags/{id}) 刪除標籤
|
|
|
|
|
|
模型:
|
|
|
|
```go
|
|
type Model struct {
|
|
ID int `json:"id" gorm:"primary_key"`
|
|
Name string `json:"name"`
|
|
Type string `json:"type"` // (lora|ckp|hyper|ti)
|
|
TriggerWords string `json:"trigger_words"` // 觸發詞
|
|
BaseModel string `json:"base_model"` // (SD1.5|SD2)
|
|
ModelPath string `json:"model_path"` // 模型路徑
|
|
Status string `json:"status" default:"initial"` // (initial|ready|waiting|running|success|error)
|
|
Progress int `json:"progress"` // (0-100)
|
|
Image string `json:"image"` // 封面圖片實際地址
|
|
Hash string `json:"hash"` // 模型哈希值
|
|
Epochs int `json:"epochs"` // 訓練步數
|
|
Tags TagList `json:"tags"`
|
|
UserID int `json:"user_id"`
|
|
DatasetID int `json:"dataset_id"`
|
|
ServerID int `json:"server_id"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/models](/api/models) 模型列表(全部)
|
|
- [x] GET [/api/models?user_id=xxx](/api/models?user_id=xxx) 模型列表(指定用戶的)
|
|
- [x] GET [/api/models?tag=動物](/api/models?tag=xxx) 模型列表(指定標籤的)
|
|
- [x] GET [/api/models?sort=hot](/api/models?sort=hot) 圖片列表(熱門)
|
|
- [x] GET [/api/models?sort=createdAt](/api/models?sort=createdAt) 圖片列表(最新)
|
|
- [x] GET [/api/models?search=布穀鳥](/api/models?search=布穀鳥) 圖片列表(關鍵詞搜索)
|
|
- [x] PATCH [/api/models/{id}](/api/models/{id}) 修改指定模型
|
|
- [x] DELETE [/api/models/{id}](/api/models/{id}) 刪除指定模型
|
|
|
|
|
|
圖像:
|
|
|
|
```go
|
|
type Image struct {
|
|
ID int `json:"id" gorm:"primary_key"`
|
|
Name string `json:"name"`
|
|
Width int `json:"width"`
|
|
Height int `json:"height"`
|
|
Prompt string `json:"prompt"`
|
|
NegativePrompt string `json:"negative_prompt"`
|
|
NumInferenceSteps int `json:"num_inference_steps"` // Number of inference steps (minimum: 1; maximum: 500)
|
|
GuidanceScale float32 `json:"guidance_scale"` // Scale for classifier-free guidance (minimum: 1; maximum: 20)
|
|
Scheduler string `json:"scheduler"` // (DDIM|K_EULER|DPMSolverMultistep|K_EULER_ANCESTRAL|PNDM|KLMS)
|
|
Seed int `json:"seed"` // Random seed (minimum: 0; maximum: 2147483647)
|
|
FromImage string `json:"from_image"` // Image to start from
|
|
UserID int `json:"user_id"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/images](/api/images) 圖片列表(全部)
|
|
- [x] GET [/api/images?user_id=xxx](/api/images?user_id=xxx) 圖片列表(指定用戶的)
|
|
- [x] GET [/api/images?tag=xxx](/api/images?tag=xxx) 圖片列表(指定標籤的)
|
|
|
|
|
|
任務:
|
|
|
|
```go
|
|
type Task struct {
|
|
ID int `json:"id" gorm:"primary_key"`
|
|
Name string `json:"name"`
|
|
Type string `json:"type"` // 任務類型(訓練|推理)
|
|
Status string `json:"status"` // (initial|ready|waiting|running|success|error)
|
|
Progress int `json:"progress"` // (0-100)
|
|
UserID int `json:"user_id"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/tasks](/api/tasks) 任務列表(全部任務)
|
|
- [x] POST [/api/tasks](/api/tasks) 創建任務
|
|
|
|
|
|
參數:
|
|
|
|
```go
|
|
type Param struct {
|
|
// 字段不固定
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/params](/api/params) 參數列表(全部參數)
|
|
- [x] GET [/api/params/model](/api/params/model) 模型參數
|
|
|
|
|
|
|
|
賬戶:
|
|
|
|
```go
|
|
type Account struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
Admin bool `json:"admin"`
|
|
SessionID string `json:"session_id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/account](/api/account) 當前賬戶信息
|
|
- [x] GET [/api/account](/api/account) 當前賬戶信息
|
|
|
|
|
|
服務器:
|
|
|
|
```go
|
|
type Server struct {
|
|
ID int `json:"id" gorm:"primary_key"`
|
|
Name string `json:"name"`
|
|
Type string `json:"type"` // (訓練|推理)
|
|
IP string `json:"ip"`
|
|
Port int `json:"port"`
|
|
Status string `json:"status"` // (異常|初始化|閒置|就緒|工作中|關閉中)
|
|
UserName string `json:"username"`
|
|
Password string `json:"password"`
|
|
Models []map[string]interface{} `json:"models" gorm:"-"` // 數據庫不必保存
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
```
|
|
|
|
- [x] GET [/api/servers](/api/servers) 服務器列表
|
|
|
|
|
|
列表模型:
|
|
```go
|
|
type ListView struct {
|
|
Page int `json:"page"` // 当前页码
|
|
PageSize int `json:"page_size"` // 分頁大小
|
|
Total int `json:"total"` // 數據總量
|
|
Next bool `json:"next"` // 可否翻頁
|
|
List []interface{} `json:"list"` // 數據列表
|
|
}
|
|
|
|
```
|
|
|
|
|
|
-----------------------------------------------------------
|
|
|
|
|
|
列表接口-請求方式
|
|
|
|
Method | URL | Info
|
|
-------|--------------------------------|------------------
|
|
GET | /api/{name} | 分頁:顺序查询
|
|
GET | /api/{name}?page=1&pageSize=20 | 分頁:页码和數量
|
|
GET | /api/{name}?user_id=1234 | 篩選:按用戶
|
|
GET | /api/{name}?tag=xxx | 篩選:按標籤
|
|
GET | /api/{name}?public=true | 篩選:公開狀態(true|false)
|
|
POST | /api/{name} | 篩選:創建新對象
|
|
|
|
* 選取條件有多個的,以逗號分隔(並集)
|
|
* 過濾條件有多個的,複寫query(交集)
|
|
|
|
|
|
詳情接口-請求方式:
|
|
|
|
Method | URL | Info
|
|
-------|--------------------------------|------------------
|
|
GET | /api/{name}/{item_id} | 獲取對象詳情
|
|
PATCH | /api/{name}/{item_id} | 修改對象字段
|
|
DELETE | /api/{name}/{item_id} | 刪除對象
|
|
WS | /api/{name}/{item_id} | Websocket 連接對象
|
|
|
|
|
|
* GET查詢以外的操作都必須在headers中攜帶token驗證身份權限
|
|
* GET查詢私有模型也必須登錄, 否則不會被展示
|