Skip to content

refine knowledge base#446

Open
iceljc wants to merge 5 commits intoSciSharp:mainfrom
iceljc:features/refactor-knowledge-service
Open

refine knowledge base#446
iceljc wants to merge 5 commits intoSciSharp:mainfrom
iceljc:features/refactor-knowledge-service

Conversation

@iceljc
Copy link
Copy Markdown
Collaborator

@iceljc iceljc commented May 1, 2026

No description provided.

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Refactor knowledge base service with unified API and multi-type support

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Comprehensive refactoring of knowledge base service API with unified naming conventions
  - Renamed functions from Vector* to Knowledge* for consistency
  - Updated enum names: KnowledgeCollectionTypeKnowledgeBaseType
  - Added support for multiple knowledge base types: Taxonomy and SemanticGraph
• Refactored API endpoints to use unified /knowledge/collection/ path structure
  - Consolidated vector, document, and graph endpoints under single collection pattern
  - Updated HTTP request patterns in loader configuration
• Enhanced function signatures with knowledgeType and dbProvider parameters
  - All knowledge operations now accept knowledge type for multi-type support
  - Added optional database provider parameter for flexibility
• Updated request/response models with camelCase property naming
  - Changed snake_case properties to camelCase in TypeScript types
  - Renamed collection_namecollectionName, with_vectorwithVector
• Refactored component prop names for clarity
  - Changed collectionTypeknowledgeType across all components
  - Renamed file upload components and functions for consistency
Diagram
flowchart LR
  A["Vector/Document/Graph APIs"] -->|Consolidate| B["Unified Knowledge Collection API"]
  C["KnowledgeCollectionType enum"] -->|Rename| D["KnowledgeBaseType enum"]
  E["Vector* functions"] -->|Rename| F["Knowledge* functions"]
  G["snake_case properties"] -->|Convert| H["camelCase properties"]
  B -->|Add params| I["knowledgeType + dbProvider"]
  D -->|Add types| J["Taxonomy + SemanticGraph"]
Loading

Grey Divider

File Changes

1. src/routes/page/agent/[agentId]/agent-components/knowledge-bases/agent-knowledge-base.svelte Refactoring +5/-5

Update imports and enum references for knowledge base

src/routes/page/agent/[agentId]/agent-components/knowledge-bases/agent-knowledge-base.svelte


2. src/routes/page/knowledge-base/[embed]/[embedType]/+page.svelte ✨ Enhancement +1/-1

Improve type annotation for label variable

src/routes/page/knowledge-base/[embed]/[embedType]/+page.svelte


3. src/routes/page/knowledge-base/common/collection/collection-create-modal.svelte Refactoring +6/-4

Rename function and add knowledgeType parameter

src/routes/page/knowledge-base/common/collection/collection-create-modal.svelte


View more (14)
4. src/routes/page/knowledge-base/common/indexes/vector-index-modal.svelte Refactoring +5/-3

Update function names and add knowledgeType prop

src/routes/page/knowledge-base/common/indexes/vector-index-modal.svelte


5. src/routes/page/knowledge-base/common/vector-table/vector-item-edit-modal.svelte Refactoring +4/-4

Rename enum and update prop naming conventions

src/routes/page/knowledge-base/common/vector-table/vector-item-edit-modal.svelte


6. src/routes/page/knowledge-base/common/vector-table/vector-item.svelte Refactoring +4/-4

Update enum references and prop names

src/routes/page/knowledge-base/common/vector-table/vector-item.svelte


7. src/routes/page/knowledge-base/dictionary/+page.svelte Refactoring +9/-9

Refactor API calls and add knowledge type support

src/routes/page/knowledge-base/dictionary/+page.svelte


8. src/routes/page/knowledge-base/documents/+page.svelte Refactoring +44/-57

Comprehensive refactoring of document knowledge management

src/routes/page/knowledge-base/documents/+page.svelte


9. src/routes/page/knowledge-base/documents/knowledge-file-upload.svelte Refactoring +8/-8

Rename document functions to file-based naming

src/routes/page/knowledge-base/documents/knowledge-file-upload.svelte


10. src/routes/page/knowledge-base/documents/knowledge-upload-modal.svelte Refactoring +2/-2

Update function name for file upload

src/routes/page/knowledge-base/documents/knowledge-upload-modal.svelte


11. src/routes/page/knowledge-base/question-answer/+page.svelte Refactoring +62/-79

Refactor QA knowledge management with unified API

src/routes/page/knowledge-base/question-answer/+page.svelte


12. src/routes/page/knowledge-base/relationships/+page.svelte Refactoring +12/-3

Update graph knowledge search to unified API

src/routes/page/knowledge-base/relationships/+page.svelte


13. src/lib/helpers/enums.js Refactoring +11/-7

Rename enums and add new knowledge base types

src/lib/helpers/enums.js


14. src/lib/helpers/http.js Refactoring +23/-21

Update API endpoint patterns for unified knowledge routes

src/lib/helpers/http.js


15. src/lib/helpers/types/knowledgeTypes.js Refactoring +13/-14

Convert snake_case to camelCase in type definitions

src/lib/helpers/types/knowledgeTypes.js


16. src/lib/services/api-endpoints.js Refactoring +21/-21

Consolidate endpoints under unified collection path

src/lib/services/api-endpoints.js


17. src/lib/services/knowledge-base-service.js Refactoring +152/-74

Rename functions and add knowledgeType parameter support

src/lib/services/knowledge-base-service.js


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented May 1, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Dictionary detail expansion broken🐞 Bug ≡ Correctness
Description
Dictionary passes item={item.data} into TableItem but keeps detailKey={'data'}, so TableItem
looks for item.data.data and renders no details when expanding rows. This breaks the “View Detail”
functionality for dictionary results.
Code

src/routes/page/knowledge-base/dictionary/+page.svelte[R347-351]

                                         <TableItem
-												item={item}
+												item={item.data}
                                             columns={columns}
                                             detailKey={'data'}
  									open={idx === 0}
Evidence
TableItem only renders expanded details when detailKey is set and item[detailKey] exists;
after passing item.data, item['data'] is typically undefined and the detail section stays empty.

src/routes/page/knowledge-base/dictionary/+page.svelte[345-352]
src/routes/page/knowledge-base/common/table/table-item.svelte[52-66]
src/routes/page/knowledge-base/common/table/table-item.svelte[91-115]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`dictionary/+page.svelte` passes `item.data` to `TableItem` while still setting `detailKey='data'`, which makes `TableItem` search for a nested `data` field that doesn't exist, breaking row detail expansion.
### Issue Context
`TableItem` expects:
- `columns` to map directly to top-level properties on `item`
- `detailKey` to point to a property on `item` that contains the expandable object
### Fix Focus Areas
- src/routes/page/knowledge-base/dictionary/+page.svelte[345-352]
- src/routes/page/knowledge-base/common/table/table-item.svelte[52-115]
### Suggested fix approach
Choose one:
1) Keep `detailKey='data'` and pass the full result object: `item={item}`, and also update `columns` (or pre-flatten items) so `token`/`canonical_text` are top-level (e.g., map `items = res.map(r => ({ ...r, ...r.data }))`).
2) If you want to pass `item={item.data}`, then remove/clear `detailKey` (or set it to a property that actually exists on `item.data`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Graph search URL template🐞 Bug ≡ Correctness
Description
searchGraphKnowledge() posts to endpoints.knowledgeDataSearchUrl without replacing the
{collection} placeholder, so it will call an invalid URL like
/knowledge/collection/{collection}/search if invoked. It also sends {query, method} instead of
the request shape used by searchKnowledge() for that endpoint.
Code

src/lib/services/knowledge-base-service.js[R331-334]

export async function searchGraphKnowledge(text, method = "local") {
-    const url = endpoints.graphKnowledgeSearchUrl;
+    const url = endpoints.knowledgeDataSearchUrl;
 const response = await axios.post(url, { query: text, method: method });
 return response.data;
Evidence
knowledgeDataSearchUrl is a templated URL requiring {collection} replacement, but
searchGraphKnowledge() uses it directly while searchKnowledge() correctly calls replaceUrl()
with collection.

src/lib/services/knowledge-base-service.js[331-335]
src/lib/services/api-endpoints.js[99-111]
src/lib/services/knowledge-base-service.js[69-79]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`searchGraphKnowledge()` posts to a templated endpoint (`.../knowledge/collection/{collection}/search`) without substituting `{collection}`, so the function cannot succeed if it is ever called.
### Issue Context
- `endpoints.knowledgeDataSearchUrl` requires `{collection}`.
- `searchKnowledge()` already implements the correct pattern via `replaceUrl(...)`.
### Fix Focus Areas
- src/lib/services/knowledge-base-service.js[331-335]
- src/lib/services/api-endpoints.js[99-111]
### Suggested fix approach
- Either remove `searchGraphKnowledge()` if it is obsolete, OR change it to accept `collection` (and probably `knowledgeType`/`dbProvider`) and call `replaceUrl(endpoints.knowledgeDataSearchUrl, { collection })`.
- Align the request payload with what the backend expects for `/knowledge/collection/{collection}/search` (e.g., same shape as `searchKnowledge()`), or restore/use a dedicated graph endpoint if the graph API is different.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Stateful regex skips intermittently 🐞 Bug ☼ Reliability
Description
skipLoader()/skipGlobalError() create regexes with the global flag ('g') and then call
regex.test(...) repeatedly, which mutates lastIndex and can cause intermittent false negatives.
This can lead to inconsistent loader visibility and global error handling for the same request URLs.
Code

src/lib/helpers/http.js[R190-199]

 const postRegexes = [
     new RegExp('http(s*)://(.*?)/conversation/(.*?)/(.*?)', 'g'),
     new RegExp('http(s*)://(.*?)/agent', 'g'),
-        new RegExp('http(s*)://(.*?)/knowledge/vector/(.*?)/page', 'g'),
-        new RegExp('http(s*)://(.*?)/knowledge/(.*?)/search', 'g'),
-        new RegExp('http(s*)://(.*?)/knowledge/vector/(.*?)/create', 'g'),
-        new RegExp('http(s*)://(.*?)/knowledge/document/(.*?)/page', 'g'),
-        new RegExp('http(s*)://(.*?)/knowledge/document/(.*?)/upload', 'g'),
-        new RegExp('http(s*)://(.*?)/knowledge/entity/analyze', 'g'),
+        new RegExp('http(s*)://(.*?)/knowledge/collection/(.*?)/data/page', 'g'),
+        new RegExp('http(s*)://(.*?)/knowledge/collection/(.*?)/search', 'g'),
+        new RegExp('http(s*)://(.*?)/knowledge/collection/(.*?)', 'g'),
+        new RegExp('http(s*)://(.*?)/knowledge/collection/(.*?)/file/page', 'g'),
+        new RegExp('http(s*)://(.*?)/knowledge/collection/(.*?)/file/upload', 'g'),
+        // new RegExp('http(s*)://(.*?)/knowledge/entity/analyze', 'g'),
     new RegExp('http(s*)://(.*?)/users', 'g'),
Evidence
The regex arrays contain many new RegExp(..., 'g') entries and are used with .test() in
some(...); with /g, .test() advances lastIndex, so repeated checks against similar URLs can
alternate match results unless lastIndex is reset or the global flag is removed.

src/lib/helpers/http.js[190-204]
src/lib/helpers/http.js[255-269]
src/lib/helpers/http.js[276-324]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`skipLoader()` and `skipGlobalError()` use RegExp objects constructed with the `'g'` flag and then call `.test()` in loops (`some(...)`). With the global flag, `.test()` is stateful (`lastIndex`), which can cause intermittent match failures.
### Issue Context
These functions gate loader visibility and global error banners; intermittent matching will produce flaky UI behavior that's hard to reproduce.
### Fix Focus Areas
- src/lib/helpers/http.js[190-204]
- src/lib/helpers/http.js[255-269]
- src/lib/helpers/http.js[276-324]
### Suggested fix approach
- Remove the `'g'` flag from these URL-matching regexes (they don't need global matching for `.test()`).
- Alternatively, reset `regex.lastIndex = 0` before each `.test()`, but removing `'g'` is simpler and safer.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread src/routes/page/knowledge-base/dictionary/+page.svelte
@iceljc iceljc changed the title refin knowledge base refine knowledge base May 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant