Skip to content

Fix connector settings r041#1496

Open
Wallgau wants to merge 115 commits into
release-saas-0.1from
fix-connector-settings-r041
Open

Fix connector settings r041#1496
Wallgau wants to merge 115 commits into
release-saas-0.1from
fix-connector-settings-r041

Conversation

@Wallgau
Copy link
Copy Markdown
Collaborator

@Wallgau Wallgau commented Apr 28, 2026

Summary
Hydrate connector ingest settings from GET /api/settings knowledge values (for existing ingest UI fields only) and keep them session-owned via useSessionIngestSettings.
Make cloud picker ingest settings controlled from upload page, and fix embedding model select rendering so user-selected models are always reflected (even if not in fetched options list yet).
Ensure connector sync respects per-request ingest settings end-to-end in both Langflow and non-Langflow paths, with connector-only embedding model override behavior and reusable UI-settings→tweaks mapping.
Key changes
Frontend ingest state + UX

Added frontend/lib/ingest-settings-knowledge.ts to map knowledge settings to ingest panel shape.
Added frontend/hooks/useSessionIngestSettings.ts to hydrate once from settings and preserve in-session edits.
Updated frontend/app/upload/[provider]/page.tsx to use controlled ingest settings and improved sync error handling.
Updated frontend/components/cloud-picker/unified-cloud-picker.tsx + types.ts for controlled ingest props (ingestSettings, onIngestSettingsChange).
Updated frontend/components/cloud-picker/ingest-settings.tsx to avoid clobbering user model selection and to ensure current selected model is always represented in Select options.
Backend connector ingest propagation

Added optional settings to connector sync API request model and passed through router/service layers:
src/api/connectors.py
src/api/connector_router.py
src/connectors/service.py
src/connectors/langflow_connector_service.py
src/models/processors.py
Non-Langflow path now consumes connector ingest settings in ConnectorFileProcessor:
applies embeddingModel
applies chunkSize/chunkOverlap through TaskProcessor.process_document_standard(...).
Added resplit_chunks_character_windows helper for non-Langflow chunk sizing in src/utils/document_processing.py.
Langflow-specific behavior

Added LangflowFileService.merge_ui_ingest_settings_into_tweaks(...) with documentation.
Connector path strips embeddingModel from tweaks and passes it via selected_embedding_model to avoid conflict with global header override.
run_ingestion_flow now prioritizes:
explicit selected_embedding_model
OpenAI embeddings tweak model
configured knowledge embedding model

Olfa Maslah and others added 30 commits March 16, 2026 14:15
Share knowledge table merge/identity logic and reuse it in the filter panel so source options stay consistent with table-active data while keeping per-source counts.

Made-with: Cursor
Improve hybrid search quality with a default score threshold, short-query threshold relaxation, prefix matching support, and exact-file preference for unique query text.

Made-with: Cursor
Use a semantic container for the selected filter chip and apply truncation so long filter names don't overflow the chat input.

Made-with: Cursor
Handle list-wrapped Docling export inputs in the ingest flow component and enable numeric sorting for the Knowledge table size column.

Made-with: Cursor
Drop the temporary ExportDoclingDocument code patch from the ingest flow so this branch only carries the size-order UI change.

Made-with: Cursor
Ensure duplicate checks and replacement deletions consider .txt/.md aliases so re-uploading text files triggers overwrite behavior instead of appending chunks.

Made-with: Cursor
Keep settings persistence responsive by saving config and returning immediately, while running heavy Langflow global-variable/model propagation asynchronously with safe error logging.

Made-with: Cursor
Add a Playwright spec that validates numeric sorting for the Knowledge table size column and keeps the test strongly typed with explicit response and route interfaces.

Made-with: Cursor
fix: truncate selected chat filter chip label
* updated logic to update versions with scripts for nightly

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* update import

* remove pyproject from update version

* updated update_pyproject_name

* updated nightly logic

* changed things for github

* fix github nitpicks

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Make sortable columns explicit and add typed value getters/comparators so owner, status, and numeric fields sort predictably while preserving default AG Grid sort-cycle behavior.

Made-with: Cursor
#1177) (#1201)

settings.py calls current_config.providers.any_configured() but
ProvidersConfig had no such method, causing an AttributeError that
surfaces as a 500 error during onboarding when configuring watsonx.ai
or ollama providers.

Closes #1163

Made-with: Cursor

Co-authored-by: Mavik <179817126+themavik@users.noreply.github.com>
Co-authored-by: themavik <themavik@users.noreply.github.com>
Wallgau and others added 23 commits March 25, 2026 12:51
…r-error

