133 lines
4.3 KiB
Go
133 lines
4.3 KiB
Go
|
|
package ragflow
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"context"
|
|||
|
|
"fmt"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// Document 结构体
|
|||
|
|
type Document struct {
|
|||
|
|
Id string `json:"id"`
|
|||
|
|
DatasetId string `json:"dataset_id"`
|
|||
|
|
Name string `json:"name"`
|
|||
|
|
Size int64 `json:"size"`
|
|||
|
|
Location string `json:"location"`
|
|||
|
|
CreatedBy string `json:"created_by"`
|
|||
|
|
CreateTime int64 `json:"create_time"`
|
|||
|
|
Thumbnail string `json:"thumbnail"`
|
|||
|
|
Type string `json:"type"`
|
|||
|
|
RunStatus string `json:"run_status"` // 对应 API 返回的 "run" 字段,可能需要确认
|
|||
|
|
Status string `json:"status"`
|
|||
|
|
ChunkMethod string `json:"chunk_method"`
|
|||
|
|
ParserConfig map[string]interface{} `json:"parser_config"`
|
|||
|
|
TokenNum int `json:"token_num"`
|
|||
|
|
ChunkCount int `json:"chunk_count"`
|
|||
|
|
ProcessBegin int64 `json:"process_begin"`
|
|||
|
|
ProcessDu int64 `json:"process_du"`
|
|||
|
|
Progress float64 `json:"progress"`
|
|||
|
|
ProgressMsg string `json:"progress_msg"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// UploadDocumentReq 上传文档请求
|
|||
|
|
// 注意:上传文件通常需要 multipart/form-data,这里仅定义结构,实际逻辑在方法中处理
|
|||
|
|
type UploadDocumentReq struct {
|
|||
|
|
FilePaths []string // 本地文件路径列表
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ListDocumentsReq 列出文档请求
|
|||
|
|
type ListDocumentsReq struct {
|
|||
|
|
Page int `json:"page,omitempty"`
|
|||
|
|
PageSize int `json:"page_size,omitempty"`
|
|||
|
|
OrderBy string `json:"orderby,omitempty"`
|
|||
|
|
Desc bool `json:"desc,omitempty"`
|
|||
|
|
Keywords string `json:"keywords,omitempty"`
|
|||
|
|
Id string `json:"id,omitempty"`
|
|||
|
|
Name string `json:"name,omitempty"`
|
|||
|
|
CreateTimeFrom int64 `json:"create_time_from,omitempty"`
|
|||
|
|
CreateTimeTo int64 `json:"create_time_to,omitempty"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ListDocumentsRes 列出文档响应
|
|||
|
|
type ListDocumentsRes struct {
|
|||
|
|
Code int `json:"code"`
|
|||
|
|
Data []*Document `json:"data"`
|
|||
|
|
Total int `json:"total"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DeleteDocumentsReq 删除文档请求
|
|||
|
|
type DeleteDocumentsReq struct {
|
|||
|
|
Ids []string `json:"ids"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ListDocuments 列出文档
|
|||
|
|
func (c *Client) ListDocuments(ctx context.Context, datasetId string, req *ListDocumentsReq) (*ListDocumentsRes, error) {
|
|||
|
|
path := fmt.Sprintf("/api/v1/datasets/%s/documents?", datasetId)
|
|||
|
|
params := map[string]interface{}{}
|
|||
|
|
if req.Page > 0 {
|
|||
|
|
params["page"] = req.Page
|
|||
|
|
}
|
|||
|
|
if req.PageSize > 0 {
|
|||
|
|
params["page_size"] = req.PageSize
|
|||
|
|
}
|
|||
|
|
if req.OrderBy != "" {
|
|||
|
|
params["orderby"] = req.OrderBy
|
|||
|
|
}
|
|||
|
|
if req.Desc {
|
|||
|
|
params["desc"] = "true"
|
|||
|
|
} else {
|
|||
|
|
params["desc"] = "false"
|
|||
|
|
}
|
|||
|
|
if req.Keywords != "" {
|
|||
|
|
params["keywords"] = req.Keywords
|
|||
|
|
}
|
|||
|
|
if req.Id != "" {
|
|||
|
|
params["id"] = req.Id
|
|||
|
|
}
|
|||
|
|
if req.Name != "" {
|
|||
|
|
params["name"] = req.Name
|
|||
|
|
}
|
|||
|
|
if req.CreateTimeFrom > 0 {
|
|||
|
|
params["create_time_from"] = req.CreateTimeFrom
|
|||
|
|
}
|
|||
|
|
if req.CreateTimeTo > 0 {
|
|||
|
|
params["create_time_to"] = req.CreateTimeTo
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for k, v := range params {
|
|||
|
|
path += fmt.Sprintf("%s=%v&", k, v)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var res ListDocumentsRes
|
|||
|
|
if err := c.request(ctx, "GET", path, nil, &res); err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
if res.Code != 0 {
|
|||
|
|
return nil, fmt.Errorf("list documents failed: code=%d", res.Code)
|
|||
|
|
}
|
|||
|
|
return &res, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// UploadDocument 上传文档
|
|||
|
|
// 注意:此方法需要特殊处理 multipart/form-data,目前的 request 方法可能不支持
|
|||
|
|
// 我们需要扩展 request 方法或在此处单独实现
|
|||
|
|
func (c *Client) UploadDocument(ctx context.Context, datasetId string, filePaths []string) error {
|
|||
|
|
// TODO: 实现文件上传逻辑,需要使用 gclient 的 UploadFile 功能
|
|||
|
|
// 由于 request 方法封装了 JSON 处理,这里可能需要绕过 request 方法直接使用 c.Client
|
|||
|
|
// 暂时留空或仅做简单提示,待完善 Client 封装以支持文件上传
|
|||
|
|
return fmt.Errorf("upload document not implemented yet")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DeleteDocument 删除文档
|
|||
|
|
func (c *Client) DeleteDocument(ctx context.Context, datasetId string, ids []string) error {
|
|||
|
|
req := DeleteDocumentsReq{Ids: ids}
|
|||
|
|
var res CommonResponse
|
|||
|
|
path := fmt.Sprintf("/api/v1/datasets/%s/documents", datasetId)
|
|||
|
|
if err := c.request(ctx, "DELETE", path, req, &res); err != nil {
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
if !res.IsSuccess() {
|
|||
|
|
return fmt.Errorf("delete document failed: %s", res.Message)
|
|||
|
|
}
|
|||
|
|
return nil
|
|||
|
|
}
|