Skip to content

Conversation

@MohdShoaib-18169
Copy link
Contributor

@MohdShoaib-18169 MohdShoaib-18169 commented Oct 3, 2025

…estion-Thread-Flow-0

Description

Testing

Additional Notes

Summary by CodeRabbit

  • New Features

    • Retry failed file uploads from the file tree with async backend processing, real-time status updates, and success/error toasts.
    • New single-file document insertion endpoint.
  • Improvements

    • UI uses typed enums for node and upload status for consistent indicators and actions.
    • Background processing now handles jobs individually to reduce batch failures and improve reliability.
  • Bug Fixes

    • Retry action only appears for failed files and correctly updates status on success/failure.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 3, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds enum-based NodeType/UploadStatus checks in the FileTree, implements an async per-file retry flow in KnowledgeManagement that calls a new server endpoint, introduces a server InsertFileDocumentApi and route POST /document/:fileId/insert, and refactors worker initialization into a generic createWorker.

Changes

Cohort / File(s) Summary
Frontend: File tree UI
frontend/src/components/FileTree.tsx
Replace string-literal checks with UploadStatus and NodeType enums for rendering, action visibility (Add/Download/Retry), counts, and open/child logic.
Frontend: KnowledgeManagement retry & upload UI
frontend/src/routes/_authenticated/knowledgeManagement.tsx
Replace stub onRetry with async handler: validate file node, set PROCESSING optimistically, POST to api.document[":fileId"].insert.$post, update node to COMPLETED or FAILED, show toasts, and propagate updates through the in-memory tree.
Server: Single-file insertion API
server/api/documentInsertion.ts
Add InsertFileDocumentApi: API-key scope UPLOAD_FILES, fileId validation, ownership checks, delegates to processDocumentDirect (uses existing worker path), logs and returns structured processing results.
Server: Route registration
server/server.ts
Import and register POST /document/:fileId/insert with insertDocumentParamSchema (UUID) and InsertFileDocumentApi.
Server: Shared types
server/shared/types.ts
Add NodeType enum (FILE = "file", FOLDER = "folder") alongside existing UploadStatus.
Server: Worker refactor
server/worker.ts
Introduce internal createWorker(queueName, batchSize, workerType) to unify worker initialization; replace per-queue logic with per-job parallel processing, explicit per-job complete/fail, and delegate initFileProcessingWorker/initPdfFileProcessingWorker to it.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant FileTree as Frontend FileTree
  participant KM as KnowledgeManagement
  participant Server as POST /document/:fileId/insert
  participant Worker as Processing Worker

  User->>FileTree: Click "Retry" on failed file
  FileTree->>KM: onRetry(node, path)
  KM->>KM: set node.uploadStatus = PROCESSING\nstatusMessage = "Retrying..."
  KM->>Server: POST /document/:fileId/insert
  Server->>Server: auth + validate fileId + ownership
  Server->>Worker: processDocumentDirect(fileId)
  Worker-->>Server: processing result (success / failure)
  alt success
    Server-->>KM: 200 {result: success}
    KM->>KM: set node.uploadStatus = COMPLETED
    KM-->>User: show success toast
  else failure
    Server-->>KM: error / failed result
    KM->>KM: set node.uploadStatus = FAILED
    KM-->>User: show destructive toast
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • zereraz
  • shivamashtikar
  • junaid-shirur
  • devesh-juspay

Poem

I’m a rabbit with a tiny key,
I nudge the retry, then watch bytes flee.
From tree to server the packets run,
Status flips green — hooray, we’re done! 🥕🐇

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Title Check ⚠️ Warning The current title focuses narrowly on a PDF batch-upload retry change and is truncated, which does not accurately reflect the broader set of frontend enum refactors, knowledge-management retry logic, new document‐insertion API, server routing additions, and worker refactoring included in this PR. Please revise the title to concisely summarize the main scopes of this PR—such as upload status enum updates, retry logic enhancements, document insertion endpoint, and worker refactoring—or split these distinct concerns into focused pull requests with appropriately descriptive titles.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch pdf-batch-upload-frontend-retry-change

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 92f5057 and 2191360.

📒 Files selected for processing (1)
  • frontend/src/routes/_authenticated/knowledgeManagement.tsx (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (3)
frontend/src/utils/fileUtils.ts (1)
  • FileNode (134-146)
frontend/src/api.ts (1)
  • api (5-5)
frontend/src/hooks/use-toast.ts (1)
  • toast (201-201)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (1)

1969-2084: LGTM! Retry implementation correctly uses functional setters.

The implementation properly addresses previous review concerns:

  1. ✅ Uses functional setters (setCollections(prev => ...) and setSelectedDocument(prevSelected => ...)) to avoid stale state overwrites during async operations
  2. ✅ Keeps selectedDocument in sync when retrying the currently viewed file
  3. ✅ Validates node eligibility before proceeding (file type, FAILED status, has ID)
  4. ✅ Comprehensive error handling with user feedback via toasts
  5. ✅ Validates API response structure (checks response.ok, result.success, and result.status)

The recursive update pattern correctly handles nested file tree structures while maintaining immutability.

Optional enhancements (can be deferred):

  • Consider debouncing retry clicks to prevent accidental concurrent API calls (though the PROCESSING status check provides partial protection)
  • The retryCount field exists on FileNode but isn't incremented here—confirm this is handled server-side

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @MohdShoaib-18169, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the knowledge base management system by implementing a robust retry mechanism for failed document uploads. It introduces a new backend API endpoint to facilitate the re-processing of individual files and integrates this functionality into the frontend's file tree view. Users can now explicitly retry failed uploads, with the UI providing clear visual feedback throughout the re-processing cycle, improving the overall reliability and user experience of document ingestion.

Highlights

  • New Retry API Endpoint: Introduced a dedicated API endpoint (/document/:fileId/insert) on the backend to allow for the re-processing of individual failed file documents.
  • Frontend Retry Integration: The FileTree component in the frontend now provides a retry option for files with a FAILED upload status, triggering the new backend API.
  • Dynamic UI Updates: The frontend dynamically updates the uploadStatus of a file to PROCESSING, COMPLETED, or FAILED during the retry process, providing real-time user feedback.
  • Enum-based Status Handling: Switched from string literals to the UploadStatus enum for managing and comparing file upload states in the frontend, improving type safety and readability.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a retry mechanism for failed file uploads in the knowledge base. A new API endpoint is added to re-trigger file processing, and the frontend is updated to include a retry button and handle the retry logic.

My review focuses on improving code quality and performance. I've suggested refactoring the frontend retry handler to eliminate significant code duplication, making the state updates more robust and maintainable. On the backend, I've recommended parallelizing database queries in the new API handler for better efficiency.

The changes are functionally sound and address an important user-facing feature.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between df48427 and be6b6ef.

📒 Files selected for processing (4)
  • frontend/src/components/FileTree.tsx (3 hunks)
  • frontend/src/routes/_authenticated/knowledgeManagement.tsx (1 hunks)
  • server/api/documentInsertion.ts (1 hunks)
  • server/server.ts (2 hunks)
🧰 Additional context used
🧬 Code graph analysis (3)
server/server.ts (1)
server/api/documentInsertion.ts (1)
  • InsertFileDocumentApi (52-124)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (3)
frontend/src/utils/fileUtils.ts (1)
  • FileNode (134-146)
frontend/src/api.ts (1)
  • api (5-5)
frontend/src/hooks/use-toast.ts (1)
  • toast (201-201)
server/api/documentInsertion.ts (5)
server/logger/index.ts (2)
  • getLogger (36-93)
  • Subsystem (15-15)
server/queue/fileProcessor.ts (2)
  • ProcessingJob (32-35)
  • processJob (100-122)
server/api/agent.ts (2)
  • getAuth (134-142)
  • safeGet (124-130)
server/db/user.ts (1)
  • getUserByEmail (147-156)
server/db/knowledgeBase.ts (2)
  • getCollectionItemById (130-141)
  • getCollectionById (40-49)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (1)

1988-2049: CRITICAL: Race condition in onRetry still not fixed.

The state management issue flagged in previous reviews remains unresolved. The current implementation captures a stale snapshot of collections before the async API call, then overwrites state after the call completes, which will clobber concurrent updates from polling or other operations.

Current problematic pattern (line 1995):

const newCollections = [...collections]  // Stale snapshot captured here
// ... await happens ...
setCollections(newCollections)  // Overwrites any concurrent updates

Required fix:
Use functional setters for all three state updates (PROCESSING, COMPLETED, FAILED) to always operate on the latest state:

-                          onRetry={async (node, path) => {
-                            if (node.type !== "file" || node.uploadStatus !== UploadStatus.FAILED || !node.id) {
-                              return
-                            }
-
-                            const updateNodeStatusInState = (status: UploadStatus, message?: string) => {
-                              setCollections(prevCollections => {
-                                const newCollections = [...prevCollections]
-                                const coll = newCollections.find(c => c.id === collection.id)
-                                if (!coll) return prevCollections
-
-                                const updateRecursively = (nodes: FileNode[]): FileNode[] => {
-                                  return nodes.map(n => {
-                                    if (n.id === node.id) {
-                                      return { ...n, uploadStatus: status, statusMessage: message }
-                                    }
-                                    if (n.children) {
-                                      return { ...n, children: updateRecursively(n.children) }
-                                    }
-                                    return n
-                                  })
-                                }
-
-                                coll.items = updateRecursively(coll.items)
-                                return newCollections
-                              })
-                            }
-
-                            try {
-                              updateNodeStatusInState(UploadStatus.PROCESSING, "Retrying...")
-
-                              const response = await api.document[":fileId"].insert.$post({
-                                param: { fileId: node.id },
-                              })
-
-                              if (!response.ok) {
-                                const errorBody = await response.text()
-                                throw new Error(`API returned ${response.status}: ${errorBody}`)
-                              }
-
-                              const result = await response.json()
-                              if (!result.success || result.status !== "completed") {
-                                throw new Error(result.message || "Processing failed after successful API call.")
-                              }
-
-                              toast({
-                                title: "File processed successfully",
-                                description: `${node.name} has been processed and added to the knowledge base.`,
-                              })
-                              updateNodeStatusInState(UploadStatus.COMPLETED, undefined)
-
-                            } catch (error) {
-                              console.error("Retry failed:", error)
-                              const errorMessage = error instanceof Error ? error.message : `Failed to process ${node.name}. Please try again.`
-                              toast({
-                                title: "Retry failed",
-                                description: errorMessage,
-                                variant: "destructive",
-                              })
-                              updateNodeStatusInState(UploadStatus.FAILED, "Retry failed")
-                            }
-                          }}
+                          onRetry={async (node, path) => {
+                            if (node.type !== "file" || node.uploadStatus !== UploadStatus.FAILED || !node.id) {
+                              return
+                            }
+
+                            // Helper to update node status immutably
+                            const updateNodeStatus = (
+                              nodes: FileNode[],
+                              targetId: string,
+                              status: UploadStatus,
+                              message?: string
+                            ): FileNode[] => {
+                              return nodes.map(n => {
+                                if (n.id === targetId) {
+                                  return { ...n, uploadStatus: status, statusMessage: message }
+                                }
+                                if (n.children) {
+                                  return { ...n, children: updateNodeStatus(n.children, targetId, status, message) }
+                                }
+                                return n
+                              })
+                            }
+
+                            try {
+                              // Set PROCESSING status using functional setter
+                              setCollections(prev =>
+                                prev.map(c =>
+                                  c.id !== collection.id
+                                    ? c
+                                    : { ...c, items: updateNodeStatus(c.items, node.id!, UploadStatus.PROCESSING, "Retrying...") }
+                                )
+                              )
+
+                              const response = await api.document[":fileId"].insert.$post({
+                                param: { fileId: node.id },
+                              })
+
+                              if (!response.ok) {
+                                const errorBody = await response.text()
+                                throw new Error(`API returned ${response.status}: ${errorBody}`)
+                              }
+
+                              const result = await response.json()
+                              if (!result.success || result.status !== "completed") {
+                                throw new Error(result.message || "Processing failed after successful API call.")
+                              }
+
+                              toast({
+                                title: "File processed successfully",
+                                description: `${node.name} has been processed and added to the knowledge base.`,
+                              })
+
+                              // Set COMPLETED status using functional setter
+                              setCollections(prev =>
+                                prev.map(c =>
+                                  c.id !== collection.id
+                                    ? c
+                                    : { ...c, items: updateNodeStatus(c.items, node.id!, UploadStatus.COMPLETED, undefined) }
+                                )
+                              )
+
+                            } catch (error) {
+                              console.error("Retry failed:", error)
+                              const errorMessage = error instanceof Error ? error.message : `Failed to process ${node.name}. Please try again.`
+                              toast({
+                                title: "Retry failed",
+                                description: errorMessage,
+                                variant: "destructive",
+                              })
+
+                              // Set FAILED status using functional setter
+                              setCollections(prev =>
+                                prev.map(c =>
+                                  c.id !== collection.id
+                                    ? c
+                                    : { ...c, items: updateNodeStatus(c.items, node.id!, UploadStatus.FAILED, "Retry failed") }
+                                )
+                              )
+                            }
+                          }}

Why this matters:
During the await api.document[":fileId"].insert.$post() call, the polling logic (lines 534-606) runs every 5 seconds and updates collections state with fresh status information from the server. When the await completes and setCollections(newCollections) runs, it overwrites those polling updates with the stale snapshot, causing:

  • Loss of status updates for other files
  • UI showing incorrect states
  • Potential infinite polling loops
🧹 Nitpick comments (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (1)

625-641: Remove debug console.logs before merging.

The added console.log statements will pollute the browser console in production and may expose internal state details.

Apply this diff to remove the debug logs:

       const checkItems = (items: FileNode[]): boolean => {
-        return items.some((item) => {
-          console.log(
-            `Checking file: ${item.name}, status: ${item.uploadStatus}`,
-          )
-          return (
-            item.uploadStatus === UploadStatus.PROCESSING ||
-            item.uploadStatus === UploadStatus.PENDING ||
-            (item.children && checkItems(item.children))
-          )
-        })
+        return items.some((item) =>
+          item.uploadStatus === UploadStatus.PROCESSING ||
+          item.uploadStatus === UploadStatus.PENDING ||
+          (item.children && checkItems(item.children))
+        )
       }
       return checkItems(collection.items)
     })

-    console.log(
-      `hasProcessingFiles: ${hasProcessingFiles}, isPolling: ${isPolling}`,
-    )
-
     if (hasProcessingFiles && !isPolling) {
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between be6b6ef and 21b7871.

📒 Files selected for processing (2)
  • frontend/src/routes/_authenticated/knowledgeManagement.tsx (19 hunks)
  • server/api/documentInsertion.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • server/api/documentInsertion.ts
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (5)
frontend/src/hooks/useScopedFind.ts (1)
  • useScopedFind (43-434)
frontend/src/contexts/UploadProgressContext.tsx (1)
  • useUploadProgress (41-47)
frontend/src/utils/fileUtils.ts (2)
  • uploadFileBatch (214-263)
  • FileNode (134-146)
frontend/src/api.ts (1)
  • api (5-5)
frontend/src/hooks/use-toast.ts (1)
  • toast (201-201)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (1)

626-628: Remove debug console.log statements.

These debug logs should be removed before merging to production.

Apply this diff to remove the logs:

-          console.log(
-            `Checking file: ${item.name}, status: ${item.uploadStatus}`,
-          )
+
-    console.log(
-      `hasProcessingFiles: ${hasProcessingFiles}, isPolling: ${isPolling}`,
-    )
+

Also applies to: 639-641

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 21b7871 and d1c848d.

📒 Files selected for processing (1)
  • frontend/src/routes/_authenticated/knowledgeManagement.tsx (19 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (5)
frontend/src/hooks/useScopedFind.ts (1)
  • useScopedFind (43-434)
frontend/src/contexts/UploadProgressContext.tsx (1)
  • useUploadProgress (41-47)
frontend/src/utils/fileUtils.ts (2)
  • uploadFileBatch (214-263)
  • FileNode (134-146)
frontend/src/api.ts (1)
  • api (5-5)
frontend/src/hooks/use-toast.ts (1)
  • toast (201-201)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (1)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (1)

1988-2088: LGTM! The stale state issue has been resolved.

The onRetry handler now correctly uses functional state setters throughout, which prevents the race condition flagged in previous reviews. The implementation properly:

  1. Uses setCollections((prev) => ...) functional form in all three state transitions (PROCESSING, COMPLETED, FAILED)
  2. Operates on the latest state snapshot each time via the prev parameter
  3. Immutably updates the matching collection and node via updateRecursively
  4. Avoids capturing and mutating a stale collections snapshot

This ensures that concurrent polling updates are merged correctly rather than being clobbered.

@MohdShoaib-18169 MohdShoaib-18169 force-pushed the pdf-batch-upload-frontend-retry-change branch from d1c848d to 92f5057 Compare October 5, 2025 12:56
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
frontend/src/components/FileTree.tsx (1)

60-66: Type this prop as UploadStatus

You now pass enum values into UploadStatusIndicator, but the prop is still typed as a string. Tightening it to UploadStatus keeps the component aligned with the new enum-based checks.

-const UploadStatusIndicator = ({ 
-  uploadStatus, 
+const UploadStatusIndicator = ({ 
+  uploadStatus, 
   statusMessage 
 }: { 
-  uploadStatus: string
+  uploadStatus: UploadStatus
   statusMessage?: string 
 }) => {
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d1c848d and 92f5057.

📒 Files selected for processing (6)
  • frontend/src/components/FileTree.tsx (8 hunks)
  • frontend/src/routes/_authenticated/knowledgeManagement.tsx (1 hunks)
  • server/api/documentInsertion.ts (1 hunks)
  • server/server.ts (3 hunks)
  • server/shared/types.ts (1 hunks)
  • server/worker.ts (2 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
server/api/documentInsertion.ts (5)
server/logger/index.ts (2)
  • getLogger (36-93)
  • Subsystem (15-15)
server/queue/fileProcessor.ts (2)
  • ProcessingJob (32-35)
  • processJob (100-122)
server/api/agent.ts (2)
  • getAuth (134-142)
  • safeGet (124-130)
server/db/user.ts (1)
  • getUserByEmail (147-156)
server/db/knowledgeBase.ts (2)
  • getCollectionItemById (130-141)
  • getCollectionById (40-49)
server/worker.ts (2)
server/queue/api-server-queue.ts (3)
  • boss (9-12)
  • FileProcessingQueue (14-14)
  • PdfFileProcessingQueue (15-15)
server/queue/fileProcessor.ts (1)
  • ProcessingJob (32-35)
server/server.ts (1)
server/api/documentInsertion.ts (1)
  • InsertFileDocumentApi (53-133)
frontend/src/routes/_authenticated/knowledgeManagement.tsx (2)
frontend/src/utils/fileUtils.ts (1)
  • FileNode (134-146)
frontend/src/api.ts (1)
  • api (5-5)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build

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.

4 participants