(ctx context.Context, args queryRAGArgs)
| 168 | } |
| 169 | |
| 170 | func (t *ToolSet) handleQueryRAG(ctx context.Context, args queryRAGArgs) (*tools.ToolCallResult, error) { |
| 171 | if args.Query == "" { |
| 172 | return nil, errors.New("query cannot be empty") |
| 173 | } |
| 174 | |
| 175 | results, err := t.manager.Query(ctx, args.Query) |
| 176 | if err != nil { |
| 177 | return nil, fmt.Errorf("RAG query failed: %w", err) |
| 178 | } |
| 179 | |
| 180 | out := make([]queryResult, 0, len(results)) |
| 181 | for _, r := range results { |
| 182 | out = append(out, queryResult{ |
| 183 | SourcePath: r.Document.SourcePath, |
| 184 | Content: r.Document.Content, |
| 185 | Similarity: r.Similarity, |
| 186 | ChunkIndex: r.Document.ChunkIndex, |
| 187 | }) |
| 188 | } |
| 189 | |
| 190 | slices.SortFunc(out, func(a, b queryResult) int { |
| 191 | return cmp.Compare(b.Similarity, a.Similarity) |
| 192 | }) |
| 193 | |
| 194 | const maxResults = 10 |
| 195 | if len(out) > maxResults { |
| 196 | out = out[:maxResults] |
| 197 | } |
| 198 | |
| 199 | resultJSON, err := json.Marshal(out) |
| 200 | if err != nil { |
| 201 | return nil, fmt.Errorf("failed to marshal results: %w", err) |
| 202 | } |
| 203 | |
| 204 | return tools.ResultSuccess(string(resultJSON)), nil |
| 205 | } |
nothing calls this directly
no test coverage detected