Skip to content

feat: added docling authentication when ibm auth is enabled#1551

Merged
lucaseduoli merged 21 commits into
mainfrom
feat/docling_auth
May 12, 2026
Merged

feat: added docling authentication when ibm auth is enabled#1551
lucaseduoli merged 21 commits into
mainfrom
feat/docling_auth

Conversation

@lucaseduoli

@lucaseduoli lucaseduoli commented May 7, 2026

Copy link
Copy Markdown
Collaborator

This pull request adds support for passing user authentication information (user ID and JWT token) to the Docling document processing service, enabling per-user authorization and tenant isolation when IBM authentication is enabled. The changes propagate these credentials through the API, document service, and Docling service layers, ensuring that all relevant Docling API calls include the necessary authentication headers.

Authentication and Authorization Enhancements:

  • Added user_id and jwt_token parameters to document processing methods (process_upload_context, process_document_standard, etc.) and ensured they are passed through the API layer (upload_context in src/api/upload.py) and service layer (src/services/document_service.py, src/models/processors.py). [1] [2] [3] [4]
  • Modified the DoclingService methods (upload_to_docling_direct_async, get_docling_result_async, convert_file, convert_bytes, and the internal _poll_result) to accept and forward authentication headers to Docling Serve endpoints. [1] [2] [3] [4] [5] [6]
  • Implemented a new _get_auth_headers helper in DoclingService to construct authentication headers only when IBM authentication is enabled.

File Upload and Ingestion Updates:

  • Updated file upload and ingestion flows to pass authentication information to Docling, ensuring that all document conversions and polling requests are properly authorized.

Configuration and Import Cleanups:

  • Updated imports to include IBM authentication configuration and removed unused imports for clarity. [1] [2]

Summary by CodeRabbit

  • New Features

    • Added optional IBM authentication for document conversion and health checks, with user/auth context forwarded through upload and processing flows
    • Dev-mode shortcut to use environment IBM credentials for local development
  • Configuration

    • New env vars for IBM auth and service behavior; compose updated with these settings
    • Toggle to control service SSL verification
  • Behavior

    • Startup/indexing flows skip certain security/replica steps when IBM dev mode is enabled

@lucaseduoli lucaseduoli self-assigned this May 7, 2026
@github-actions github-actions Bot added backend 🔷 Issues related to backend services (OpenSearch, Langflow, APIs) enhancement 🔵 New feature or request labels May 7, 2026
@coderabbitai

coderabbitai Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This pull request extends IBM authentication support throughout the Docling document conversion flow. Auth context (user ID and JWT token) is now threaded from API endpoints through document, processor, and langflow services into DoclingService, which constructs IBM-compatible headers on all Docling API requests. New environment-based configuration enables dev-mode authentication overrides and controls TLS verification. Startup logic guards prevent unnecessary security setup in dev mode.

Changes

IBM Auth Integration in Docling Upload Flow

Layer / File(s) Summary
Configuration Setup
src/config/settings.py, .env.example, docker-compose.yml
New environment variables (IBM_USERNAME, IBM_PASSWORD, IBM_AUTH_DEV_MODE, DOCLING_SERVE_VERIFY_SSL) added to settings, examples, and compose config; Docling HTTP client configured with TLS verification flag.
DoclingService Client & Imports
src/services/docling_service.py
DoclingService imports DOCLING_SERVE_VERIFY_SSL and the shared async HTTP client now uses the TLS verification flag.
DoclingService Auth Helper
src/services/docling_service.py
Adds _get_auth_headers() to conditionally build Authorization and X-Tenant-Id when IBM auth is enabled.
DoclingService Upload
src/services/docling_service.py
upload_to_docling_direct_async() accepts optional user_id and auth_header; auth headers included in multipart POST to Docling API for both client branches.
DoclingService Polling & Result
src/services/docling_service.py
get_docling_result_async() and _poll_result() accept auth context and use auth headers for status polling and result retrieval.
DoclingService Converters
src/services/docling_service.py
convert_file() and convert_bytes() signatures extended to accept and forward optional user_id and auth_header.
Document Service Layer
src/services/document_service.py
process_upload_context() accepts user_id and jwt_token and forwards them to Docling conversion calls; imports reordered.
Processor Service Layer
src/models/processors.py
process_document_standard() passes auth context to docling_service.convert_file() for non-text documents.
Langflow Service Layer
src/services/langflow_file_service.py
upload_and_ingest_file() includes auth context in Docling upload call.
API Endpoints: Upload & Health
src/api/upload.py, src/api/docling.py
upload_context() forwards user_id and jwt_token to document service; Docling health endpoint resolves optional user, conditionally injects IBM auth headers when enabled, and uses DOCLING_SERVE_VERIFY_SSL.
Dependency Injection & Auth
src/dependencies.py, src/services/auth_service.py
_get_ibm_user() adds env-based fast path for IBM_USERNAME/IBM_PASSWORD; AuthService.get_user_info() recognizes new ibm_ams_env provider.
OpenSearch & Startup Guards
src/utils/opensearch_utils.py, src/main.py
Security configuration, alerting setup, and index replica normalization are skipped or gated when IBM_AUTH_DEV_MODE is enabled.

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'added docling authentication when ibm auth is enabled' directly and clearly summarizes the main change in the PR, which is implementing per-user authentication for Docling service requests when IBM authentication is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 88.24% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/docling_auth

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.

@lucaseduoli
lucaseduoli requested a review from zzzming May 7, 2026 13:15
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/api/upload.py (1)

122-128: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Inconsistent user_id derivation vs the rest of this file.

Line 122 uses user.user_id if user else None, but lines 132 (owner_user_id), 44, 90, 210 all use user.user_id if (user and not is_no_auth) else None. As a result, when is_no_auth_mode() is true, process_upload_context (and downstream Docling X-Tenant-Id) receives a user id while chat_service receives None — these should be consistent.

If the intent for IBM auth is to always have a tenant id when a user object exists, that's fine, but the same logic should apply to chat_service.upload_context_chat's owner argument. Otherwise, mirror the gated form here.

♻️ Proposed alignment
-    filename = file.filename or "uploaded_document"
-    user_id = user.user_id if user else None
-
-    jwt_token = user.jwt_token
+    filename = file.filename or "uploaded_document"
+
+    from config.settings import is_no_auth_mode
+    is_no_auth = is_no_auth_mode()
+    user_id = user.user_id if (user and not is_no_auth) else None
+    jwt_token = user.jwt_token

     doc_result = await document_service.process_upload_context(
         file, filename, user_id=user_id, jwt_token=jwt_token
     )

-    from config.settings import is_no_auth_mode
-    is_no_auth = is_no_auth_mode()
     owner_user_id = user.user_id if (user and not is_no_auth) else None
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/api/upload.py` around lines 122 - 128, The user_id passed to
document_service.process_upload_context is derived unconditionally as
user.user_id if user else None, which is inconsistent with other usages
(owner_user_id and chat_service.upload_context_chat) that use the gated form
when is_no_auth_mode() is considered; update the derivation to match the gated
logic used elsewhere (e.g., set user_id = user.user_id if (user and not
is_no_auth_mode()) else None) so process_upload_context and
chat_service.upload_context_chat receive the same owner/tenant value; adjust the
variable near where owner_user_id is computed and ensure both
process_upload_context and chat_service.upload_context_chat use that consistent
value.
🧹 Nitpick comments (2)
src/services/docling_service.py (2)

90-99: 💤 Low value

Optional: rename auth_header to jwt_token for consistency.

Across the rest of the codebase (document_service.py, processors.py, langflow_file_service.py, api/upload.py) this value is consistently called jwt_token. Renaming the parameter on _get_auth_headers, upload_to_docling_direct_async, get_docling_result_async, _poll_result, convert_file, and convert_bytes to jwt_token (and constructing the Authorization header inside _get_auth_headers) would remove the contract ambiguity flagged above.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/services/docling_service.py` around lines 90 - 99, Rename the auth
parameter named auth_header to jwt_token across the Docling-related API to keep
naming consistent and remove ambiguity: update the _get_auth_headers signature
to _get_auth_headers(self, user_id: Optional[str] = None, jwt_token:
Optional[str] = None) and use jwt_token to build the "Authorization" header;
also rename the parameter in upload_to_docling_direct_async,
get_docling_result_async, _poll_result, convert_file, and convert_bytes so they
accept jwt_token and pass it into _get_auth_headers; ensure all call sites in
document_service.py, processors.py, langflow_file_service.py, and api/upload.py
are updated to pass jwt_token and that header construction is centralized in
_get_auth_headers.

93-99: 💤 Low value

Consider logging when IBM auth is enabled but credentials are missing.

When IBM_AUTH_ENABLED is true and either user_id or auth_header is None, the helper silently omits those headers and Docling Serve will return an opaque 401/403. A logger.warning (or logger.debug at minimum) here would make troubleshooting much easier without changing behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/services/docling_service.py` around lines 93 - 99, When IBM_AUTH_ENABLED
is true and you're building the headers (the block that checks auth_header and
user_id and returns headers), add logging when either auth_header or user_id is
missing so missing credentials are visible; specifically, inside the
IBM_AUTH_ENABLED branch, if auth_header is falsy log a warning (or debug)
mentioning missing Authorization, and if user_id is falsy log a warning (or
debug) mentioning missing X-Tenant-Id, keeping behavior unchanged otherwise
(still only set headers when values exist).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/api/upload.py`:
- Around line 122-128: The user_id passed to
document_service.process_upload_context is derived unconditionally as
user.user_id if user else None, which is inconsistent with other usages
(owner_user_id and chat_service.upload_context_chat) that use the gated form
when is_no_auth_mode() is considered; update the derivation to match the gated
logic used elsewhere (e.g., set user_id = user.user_id if (user and not
is_no_auth_mode()) else None) so process_upload_context and
chat_service.upload_context_chat receive the same owner/tenant value; adjust the
variable near where owner_user_id is computed and ensure both
process_upload_context and chat_service.upload_context_chat use that consistent
value.

---

Nitpick comments:
In `@src/services/docling_service.py`:
- Around line 90-99: Rename the auth parameter named auth_header to jwt_token
across the Docling-related API to keep naming consistent and remove ambiguity:
update the _get_auth_headers signature to _get_auth_headers(self, user_id:
Optional[str] = None, jwt_token: Optional[str] = None) and use jwt_token to
build the "Authorization" header; also rename the parameter in
upload_to_docling_direct_async, get_docling_result_async, _poll_result,
convert_file, and convert_bytes so they accept jwt_token and pass it into
_get_auth_headers; ensure all call sites in document_service.py, processors.py,
langflow_file_service.py, and api/upload.py are updated to pass jwt_token and
that header construction is centralized in _get_auth_headers.
- Around line 93-99: When IBM_AUTH_ENABLED is true and you're building the
headers (the block that checks auth_header and user_id and returns headers), add
logging when either auth_header or user_id is missing so missing credentials are
visible; specifically, inside the IBM_AUTH_ENABLED branch, if auth_header is
falsy log a warning (or debug) mentioning missing Authorization, and if user_id
is falsy log a warning (or debug) mentioning missing X-Tenant-Id, keeping
behavior unchanged otherwise (still only set headers when values exist).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d2201801-3f38-4a62-822a-739883764316

📥 Commits

Reviewing files that changed from the base of the PR and between 3fe7cc7 and ee7f40e.

📒 Files selected for processing (5)
  • src/api/upload.py
  • src/models/processors.py
  • src/services/docling_service.py
  • src/services/document_service.py
  • src/services/langflow_file_service.py

@github-actions github-actions Bot added docker enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/config/settings.py (1)

371-379: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

docling_http_client doesn't honour DOCLING_SERVE_VERIFY_SSL.

The health endpoint creates a per-request httpx.AsyncClient(verify=DOCLING_SERVE_VERIFY_SSL), but the long-lived docling_http_client passed to DoclingService is constructed without a verify= argument (defaults to True). When this client is injected, DoclingService._get_client() returns it directly and never uses its own default client initialization logic. In any deployment where Docling Serve is HTTPS with a self-signed certificate and DOCLING_SERVE_VERIFY_SSL=false, the health check will succeed while every actual conversion/polling call from DoclingService will fail SSL verification.

🛠 Proposed fix
 self.docling_http_client = httpx.AsyncClient(
     timeout=httpx.Timeout(
         timeout=INGESTION_TIMEOUT,
         connect=30.0,
         read=INGESTION_TIMEOUT,
         write=30.0,
         pool=30.0,
-    )
+    ),
+    verify=DOCLING_SERVE_VERIFY_SSL,
 )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/config/settings.py` around lines 371 - 379, The long-lived AsyncClient
stored as self.docling_http_client is being created without passing the
DOCLING_SERVE_VERIFY_SSL setting so it always verifies SSL; update the
construction in settings.py to pass verify=DOCLING_SERVE_VERIFY_SSL (or the
corresponding boolean constant) to httpx.AsyncClient/httpx.Timeout
initialization so DoclingService._get_client receives a client that honors the
DOCLING_SERVE_VERIFY_SSL flag; alternatively, modify DoclingService._get_client
to wrap or recreate the injected client with verify=DOCLING_SERVE_VERIFY_SSL
when the injected client lacks that setting.
🧹 Nitpick comments (1)
src/dependencies.py (1)

124-125: 💤 Low value

Move import base64 to module level.

base64 is a stdlib module and should be imported at the top of the file rather than inside a conditional branch.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/dependencies.py` around lines 124 - 125, Move the standard-library import
out of the conditional and place it at module level: remove the inline "import
base64" from the block that checks IBM_USERNAME and IBM_PASSWORD and add "import
base64" with the other top-level imports; keep the conditional logic that uses
IBM_USERNAME and IBM_PASSWORD unchanged so only the import location is modified.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/dependencies.py`:
- Around line 122-141: The current env-var override in the top-level auth path
(creating User and setting request.state.user) will unconditionally bypass
per-request auth when IBM_USERNAME/IBM_PASSWORD are set; change this to only run
when IBM_AUTH_DEV_MODE is enabled (i.e., gate the block on IBM_AUTH_DEV_MODE in
addition to IBM_USERNAME and IBM_PASSWORD) and elevate the logger call from
logger.debug to logger.warning to make the override visible; update the block
where User is constructed and request.state.user is set (the code that builds
lh_credentials and sets jwt_token/opensearch_credentials) so it only executes
when IBM_AUTH_DEV_MODE is true.

---

Outside diff comments:
In `@src/config/settings.py`:
- Around line 371-379: The long-lived AsyncClient stored as
self.docling_http_client is being created without passing the
DOCLING_SERVE_VERIFY_SSL setting so it always verifies SSL; update the
construction in settings.py to pass verify=DOCLING_SERVE_VERIFY_SSL (or the
corresponding boolean constant) to httpx.AsyncClient/httpx.Timeout
initialization so DoclingService._get_client receives a client that honors the
DOCLING_SERVE_VERIFY_SSL flag; alternatively, modify DoclingService._get_client
to wrap or recreate the injected client with verify=DOCLING_SERVE_VERIFY_SSL
when the injected client lacks that setting.

---

Nitpick comments:
In `@src/dependencies.py`:
- Around line 124-125: Move the standard-library import out of the conditional
and place it at module level: remove the inline "import base64" from the block
that checks IBM_USERNAME and IBM_PASSWORD and add "import base64" with the other
top-level imports; keep the conditional logic that uses IBM_USERNAME and
IBM_PASSWORD unchanged so only the import location is modified.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: f294f043-1aa4-4168-8f3c-d303b21c8302

📥 Commits

Reviewing files that changed from the base of the PR and between ee7f40e and c4fd2bc.

📒 Files selected for processing (8)
  • .env.example
  • docker-compose.yml
  • src/api/docling.py
  • src/config/settings.py
  • src/dependencies.py
  • src/services/auth_service.py
  • src/services/docling_service.py
  • src/utils/opensearch_utils.py
✅ Files skipped from review due to trivial changes (1)
  • src/services/auth_service.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/services/docling_service.py

Comment thread src/dependencies.py
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
src/main.py (2)

262-263: ⚡ Quick win

Deduplicate the inline import of IBM_AUTH_DEV_MODE / IBM_AUTH_ENABLED inside init_index.

The same from config.settings import IBM_AUTH_DEV_MODE, IBM_AUTH_ENABLED statement appears twice inside one function (lines 262 and 325). Move it once to the top of init_index.

♻️ Proposed refactor
 async def init_index(opensearch_client=None, admin_username: str = None):
     """Initialize OpenSearch index and security roles"""
     os_client = opensearch_client or clients.opensearch
+    from config.settings import IBM_AUTH_DEV_MODE, IBM_AUTH_ENABLED
     try:
         ...
         else:
             logger.info(
                 "Index already exists, skipping creation",
                 ...
             )
-            from config.settings import IBM_AUTH_DEV_MODE, IBM_AUTH_ENABLED
             if not (IBM_AUTH_ENABLED and IBM_AUTH_DEV_MODE):
                 ...
         ...
         else:
             logger.info(
                 "Knowledge filters index already exists, skipping creation",
                 ...
             )
-            from config.settings import IBM_AUTH_DEV_MODE, IBM_AUTH_ENABLED
             if not (IBM_AUTH_ENABLED and IBM_AUTH_DEV_MODE):
                 ...

Also applies to: 325-326

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/main.py` around lines 262 - 263, The init_index function currently
imports IBM_AUTH_DEV_MODE and IBM_AUTH_ENABLED inline in multiple places; remove
the duplicate inline imports and place a single "from config.settings import
IBM_AUTH_DEV_MODE, IBM_AUTH_ENABLED" once at the top of init_index, then update
the conditional checks (the existing if not (IBM_AUTH_ENABLED and
IBM_AUTH_DEV_MODE) and the later usage) to reference those imported names
without re-importing them.

265-281: ⚡ Quick win

Broad Exception catch flagged by ruff BLE001.

Both new try/except blocks (replica normalization for documents index and knowledge-filters index) catch Exception blindly. The intent is clearly to log-and-continue on startup, which is reasonable, but ruff BLE001 fires on both. Consider narrowing to specific OpenSearch client exceptions (e.g., opensearchpy.TransportError) or suppressing the lint rule with a targeted # noqa: BLE001 comment if the broad catch is intentional.

Also applies to: 327-343

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/main.py` around lines 265 - 281, The try/except around
os_client.indices.get_settings / os_client.indices.put_settings is catching
broad Exception (raising ruff BLE001); change the except to catch the OpenSearch
client-specific error (e.g., opensearchpy.exceptions.TransportError or the
appropriate client exception your OpenSearch client uses) so only client errors
are swallowed and logged via logger.warning, or if broad catching is
intentionally required for startup resilience, add a targeted suppression
comment (# noqa: BLE001) immediately on the except line; update both the
documents index block (get_settings/put_settings) and the corresponding
knowledge-filters block to use the same specific-exception handling or the same
noqa suppression.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/main.py`:
- Around line 262-263: The init_index function currently imports
IBM_AUTH_DEV_MODE and IBM_AUTH_ENABLED inline in multiple places; remove the
duplicate inline imports and place a single "from config.settings import
IBM_AUTH_DEV_MODE, IBM_AUTH_ENABLED" once at the top of init_index, then update
the conditional checks (the existing if not (IBM_AUTH_ENABLED and
IBM_AUTH_DEV_MODE) and the later usage) to reference those imported names
without re-importing them.
- Around line 265-281: The try/except around os_client.indices.get_settings /
os_client.indices.put_settings is catching broad Exception (raising ruff
BLE001); change the except to catch the OpenSearch client-specific error (e.g.,
opensearchpy.exceptions.TransportError or the appropriate client exception your
OpenSearch client uses) so only client errors are swallowed and logged via
logger.warning, or if broad catching is intentionally required for startup
resilience, add a targeted suppression comment (# noqa: BLE001) immediately on
the except line; update both the documents index block
(get_settings/put_settings) and the corresponding knowledge-filters block to use
the same specific-exception handling or the same noqa suppression.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 91b0c836-07cc-4a72-a711-6fc2fa789f44

📥 Commits

Reviewing files that changed from the base of the PR and between c4fd2bc and 5de0dcb.

📒 Files selected for processing (4)
  • .env.example
  • flows/ingestion_flow.json
  • src/config/settings.py
  • src/main.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/config/settings.py

@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 8, 2026
@github-actions github-actions Bot added the enhancement 🔵 New feature or request label May 11, 2026
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 11, 2026
… through an exception'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 11, 2026
@github-actions github-actions Bot added ci ⬛ CI/CD, build, and infrastructure issues enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 11, 2026
@github-actions github-actions Bot removed the enhancement 🔵 New feature or request label May 11, 2026
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 11, 2026
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 11, 2026
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 11, 2026
@github-actions github-actions Bot added enhancement 🔵 New feature or request and removed enhancement 🔵 New feature or request labels May 12, 2026
@lucaseduoli
lucaseduoli merged commit 2b27536 into main May 12, 2026
13 of 14 checks passed
@github-actions
github-actions Bot deleted the feat/docling_auth branch May 12, 2026 14:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend 🔷 Issues related to backend services (OpenSearch, Langflow, APIs) ci ⬛ CI/CD, build, and infrastructure issues docker enhancement 🔵 New feature or request lgtm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants