CreateKnowledgeFromFile creates a knowledge entry from a local file path Parameters: - knowledgeBaseID: The ID of the knowledge base - filePath: The local file path - metadata: Optional metadata for the knowledge entry - enableMultimodel: Optional flag to enable multimodal processing - customFileNam
(ctx context.Context, knowledgeBaseID string, filePath string, metadata map[string]string, enableMultimodel *bool, customFileName string, channel string, processConfig *KnowledgeProcessOverrides, )
| 106 | // - channel: Optional ingestion channel (e.g. "web", "api", "wechat"); empty defaults to "web" |
| 107 | // - processConfig: Optional parse config overrides (serialized as process_config form field) |
| 108 | func (c *Client) CreateKnowledgeFromFile(ctx context.Context, |
| 109 | knowledgeBaseID string, filePath string, metadata map[string]string, enableMultimodel *bool, customFileName string, channel string, |
| 110 | processConfig *KnowledgeProcessOverrides, |
| 111 | ) (*Knowledge, error) { |
| 112 | // Open the local file |
| 113 | file, err := os.Open(filePath) |
| 114 | if err != nil { |
| 115 | return nil, fmt.Errorf("failed to open file: %w", err) |
| 116 | } |
| 117 | defer file.Close() |
| 118 | |
| 119 | // Get file information |
| 120 | fileInfo, err := file.Stat() |
| 121 | if err != nil { |
| 122 | return nil, fmt.Errorf("failed to get file information: %w", err) |
| 123 | } |
| 124 | |
| 125 | // Create the HTTP request |
| 126 | path := fmt.Sprintf("/api/v1/knowledge-bases/%s/knowledge/file", knowledgeBaseID) |
| 127 | req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.baseURL+path, nil) |
| 128 | if err != nil { |
| 129 | return nil, fmt.Errorf("failed to create request: %w", err) |
| 130 | } |
| 131 | |
| 132 | // Create a multipart form writer |
| 133 | body := &bytes.Buffer{} |
| 134 | writer := multipart.NewWriter(body) |
| 135 | part, err := writer.CreateFormFile("file", fileInfo.Name()) |
| 136 | if err != nil { |
| 137 | return nil, fmt.Errorf("failed to create form file: %w", err) |
| 138 | } |
| 139 | |
| 140 | // Copy file contents |
| 141 | _, err = io.Copy(part, file) |
| 142 | if err != nil { |
| 143 | return nil, fmt.Errorf("failed to copy file content: %w", err) |
| 144 | } |
| 145 | |
| 146 | // Add enable_multimodel field |
| 147 | if enableMultimodel != nil { |
| 148 | if err := writer.WriteField("enable_multimodel", strconv.FormatBool(*enableMultimodel)); err != nil { |
| 149 | return nil, fmt.Errorf("failed to write enable_multimodel field: %w", err) |
| 150 | } |
| 151 | } |
| 152 | |
| 153 | // Add metadata to the request if provided |
| 154 | if metadata != nil { |
| 155 | metadataBytes, err := json.Marshal(metadata) |
| 156 | if err != nil { |
| 157 | return nil, fmt.Errorf("failed to serialize metadata: %w", err) |
| 158 | } |
| 159 | if err := writer.WriteField("metadata", string(metadataBytes)); err != nil { |
| 160 | return nil, fmt.Errorf("failed to write metadata field: %w", err) |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | // Add custom file name if provided |
| 165 | if customFileName != "" { |
no test coverage detected