fix: show unsupported-file ingest warning and overwrite for for folder duplicates
…red files (#1265)

* return just backend files when a filter is active

* Added refresh when files are added

* updated to have refetch interval on get search query

* deleted comments
* Added check for podman compose inside startup checks

* install podman-compose even if podman compose is available

* Removed podman specific commands for compose_available

* Add path local bin to podman compose installation

* fix pacman command

* fixed ruff

* fixed check for podman compose
Issues

- #1267
- #1298
- #1297

Summary

- Improved health check output and fixed host resolution config in Docker Compose

Docker Compose Fixes
- Moved `volumes` and `extra_hosts` definitions for the `langflow` service to appear after `ports`, restoring the intended ordering
- Moved `extra_hosts: host.docker.internal:host-gateway` from the `langflow` service to the `openrag-backend` service to correctly fix hostname resolution on Linux

Makefile Health Check Improvements
- Updated the OpenSearch health check to query `/_cluster/health` instead of the root endpoint, returning structured `{status}` JSON for clearer output
- Switched the OpenSearch health check to use `OPENSEARCH_USERNAME` instead of the hardcoded `admin` value
- Added a Docling health check entry targeting `http://localhost:5001/health`
Issues

- #1267
- #1298
- #1297

Makefile

- Fix `make health` for OpenSearch on MacOS
…g-url-resolution-failure-linux

fix: Unable to resolve Docling URL via Langflow on Linux
…_rag_pipeline

Issue

- #1307

Summary

- Fixed three integration test failures by repairing the non-streaming RAG sources extraction path in async_langflow_chat, eliminating a post-ingest indexing race condition, and hardening the e2e test query to
reliably trigger OpenSearch retrieval.

Backend: Sources Extraction (src/agent.py)

- Removed the item_type in ("tool_call", "retrieval_call") type guard that caused sources to always be []; Langflow's OpenAI-compatible API does not populate response.output with typed retrieval items.
- Added Layer 2 fallback: inspects top-level dict keys (results, outputs, retrieved_documents, retrieval_results) on the serialised response object, mirroring the existing streaming middleware logic.
- Added Layer 3 fallback: regex-parses (Source: filename) citation patterns emitted by the LLM as a guaranteed last resort.

Backend: Post-Ingest Index Refresh (src/services/task_service.py)

- Called clients.opensearch.indices.refresh() immediately after a task completed with successful_files > 0, closing the near-real-time indexing window that caused delete_by_query to find zero chunks right
after a successful ingest.
- Treated the refresh as non-fatal: exceptions are caught and logged at DEBUG level.

Test: E2E Query Phrasing (tests/integration/sdk/test_e2e.py)

- Prefixed the test_full_rag_pipeline chat message with "According to the documents in my knowledge base, ..." so the LLM is forced to invoke the OpenSearch retrieval tool rather than answering from general
training knowledge.
…_rag_pipeline

Issue

- #1307

Summary

- Fixed two integration tests (test_chat_with_sources, test_full_rag_pipeline) that were failing due to a race condition between task completion signaling and OpenSearch index refresh, and fragile
source-citation assertions.

Bug Fixes

- src/services/task_service.py: Reordered index refresh to occur before marking the task as COMPLETED, so callers polling for completion can immediately query or delete newly indexed chunks without hitting the
near-real-time refresh window.
- src/agent.py: Moved import re to the citation-fallback code path (lazy import) where it is actually used, eliminating the top-level import; also cleaned up trailing whitespace throughout the file.

Test Improvements

- tests/integration/sdk/test_e2e.py: Added a retry loop (up to 5 attempts, 2 s apart) after ingestion to verify the document is searchable before proceeding, absorbing residual index refresh latency.
- Replaced the fragile source-filename assertion with a content-based assertion: checks that the unique fictional terms "Zephyr" or "Xylox" appear in the LLM response, confirming the correct document was
retrieved regardless of how the LLM formats its citation.
- Refined the chat prompt to be more specific, improving retrieval reliability.
…_rag_pipeline

Issue

- #1307

Summary

- Disabled flaky end-to-end RAG pipeline test that was producing indeterministic results

Testing

- Added `@pytest.mark.skip` decorator to `test_full_rag_pipeline` in `tests/integration/sdk/test_e2e.py`
- Documented skip reason as "Test scenario is returning indeterministic or flaky results resulting in random failures"
…ation-test-failures

fix: Integration tests are failing: test_chat_with_sources, test_full_rag_pipeline
…Search (#1318)

* Added number_of_replicas as 0 to not create unused nodes in OpenSearch

* Added number of replicas changing

* updated number of replicas to be on the same level of number of shards

* added number of shards

* changed to put settings just if it wasnt applied

* removed number of shards from put settings

* fixed main
* added graceful shutdown and entrypoint wrapper

* fix: added graceful shutdown and entrypoint wrapper

Issue

- #1170

Summary

- Improved OpenSearch graceful shutdown reliability by flushing pending writes, adding a force-kill fallback in the entrypoint wrapper, and preventing double-close of the client connection.
- Hardened the Docker Compose healthcheck to verify authenticated cluster health status rather than bare connectivity.

OpenSearch Shutdown Improvements

- Replaced `cluster.health()` call with `indices.flush(index="_all", wait_if_ongoing=True)` in `graceful_opensearch_shutdown` to ensure pending write operations are persisted before the client closes.
- Set `clients.opensearch = None` after graceful shutdown in `src/main.py` to prevent a redundant double-close during `clients.cleanup()`.
- Added a 90-second wait loop with `kill -0` polling in `opensearch-entrypoint-wrapper.sh` before issuing a force `SIGKILL`, ensuring the process has time to stop cleanly before being forcibly terminated.
- Removed stale "Made with Bob" comment from `opensearch-entrypoint-wrapper.sh`.

Docker Compose Healthcheck

- Updated the OpenSearch healthcheck command to authenticate with `admin:$OPENSEARCH_PASSWORD` and query `/_cluster/health`, asserting the cluster status is `green` or `yellow` rather than only checking for a successful TCP connection.

* fix commented out build image

---------

Co-authored-by: Mike Pawlowski <mpawlow@ca.ibm.com>
…, fix search functionality for all providers (#1347)

* Revert "Remove agentd integration; add OpenAI deps"

This reverts commit 55db515.

* changed uv lock

* change http2 probe to use configured provider

* Centralized litellm logic and dimensions

* pinned litellm

* Changed pyproject and uv lock

* Changed agentd lock

* Changed model name referencing variable inside try

* changed files to reference embedding model just from embedding constants

* wrap search tool in global function to work with @tool

* just run probe when openai

* removed patched client since only openai works now

* changed os environment with correct ollama api base and base url before litellm call

* revert docker compose

* removed unused import openai

* fixed review comments

* add parenthesis on the embedding model

* Changed model-provider association to occur in ModelsService, with a global dict controlling the state

* Removed creation of dynamic index body and create index based on current embedding's size

* added function to fetch all models when loading them on settings page and on init

* update pyproject

* deleted unused dimensions

* updated documentation for file

* removed unused code and raise value error when dimensions dont exist

* pass models service to required fields

* add check for none provider lower

* added guard for empty embeddings

* add anthropic on known prefixes

* Fixed anonymous user and ollama ingestion of default documents

* Removed redundant call to litellm

* fixed documents not ingested
…arch-data (#1377)

* Changed factory-reset and env manager references to opensearch-data

* deleted opensearch data references

* Fixed review comments
Ensure connector ingest settings are consistently respected across frontend and backend flows. The upload UI now uses session-hydrated knowledge defaults with controlled ingest state, preserves selected embedding values in the model picker, and navigates to Knowledge only after successful sync. Backend connector sync now forwards per-request ingest settings through router/service/processor layers, applies selected embedding model correctly (including connector-only Langflow override behavior), and adds reusable settings-to-tweaks mapping plus unit coverage for tweak merging and non-Langflow chunk resplitting.
… usage and relying on SELECTED_EMBEDDING_MODEL for Langflow ingestion model selection.

Also updated merge-tweaks tests to reflect the new behavior: embeddingModel is ignored in tweaks while chunk-related settings continue to map to SplitText tweaks.
@github-actions github-actions Bot added frontend 🟨 Issues related to the UI/UX backend 🔷 Issues related to backend services (OpenSearch, Langflow, APIs) tests labels Apr 28, 2026
@Wallgau Wallgau changed the base branch from release-0.4.1 to release-saas-0.1 April 28, 2026 13:53
@Wallgau Wallgau closed this Apr 28, 2026
@Wallgau
Copy link
Copy Markdown
Collaborator Author

Wallgau commented Apr 28, 2026

create the branch from release instead of release-saas

@Wallgau Wallgau reopened this Apr 28, 2026
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) frontend 🟨 Issues related to the UI/UX tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants