feat: valkey support#3
Open
MatthiasHowellYopp wants to merge 282 commits into
Open
Conversation
…ovider is Configured (release-1.8.0) (langflow-ai#12053) * fix: add showEmptyState prop to ModelInputComponent for better UX when no models are enabled * style: convert double quotes to single quotes in modelInputComponent * fixes refresh and kb blocker * style: convert double quotes to single quotes in ModelTrigger component * style: convert double quotes to single quotes in model provider components - Convert all double quotes to single quotes in use-get-model-providers.ts and ModelProvidersContent.tsx - Remove try-catch block in getModelProvidersFn to let errors propagate for React Query retry and stale data preservation - Add flex-shrink-0 to provider list container to prevent layout issues
…tch (langflow-ai#12067) fix(test): Reduce response length assertions in flaky integration tests (langflow-ai#12057)
…w-ai#12064) * add pdf and docx for knowledge bases * ruff style checker fix * fix jest test
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Cristhian Zanforlin Lousa <cristhian.lousa@gmail.com> fix(test): Reduce response length assertions in flaky integration tests (langflow-ai#12057)
…angflow-ai#12069) * fix: refactor KnowledgeBaseEmptyState to use optimistic updates hook * updated tst
…i#12050) * Apply provider variable config to Agent build_config Import and use apply_provider_variable_config_to_build_config in the Agent component so provider-specific variable settings (advanced/required/info/env fallbacks) are applied to the build_config. Provider-specific fields (e.g. base_url_ibm_watsonx, project_id) are hidden/disabled by default before applying the provider config. Updated embedded agent code in starter project JSONs and bumped their code_hashes accordingly. * [autofix.ci] apply automated fixes * update tests --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Himavarsha <40851462+HimavarshaVS@users.noreply.github.com> Co-authored-by: himavarshagoutham <himavarshajan17@gmail.com>
Fixed metric calculator to be more robust and scalable.
…Bases (langflow-ai#12132) Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
…2136) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
update fastapi dependency
* fix: Properly Propagate max_tokens param * Update tests and templates * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * [autofix.ci] apply automated fixes (attempt 3/3) --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix: include uv/uvx in runtime Docker image add uv/uvx to runtime image so uvx is available in container i did this for all images which might be too much * chore: address supply chain attack addres ram's supply chain attack comment * chore: upgrade pyproject versions upgrade pyproject versions
* fix: preserve api key configuration on flow export Made-with: Cursor * fix individual component's field * [autofix.ci] apply automated fixes * unhide var name * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * fetch relevant provider keys * update starter projects * update based on env var * [autofix.ci] apply automated fixes * fetch only env variables * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * update starter projects * fix ruff errors * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * don't remove api keys if chosen by user * remove redundant code * [autofix.ci] apply automated fixes * fix update build config * remove api keys refactor * only load values when exists in db * modify other components * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * Template updates * [autofix.ci] apply automated fixes * Component index update * Fix frontend test * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * preserve var names * [autofix.ci] apply automated fixes * update caution for saving api keys --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Eric Hare <ericrhare@gmail.com>
Modified tweak behaviour to be overridable if env variable is set on the GUI.
…tion (langflow-ai#12172) * Handle missing config file in MCP client availability detection * code improvements * [autofix.ci] apply automated fixes * code improvements review * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
before it was attempting to pull release-notes as letters are alphanumerically after numbers when we sort -V then grab tail now we only look at branch names that follow the pattern '^release-[0-9]+\.[0-9]+\.[0-9]+$'
add-back-svg
…angflow-ai#12242) * fix: Topological sort on child spans * Update test_native_tracer.py * address review comments
upgrade pyproject and package.json versions
* feat: Add Windows Playwright tests to nightly builds
- Add windows-latest to typescript_test.yml runner options
- Add shell: bash to all script steps for cross-platform compatibility
- Split Playwright installation into OS-aware steps (Linux uses --with-deps, Windows/macOS/self-hosted don't)
- Fix artifact naming with OS prefix to prevent conflicts: blob-report-${{ runner.os }}-${{ matrix.shardIndex }}
- Split frontend-tests into separate Linux and Windows jobs in nightly_build.yml
- Add ref parameter to all test jobs to checkout code from release branch
- Add resolve-release-branch to needs dependencies
- Update Slack notifications to handle both Linux and Windows test results
- Windows tests are non-blocking (not checked in release-nightly-build condition)
- Update .secrets.baseline with new line number (263 -> 347) for LANGFLOW_ENG_SLACK_WEBHOOK_URL
Fixes LE-566
* fix: Use contains() for self-hosted runner detection
- Replace exact string equality (==, !=) with contains() for substring matching
- Fixes issue when inputs.runs-on is array format: '["self-hosted", "linux", "ARM64", ...]'
- Ensures self-hosted Linux runners correctly skip --with-deps flag
Addresses CodeRabbit feedback on PR langflow-ai#12264
…nv vars (langflow-ai#12273) * release-note * docs-update-docling-page-and-move-release-note * docs-update-env-file-for-desktop * Apply suggestions from code review Co-authored-by: April I. Murphy <36110273+aimurphy@users.noreply.github.com> Co-authored-by: Mendon Kissling <59585235+mendonk@users.noreply.github.com> --------- Co-authored-by: April I. Murphy <36110273+aimurphy@users.noreply.github.com>
…low-ai#12247) docs-contribute-to-rc-not-main
docs-gemini3-toolcalling-disabled
…er images (langflow-ai#12330) * fix: replace grep -oP with sed for Node.js version extraction in Docker builds The grep -oP (PCRE regex) command fails in the python:3.12.12-slim-trixie Docker base image because PCRE support is not available in the slim variant. This replaces grep -oP with portable sed -nE in all 5 Dockerfiles and adds an empty version guard to fail fast with a clear error message instead of producing a broken download URL. Fixes the Docker base build failure in the v1.8.2 release workflow. * fix(docker): remove broken npm self-upgrade from Docker images Node.js 22.x now bundles npm 11.x which fails when trying to self-upgrade via 'npm install -g npm@latest' in the slim Docker image. The bundled npm version is sufficient. This is the same fix as PR langflow-ai#12309 on release-1.9.0.
…ai#12333) Co-authored-by: vjgit96 <vijay.katuri@ibm.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> fix: replace grep -oP with sed for Node.js version extraction in Docker images (langflow-ai#12330) fix as PR langflow-ai#12309 on release-1.9.0.
langflow-ai#12329) * fix: prevent overwriting user-selected global variables in provider c… (langflow-ai#12217) * fix: nightly now properly gets 1.9.0 branch (langflow-ai#12215) before it was attempting to pull release-notes as letters are alphanumerically after numbers when we sort -V then grab tail now we only look at branch names that follow the pattern '^release-[0-9]+\.[0-9]+\.[0-9]+$' * docs: add search icon (langflow-ai#12216) add-back-svg * fix: prevent overwriting user-selected global variables in provider config Previously, the apply_provider_variable_config_to_build_config function would automatically overwrite field values with environment variable keys whenever an env var was present, even if the user had already selected a different global variable. This fix adds a check to only auto-set the environment variable if: - The field is currently empty, OR - The field is not already configured to load from the database This preserves user selections while still providing automatic configuration for new/empty fields. Added comprehensive unit tests to verify: - Auto-setting env vars for empty fields - Preserving user-selected global variables - Overwriting hardcoded values (expected behavior) - Skipping when env var is not set - Applying component metadata correctly * [autofix.ci] apply automated fixes * style: use dictionary comprehension instead of for-loop Fixed PERF403 Ruff style warning by replacing for-loop with dictionary comprehension in update_projects_components_with_latest_component_versions * chore: retrigger CI build * test: improve test coverage and clarity for provider config - Renamed test_apply_provider_config_overwrites_hardcoded_value to test_apply_provider_config_replaces_hardcoded_with_env_var for clarity - Added test_apply_provider_config_idempotent_when_already_set to document idempotent behavior when value already matches env var key - Removed sensitive value from debug log message to prevent potential exposure of API keys or credentials These changes improve test coverage by documenting the no-op scenario and enhance security by avoiding logging of potentially sensitive data. * chore: retrigger CI build --------- Co-Authored-By: Adam-Aghili <149833988+Adam-Aghili@users.noreply.github.com> Co-Authored-By: Mendon Kissling <59585235+mendonk@users.noreply.github.com> Co-Authored-By: Steve Haertel <shaertel@ca.ibm.com> Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-Authored-By: Eric Hare <ericrhare@gmail.com> * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * [autofix.ci] apply automated fixes (attempt 3/3) * Update test_unified_models.py --------- Co-authored-by: Adam-Aghili <149833988+Adam-Aghili@users.noreply.github.com> Co-authored-by: Mendon Kissling <59585235+mendonk@users.noreply.github.com> Co-authored-by: Steve Haertel <shaertel@ca.ibm.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix: replace grep -oP with sed for Node.js version extraction in Docker images (langflow-ai#12330) * fix: replace grep -oP with sed for Node.js version extraction in Docker builds The grep -oP (PCRE regex) command fails in the python:3.12.12-slim-trixie Docker base image because PCRE support is not available in the slim variant. This replaces grep -oP with portable sed -nE in all 5 Dockerfiles and adds an empty version guard to fail fast with a clear error message instead of producing a broken download URL. Fixes the Docker base build failure in the v1.8.2 release workflow. * fix(docker): remove broken npm self-upgrade from Docker images Node.js 22.x now bundles npm 11.x which fails when trying to self-upgrade via 'npm install -g npm@latest' in the slim Docker image. The bundled npm version is sufficient. This is the same fix as PR langflow-ai#12309 on release-1.9.0. * chore: version bump and merge 1.8.2 bump version to 1.8.3, 0.8.3 and 0.3.3 merge changes added to 1.8.2 into 1.8.3 --------- Co-authored-by: vjgit96 <vijay.katuri@ibm.com>
…i#12588) * feat: implement Redis job queue and fakeredis support - Refactored the job queue service to support Redis-backed management for cross-worker scaling. - Added environment variables for configuration: - `LANGFLOW_JOB_QUEUE_TYPE=redis` - `LANGFLOW_REDIS_QUEUE_DB=1` - Updated job ownership methods to be asynchronous for improved concurrency handling. - Enhanced Redis cache service with namespacing via key prefixes. - Introduced `fakeredis` for in-memory Redis simulation in testin> - Added comprehensive unit tests for Redis job queue components. * fix: run experimental warning for RedisCache usage only once - Introduced a mechanism to emit a one-time warning for the RedisCache experimental feature during server runtime. - The warning is logged only if no other worker has already emitted it, ensuring clarity for users regarding the experimental status of RedisCache. - The implementation includes a temporary file check to prevent multiple warnings across different processes. * docs: document environment variables for worker management - Added documentation for LANGFLOW_GUNICORN_PRELOAD to explain preloading for better performance. - Detailed the use of LANGFLOW_JOB_QUEUE_TYPE for specifying backends (e.g., Redis). - Included LANGFLOW_REDIS_QUEUE_DB to define the database index for job queues. - Updated the "High-Load Environments" guide with these optimal configurations. * docs: updated 'High-load and multi-worker environments' section * feat: enhance RedisJobQueueService with consumer wrapper management - Introduced a caching mechanism for Redis stream consumers to optimize job data retrieval. - Added methods to manage consumer wrappers, ensuring they are reused across sequential polls. - Implemented cleanup logic to cancel and clear consumer wrappers during job cleanup and service stop. - Expanded unit tests to verify consumer wrapper reuse and cleanup behavior. * fix: ensure Redis keys are deleted during job cleanup even on cancellation - Updated the cleanup_job method in RedisJobQueueService to guarantee Redis keys are removed even if the job cleanup is interrupted by a CancelledError. - Added a new unit test to verify that Redis keys are deleted correctly when cleanup is called during task cancellation. * fix: manage connection check task in RedisJobQueueService - Added handling for the connection check task in the stop method to ensure it is properly cancelled and awaited if still running. - This change improves resource management and prevents potential issues during service shutdown. * fix: handle unpublished sentinel requeue on cancellation in RedisJobQueueService - Updated the job processing logic to ensure that if a job is cancelled during the xadd operation, the unpublished sentinel is requeued instead of being dropped. - Introduced a new unit test to verify this behavior, ensuring robustness in job handling during cancellations. * fix: improve Redis job queue service with enhanced configuration and cleanup - Added atexit cleanup to remove stale temporary files for RedisCache. - Refactored Redis job queue service to use shared constants for stream prefixes, improving maintainability. - Updated type hints for better clarity and consistency in RedisQueueWrapper and RedisJobQueueService. - Enhanced error handling with configurable backoff for transient read failures. * fix: enhance Redis job queue service with maxlen configuration for xadd - Updated the xadd method in RedisJobQueueService to include maxlen and approximate parameters, improving stream management and preventing excessive memory usage. * fix: enhance job ownership retrieval in RedisJobQueueService - Updated the get_job_owner method to refresh the Redis key TTL on successful lookups, ensuring long-running jobs maintain their ownership anchor. - Improved code clarity by extracting the owner key into a variable and adding detailed docstring explanations for better understanding of the TTL management. * fix: improve job ownership handling in cleanup_job method - Enhanced the cleanup_job method in RedisJobQueueService to accurately capture job ownership before deleting Redis keys, preventing potential data corruption in multi-worker scenarios. - Added comments for clarity on ownership logic and its implications during job cleanup. * fix: optimize TTL management in RedisJobQueueService - Introduced periodic TTL refresh logic in the _bridge_to_redis method to enhance Redis stream management, reducing round-trips and improving throughput. - Added constants for TTL refresh events and seconds to maintain clarity and configurability. - Updated event handling to ensure TTL is refreshed appropriately based on event count and time elapsed. * fix: improve event handling in flow response management - Removed unnecessary error handling for missing event tasks in get_flow_events_response, allowing for smoother operation when no task exists. - Updated create_flow_response to handle optional event_task parameter, ensuring proper cleanup during disconnections. - Added unit tests to verify behavior when event tasks are missing, enhancing robustness in streaming scenarios. * fix: enhance RedisQueueWrapper with startup grace period and stream observation - Added a startup grace period to prevent premature end-of-stream signals when the producer has not yet issued its first XADD. - Introduced a flag to track whether the stream has been observed, improving the handling of early polling scenarios. - Updated logic to ensure proper handling of stream existence checks and logging for better debugging during job processing. * fix: implement cleanup for old cross-worker job queues in RedisJobQueueService - Added a new method to clean up done cross-worker consumer wrappers that are not owned by the current worker, ensuring proper resource management. - Enhanced the existing cleanup logic to prevent memory leaks by explicitly pruning stale entries from the consumer wrappers dictionary. - Improved logging to provide better visibility into the cleanup process for cross-worker jobs. * fix: enhance job handling in JobQueueService with guarded task execution - Updated the start_job method to accept a Coroutine type for task_coro, ensuring type safety. - Introduced a new _guarded_task method to wrap job coroutines, guaranteeing that unhandled exceptions emit an error event and write a sentinel to the Redis Stream, improving reliability in job processing. - Enhanced documentation to clarify the behavior of the new task handling mechanism and its implications for cross-worker consumers. * fix: improve client disconnection handling in create_flow_response - Added logging for scenarios where a client disconnects without an associated event_task, clarifying that the producer will continue running until the build completes. - Documented the limitation regarding cross-worker passive disconnects and the need for a Redis side-channel for proper cancellation, enhancing observability in the logs. * fix: enhance RedisQueueWrapper to manage initial read state and buffer behavior - Introduced a flag to track the completion of the first XREAD call, ensuring proper buffer management during the initial read phase. - Updated the empty method to reflect the state of the buffer accurately, preventing premature exits from the drain loop until the first read is complete. - Improved documentation to clarify the behavior of the new flag and its impact on job processing. * fix: clarify RedisQueueWrapper behavior in tests for buffer state and no-op operations - Updated test documentation to explain the behavior of the empty() method in relation to the first XREAD completion, ensuring accurate understanding of buffer state during job processing. - Adjusted assertions in tests to reflect the intended behavior of the RedisQueueWrapper, specifically regarding the no-op nature of put_nowait and its impact on the internal buffer. * fix: update dependencies in pyproject.toml and uv.lock - Added fakeredis dependency with a minimum version of 2.0.0 to both pyproject.toml and uv.lock files. - Ensured proper formatting and comments in pyproject.toml for clarity on onnxruntime version constraints. * fix: enhance RedisQueueWrapper and job queue handling for improved cancellation and buffer management - Introduced a structural protocol `_CancellableQueue` to ensure queues can handle cancellation properly during client disconnects. - Updated `RedisQueueWrapper` to implement this protocol, allowing for graceful cancellation of background tasks. - Added a maximum size limit to the internal buffer to prevent unbounded memory usage and ensure backpressure on slow consumers. - Implemented a done callback to handle unexpected fill task crashes, ensuring consumers are not left hanging indefinitely. - Enhanced unit tests to verify compliance with the new protocol and the behavior of the buffer under various conditions. * fix: RedisQueueWrapper sentinel delivery, error time-bound, and cancel response - Deliver end-of-stream sentinel on fill-task cancellation (_on_fill_done now handles both cancelled and exception paths so consumers are never left hanging) - Add _error_start time-bound to xread and exists() error loops: after _STARTUP_GRACE_S seconds of continuous Redis errors the sentinel is delivered instead of retrying forever - Advance _last_id cursor only after buffer.put() succeeds so cancellation mid-put does not silently skip that message in the Redis cursor - Return False from cancel_flow_build when event_task is None (cross-worker path) so the HTTP response correctly reports success=False instead of false success * [autofix.ci] apply automated fixes --------- Co-authored-by: ogabrielluiz <gabriel@langflow.org> Co-authored-by: Jordan Frazier <jordan.frazier@datastax.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
… changes (langflow-ai#13113) * fix: stabilize model toggle and refresh Agent dropdown after provider changes Two related regressions in the Model Provider management flow on release-1.9.3: 1. Toggle bounce — rapid clicks on a model Switch flickered between on and off before settling. ``handleModelToggle`` performed an optimistic ``setQueryData`` on ``useGetEnabledModels`` but never cancelled in-flight refetches. With React Query defaults (``staleTime: 0``, ``refetchOnWindowFocus: true``), a background refetch could land mid-debounce and overwrite the optimistic state with stale server data, then the deferred mutation eventually corrected it. Fix: ``cancelQueries`` before each optimistic update, per the canonical TanStack Query optimistic-updates pattern. 2. Agent dropdown stayed stale after the provider modal closed — disabled models remained listed in the Agent's Language Model dropdown. The post-close ``isRefreshingAfterClose`` loading gate only waited for ``useGetModelProviders`` to settle, not ``useGetEnabledModels``. When the providers refetch finished first, the loading state cleared and ``groupedOptions`` ran against the still-stale enabled-models cache. Fix: track both queries' ``isFetching`` flags in the gate's effect. No behavioral change to the sticky-default UX — the user's previously selected model continues to show in the dropdown with the wrench affordance when globally disabled, as designed. Also narrows the pre-existing ``catch (error: any)`` patterns in the edited hook file to ``unknown`` with a small shared ``getErrorMessage`` helper, satisfying the staged-file no-explicit-any pre-commit lint. Tests: - New ``useProviderConfiguration`` unit test asserts ``cancelQueries`` runs before ``setQueryData`` on toggle. - Extended ``ModelInputComponent`` test covers the dual-query loading gate (providers settles first, enabled-models still in flight → loading persists; then enabled-models settles → loading clears). * fix: re-apply pending overlay through entire mutation lifecycle Addresses review feedback on langflow-ai#13113: ``cancelQueries`` only cancels refetches that are already in flight at click time. A new ``useGetEnabledModels`` refetch can still start during the 1s debounce window (or while the mutation is in flight) and overwrite the optimistic cache with stale server state, producing the same bounce we just fixed. Two coordinated changes keep the optimistic state protected for the entire pending-toggle window: 1. ``pendingModelToggles`` is no longer cleared upfront when the debounced flush sends a mutation. Instead, ``clearSentToggles`` removes only the entries whose value still matches what we sent on ``onSettled`` / ``onError``. This preserves the overlay across the in-flight mutation window AND correctly handles the case where the user re-toggled the same model mid-flight (now a fresh intent that survives clearing). 2. A new ``useEffect`` subscribes to ``useGetEnabledModels`` and re-applies the pending overlay whenever the data emission drifts from the user's pending intent. This catches any refetch (window focus, mount, reconnect, stale-time expiry) that lands between click and ``onSettled``, regardless of when it started. Tests: - New ``re-applies the pending overlay when a refetch surfaces stale data`` test simulates a stale refetch and asserts the effect re-applies the optimistic overlay. - New ``does not re-overlay when no toggles are pending`` test guards against spurious overlay calls on mount. * fix: split overlay vs unsent buffers to prevent duplicate model toggle mutations Addresses a follow-up race introduced by the previous commit: keeping ``pendingModelToggles`` populated through ``onSettled`` (so the re-overlay effect could repel mid-flight refetches) also caused the next flush to snapshot the in-flight entries again, sending duplicate requests with non-deterministic success/failure ordering. The same risk applied to ``flushPendingChanges`` on modal close. Split the single buffer into two refs with single responsibilities: - ``overlayToggles``: the union of every toggle still protecting the UI. The re-overlay effect re-applies this whenever ``useGetEnabledModels`` emits new data. Drained per-key on ``onSettled``/``onError`` only when the overlay value still matches what we sent (a user re-toggle mid-flight becomes a fresh intent and must survive the clear). - ``unsentToggles``: the strict subset that has NOT been sent in a mutation yet, or was re-toggled since the last send. Drained immediately at flush time so subsequent flushes never resend an in-flight payload. ``handleModelToggle`` populates both buffers; flushes drain only ``unsentToggles`` and use ``overlayToggles`` for cache protection. Two new unit tests: - ``does not resend in-flight toggles when a new toggle is flushed`` asserts that after toggling A then B (with A's mutation in flight), the second flush carries ONLY B. - ``re-sends a model when the user re-toggles it after the previous flush fired`` asserts that re-toggling the same model produces a second mutation (the re-toggle is a fresh intent, not a duplicate). * fix: drop sticky-default UX, treat disabled-selected model like any other Removes the sticky-default carve-out so a globally-disabled model is never shown in the Agent's Language Model dropdown, regardless of whether it's the node's saved selection. Drops the Wrench/Configure affordance — there's no per-trigger "this model isn't enabled for your user" UX anymore; the dropdown is the single source of truth. Changes in ``modelInputComponent``: - ``groupedOptions``: drop the ``isStickyNotEnabled`` filter bypass and the zero-provider import fallback. Disabled models never pass the filter, even when tagged ``not_enabled_locally``. - ``selectedModel``: drop the saved-value preservation branch. If the saved name isn't in ``flatOptions``, fall through to the first available option (or ``null`` if nothing is available). - Auto-select effect: fires whenever the saved value isn't in ``flatOptions``, not just when the value is empty. This realigns the node's stored value with the trigger so the rendered selection and the run-time selection don't diverge. - ``hasEnabledProviders``: redefined as "at least one model of this component's type is enabled across any provider" (derived from ``groupedOptions``). Routes a configured-but- all-disabled provider to the Setup Provider CTA — same UX as the never-configured case. - Remove the Wrench JSX, the ``showConfigureAffordance`` derivation, and the now-orphaned ``hasProcessedEmptyRef``. Tests: - ``renders the Setup Provider CTA when no models are enabled`` (replaces the old disabled-combobox expectation). - ``auto-selects an available model when the saved value is globally disabled``. - ``renders the Setup Provider CTA when a provider is configured but all its models are disabled``. - ``never renders the Configure wrench affordance``. * refactor: extract toggle queue into useModelToggleQueue hook Addresses review I1 (file size + mixed responsibilities) and R1, R2, R3, R4 in one pass. I1 — Extract toggle-queue logic out of useProviderConfiguration. The parent hook drops from 821 lines to 601 and now owns a single responsibility (variable CRUD + provider lifecycle). The toggle queue — overlay/unsent buffers, debounced flush, awaitable flush, optimistic cache management, re-overlay effect — lives in a new 292-line useModelToggleQueue.ts with one clear responsibility. R1 — Inside the new hook, DRY the two flush variants behind shared helpers: - ``buildAndConsumeToggleBatch()`` snapshots unsentToggles into the mutation payload, captures the pre-toggle cache for rollback, and drains unsentToggles atomically. - ``rollbackToggleBatch()`` drains overlay BEFORE restoring previousData (load-bearing order — otherwise the re-overlay effect would re-apply the stale overlay over the rollback). The two flush callers now differ only in ``mutate`` vs awaitable ``mutateAsync`` plumbing. R2 — Explicit loop-guard comment on the drift check inside the re-overlay effect. Names the ``drifted`` short-circuit as the termination condition so a future refactor that "simplifies" to an unconditional re-apply doesn't silently introduce a render loop. R3 — Adversarial coverage for the mutation error path: - ``rolls back to previousData when the toggle mutation fails`` - ``does not re-apply the overlay after a failed mutation drains it`` (asserts the drain-before-rollback ordering) - ``preserves a mid-flight re-toggle when the original mutation fails`` (asserts a user re-toggle survives the originating mutation's failure) R4 — ``flushPendingChanges`` now invalidates the affected queries inline on success, instead of relying on the caller's ``refreshAllModelInputs`` for the load-bearing invalidation. The caller's refresh remains as an additive per-node template refresh. Test infra: moved toggle-queue tests from ``useProviderConfiguration.test.tsx`` to a dedicated ``useModelToggleQueue.test.tsx`` that exercises the extracted hook directly. Debounce mock changed from synchronous pass-through to explicit ``runDebounced()`` so individual tests can choose whether to exercise the debounced path or the awaitable ``flushPendingChanges`` path. 95/95 tests pass (87 prior + new R3 coverage + R4 success-path invalidation).
) * fix: pin postgres image to bookworm in docker_example to prevent collation mismatch The postgres:16 tag silently moved its base from Debian Bookworm (glibc 2.36) to Trixie (glibc 2.41), causing a recurring collation version mismatch warning on existing langflow-postgres volumes. Pin to postgres:16-bookworm in both docker-compose files and update the README so existing data volumes keep matching the OS locale data. Refs: langflow-ai#9608 * docs: pin postgres image to bookworm in current docs compose snippets Mirror the docker_example pin in the four current docs that publish copyable Compose snippets pairing postgres:16 with a persistent langflow-postgres volume. Prevents the same Bookworm-to-Trixie collation version mismatch warning when users follow docs instead of docker_example. Versioned historical docs are left as-is. Refs: langflow-ai#9608 * fix: switch postgres pin from bookworm to trixie for OS consistency Aligns the pinned postgres base with the langflow runtime image, which moved to Debian Trixie in langflow-ai#12990. Keeping postgres on bookworm would have diverged the stack and locked the database to an aging glibc that will receive fewer security backports as bookworm ages into oldstable. The pin itself still solves the original bug — postgres:16 cannot silently roll its OS underneath an existing volume. Document the one-time REFRESH COLLATION VERSION step for users upgrading from a bookworm-initialized volume in docker_example/README.md. Refs: langflow-ai#9608 (cherry picked from commit 7504eb4)
…angflow-ai#12995) * fix: prevent canvas text-selection highlight on shift+drag in Tauri WebView * ensure macos fuctionality is identical to chromium * [autofix.ci] apply automated fixes --------- Co-authored-by: Olayinka Adelakun <olayinkaadelakun@mac.war.can.ibm.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
…langflow-ai#13000) * fix: normalise legacy uppercase SpanStatus/SpanType values on DB read * [autofix.ci] apply automated fixes * Update model.py * [autofix.ci] apply automated fixes * fix ruff testcases --------- Co-authored-by: Olayinka Adelakun <olayinkaadelakun@mac.war.can.ibm.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Eric Hare <ericrhare@gmail.com>
…wns (langflow-ai#13117) * fix(knowledge-base): align Filter by metadata pickers with app dropdowns The "+ Filter by metadata" popover used plain <Input> fields backed by a native HTML <datalist> for key/value suggestions. The browser-native dropdown looked nothing like the shadcn `Select` used right next to it (e.g. "All sources") — QA flagged the inconsistency. Replace each free-text input with a shadcn-style combobox built on Popover + Command (cmdk): - Outline button trigger with chevron, matching SelectTrigger. - Suggestion list rendered as CommandItem rows with a check on the current selection. - When the typed query is not in the suggestions, a "Use \"foo\"" item appears so users can still commit a custom key/value. - Closing the picker clears the search query; selecting an item commits and closes. Validation, refetch-on-open, error messaging, and submit flow are unchanged. Tests rewritten against the new combobox testids and a jsdom shim for Element.prototype.scrollIntoView (cmdk calls it). * refactor(knowledge-base): split ChunksMetadataFilter into focused modules ChunksMetadataFilter was holding data fetching, derived option lists, validation rules, popover orchestration, and the combobox UI all in one file. Split along single-responsibility lines so each piece changes for its own reason: - MetadataCombobox.tsx — presentational Popover+Command combobox with custom-entry fallback. Generic over options/testId; reusable. - hooks/useChunksMetadataFilter.ts — wraps useGetKbMetadataKeys and derives availableKeys / valueSuggestions / flags / refetch. - metadataFilterValidation.ts — pure KEY_PATTERN + validateMetadataFilter returning { ok, key, value } | { ok: false, error }. Testable in isolation; no DOM. - ChunksMetadataFilter.tsx — orchestration only: outer popover, form state, submit. Composes the three above. Adds focused unit tests for the validator (regex + happy path + empty + uppercase). Existing integration test for the filter itself is left untouched. * fix(knowledge-base): gate Next Step on metadata-pair validity Custom Fields validation only fired on blur and lived in MetadataEditor's local state, so an invalid key like "Year" still let the user advance to Review & Build. StepReview rendered the raw pairs (showing "Year: 2020" in the summary) but ``metadataPairsToFormValue`` silently filtered the invalid row out at submit — the backend never received that metadata. The UI was effectively lying. Single source of truth in metadataValidation.ts: - validateMetadataPair (per-row: empty, regex, value length) - validateMetadataPairs (cross-row: duplicates, max count) - filterValidMetadataPairs (clean trimmed set for display/submit) Wired through: - MetadataEditor derives errors from the prop list via the shared validator, dropping the blur-only local state. Errors always reflect the current input. - useKnowledgeBaseForm.getValidationErrors now checks run-level and per-file metadata. handleNext blocks while any row is invalid and surfaces a single error key under validationErrors.metadata. - StepConfiguration renders that error next to the Custom Fields block. - StepReview filters the summary through filterValidMetadataPairs so it only shows pairs the backend will actually persist. Adds focused unit tests for the new validator (per-row rules, dupes, max-count, filter behavior).
* feat: upgrade Docker images to Python 3.14 (experimental) ## Changes - Update pyproject.toml: requires-python from <3.14 to <3.15 - Update all 5 Dockerfiles to use Python 3.14: - Builder stage: python3.12-trixie-slim → python3.14-trixie-slim - Runtime stage: python:3.12-slim-trixie → python:3.14-slim-trixie ## Files Updated - src/backend/base/pyproject.toml - docker/build_and_push_base.Dockerfile - docker/build_and_push.Dockerfile - docker/build_and_push_backend.Dockerfile - docker/build_and_push_with_extras.Dockerfile - docker/build_and_push_ep.Dockerfile ## Rationale Python 3.14.5 was released on May 10, 2026. Upgrading to the latest Python version should help reduce CVE vulnerabilities in Docker images. ## Testing Strategy This is an experimental change to test Python 3.14 compatibility: - Docker images will use Python 3.14 - CI/CD workflows still test on Python 3.10-3.13 - Nightly build will validate if dependencies work with 3.14 - Can be reverted quickly if issues are found ## Next Steps - Monitor nightly build for failures - If successful, update CI/CD workflows to add Python 3.14 to test matrix - If failures occur, revert and investigate compatibility issues * chore: support Python 3.14 Bump requires-python upper bound to <3.15 across langflow, langflow-base, lfx, and langflow-sdk, and add 3.14 to CI test matrices so PRs are gated on 3.14 compatibility. Conditional pins for transitive deps without 3.14 wheels at the existing caps: - onnxruntime: >=1.26 on 3.14 (existing <1.24 cap retained for 3.10) - faiss-cpu: >=1.13.2 on 3.14 (existing ==1.9.0.post1 retained for <3.14) * chore: marker-gate IBM watsonx packages for Python 3.14 ibm-watsonx-ai 1.3.x cannot import on Python 3.14: its StrEnum subclasses override __init__ in a way that conflicts with 3.14's reworked enum __set_name__ path (TypeError on KnowledgeBaseFieldRole class creation). Cap ibm-watsonx-ai, langchain-ibm, and the ibm-watsonx-orchestrate-* extras at python_version<'3.14' until upstream adapts. Watsonx component imports are already lazy, so this surfaces only at component-access time on 3.14, where the existing ImportError handler in lfx.components.ibm.__init__ degrades it gracefully. test_model_utils.py imports ChatWatsonx at module top to verify get_model_name resolves model_id; guard that import so the test module skips on 3.14 instead of breaking collection. * [autofix.ci] apply automated fixes * chore: upgrade remaining Docker images to Python 3.14 build_and_push*.Dockerfile already moved to 3.14 in the merge from feat/upgrade-python-3.14-docker-images. Apply the same bump to the dev, devcontainer, and lfx Docker images so all in-repo Dockerfiles share one Python version. * [autofix.ci] apply automated fixes * chore: gate 3.14-broken extras to python_version<'3.14' cuga (and its transitive fastembed -> py-rust-stemmers source build), altk/agent-lifecycle-toolkit (re-pulls ibm-watsonx-ai which was already gated), langchain-pinecone, langwatch, ragstack-ai-knowledge-store, and OpenDsStar all pin themselves below 3.14 upstream. Without a marker guard, the workspace lock still tries to install them and a Docker `uv sync` then attempts source builds that require Rust (CI Docker test failure with py-rust-stemmers 0.1.5). Add python_version<'3.14' (or <'3.13' for ragstack) to each pin so those packages are simply omitted from the 3.14 install set until upstream catches up. uv pip check is now clean on 3.14.2. * test: skip test_altk_agent on Python 3.14 altk (agent-lifecycle-toolkit) is gated to python_version<'3.14' upstream and now via the langflow-base [altk] extra marker. The test imports altk at module top to exercise ALTKAgentComponent; guard the import so collection skips on 3.14 instead of failing. * test: skip remaining altk tests on Python 3.14 Three more test modules import lfx.base.agents.altk_* at module top, which transitively imports altk. Add the same module-level skip guard as test_altk_agent.py: - test_altk_agent_logic.py - test_altk_agent_tool_conversion.py - test_conversation_context_ordering.py * fix(calculator): replace removed ast.Num with ast.Constant for Python 3.14 ast.Num was deprecated in Python 3.8 in favor of ast.Constant and removed entirely in 3.14. The calculator tool and its core walker crashed on 3.14 with 'module ast has no attribute Num'. Switch the isinstance checks to ast.Constant + isinstance(node.value, (int, float)), and drop the now-dead ast.Num backwards-compat branch in calculator_core.py (the ast.Constant branch already handles every input it would have matched). Update the parser unit-test fixtures to construct ast.Constant nodes. * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * test: skip LangWatch HTTP instrumentation tests on Python 3.14 langwatch is gated to python_version<'3.14' upstream. The TestLangWatchHttpInstrumentation class patches langwatch.setup and langwatch.trace inside a fixture, which requires langwatch to be importable; on 3.14 the test errors with ModuleNotFoundError. Guard the class with a skipif on langwatch availability. * test: allow IBM and altk components to be missing on Python 3.14 test_all_modules_importable enforces that every component in __all__ imports cleanly. On 3.14 the ibm-watsonx-ai, langchain-ibm, and altk packages are gated upstream and intentionally not installed, so the WatsonxAI, WatsonxEmbeddings, and ALTKAgent components fail to import as designed. - test_all_components_in_categories_importable: accept a known-gated deny-list on 3.14 instead of failing. - test_all_lfx_component_modules_directly_importable: extend the existing 'missing optional dependency' allowlist with altk, langchain_ibm, and ibm_watsonx_ai. * fix(lfx): pass ensure_exists to user_cache_dir for Python 3.14 Python 3.14 tightened PurePath.__init__ to reject unknown keyword arguments. The KeyedWorkerLockManager constructor was passing ensure_exists=True to Path() instead of user_cache_dir(), which silently worked on 3.10-3.13 but raises TypeError on 3.14 and also meant the cache directory was never actually being created. Move the kwarg to user_cache_dir() where it belongs and update the two unit tests that asserted the buggy call shape. * [autofix.ci] apply automated fixes * test: accept either ZIP or JSON error path on Python 3.14 Python 3.14's zipfile.is_zipfile() now validates the central-directory signature in addition to EOCD, so the garbage+EOCD payload no longer passes the is_zipfile() dispatch in the /flows/upload/ route. The endpoint still returns 400 with a descriptive detail (now from the JSON branch); only the message wording differs, which the test was asserting verbatim. * fix(lfx): normalize cors_origins ['*'] back to '*' on Python 3.14 Pydantic-settings on Python 3.14 parses the env var '*' into ['*'] before the cors_origins field validator runs (the list[str] | str union resolves differently than on 3.10-3.13). Collapse that back to the bare-string wildcard so downstream consumers — including warn_about_future_cors_changes and the test suite — see the same shape on every supported Python version. --------- Co-authored-by: vijay kumar katuri <vijay.katuri@ibm.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* feat: upgrade Docker images to Python 3.14 (experimental) - Update pyproject.toml: requires-python from <3.14 to <3.15 - Update all 5 Dockerfiles to use Python 3.14: - Builder stage: python3.12-trixie-slim → python3.14-trixie-slim - Runtime stage: python:3.12-slim-trixie → python:3.14-slim-trixie - src/backend/base/pyproject.toml - docker/build_and_push_base.Dockerfile - docker/build_and_push.Dockerfile - docker/build_and_push_backend.Dockerfile - docker/build_and_push_with_extras.Dockerfile - docker/build_and_push_ep.Dockerfile Python 3.14.5 was released on May 10, 2026. Upgrading to the latest Python version should help reduce CVE vulnerabilities in Docker images. This is an experimental change to test Python 3.14 compatibility: - Docker images will use Python 3.14 - CI/CD workflows still test on Python 3.10-3.13 - Nightly build will validate if dependencies work with 3.14 - Can be reverted quickly if issues are found - Monitor nightly build for failures - If successful, update CI/CD workflows to add Python 3.14 to test matrix - If failures occur, revert and investigate compatibility issues * chore: support Python 3.14 Bump requires-python upper bound to <3.15 across langflow, langflow-base, lfx, and langflow-sdk, and add 3.14 to CI test matrices so PRs are gated on 3.14 compatibility. Conditional pins for transitive deps without 3.14 wheels at the existing caps: - onnxruntime: >=1.26 on 3.14 (existing <1.24 cap retained for 3.10) - faiss-cpu: >=1.13.2 on 3.14 (existing ==1.9.0.post1 retained for <3.14) * chore: marker-gate IBM watsonx packages for Python 3.14 ibm-watsonx-ai 1.3.x cannot import on Python 3.14: its StrEnum subclasses override __init__ in a way that conflicts with 3.14's reworked enum __set_name__ path (TypeError on KnowledgeBaseFieldRole class creation). Cap ibm-watsonx-ai, langchain-ibm, and the ibm-watsonx-orchestrate-* extras at python_version<'3.14' until upstream adapts. Watsonx component imports are already lazy, so this surfaces only at component-access time on 3.14, where the existing ImportError handler in lfx.components.ibm.__init__ degrades it gracefully. test_model_utils.py imports ChatWatsonx at module top to verify get_model_name resolves model_id; guard that import so the test module skips on 3.14 instead of breaking collection. * [autofix.ci] apply automated fixes * chore: upgrade remaining Docker images to Python 3.14 build_and_push*.Dockerfile already moved to 3.14 in the merge from feat/upgrade-python-3.14-docker-images. Apply the same bump to the dev, devcontainer, and lfx Docker images so all in-repo Dockerfiles share one Python version. * [autofix.ci] apply automated fixes * chore: gate 3.14-broken extras to python_version<'3.14' cuga (and its transitive fastembed -> py-rust-stemmers source build), altk/agent-lifecycle-toolkit (re-pulls ibm-watsonx-ai which was already gated), langchain-pinecone, langwatch, ragstack-ai-knowledge-store, and OpenDsStar all pin themselves below 3.14 upstream. Without a marker guard, the workspace lock still tries to install them and a Docker `uv sync` then attempts source builds that require Rust (CI Docker test failure with py-rust-stemmers 0.1.5). Add python_version<'3.14' (or <'3.13' for ragstack) to each pin so those packages are simply omitted from the 3.14 install set until upstream catches up. uv pip check is now clean on 3.14.2. * test: skip test_altk_agent on Python 3.14 altk (agent-lifecycle-toolkit) is gated to python_version<'3.14' upstream and now via the langflow-base [altk] extra marker. The test imports altk at module top to exercise ALTKAgentComponent; guard the import so collection skips on 3.14 instead of failing. * test: skip remaining altk tests on Python 3.14 Three more test modules import lfx.base.agents.altk_* at module top, which transitively imports altk. Add the same module-level skip guard as test_altk_agent.py: - test_altk_agent_logic.py - test_altk_agent_tool_conversion.py - test_conversation_context_ordering.py * fix(calculator): replace removed ast.Num with ast.Constant for Python 3.14 ast.Num was deprecated in Python 3.8 in favor of ast.Constant and removed entirely in 3.14. The calculator tool and its core walker crashed on 3.14 with 'module ast has no attribute Num'. Switch the isinstance checks to ast.Constant + isinstance(node.value, (int, float)), and drop the now-dead ast.Num backwards-compat branch in calculator_core.py (the ast.Constant branch already handles every input it would have matched). Update the parser unit-test fixtures to construct ast.Constant nodes. * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * test: skip LangWatch HTTP instrumentation tests on Python 3.14 langwatch is gated to python_version<'3.14' upstream. The TestLangWatchHttpInstrumentation class patches langwatch.setup and langwatch.trace inside a fixture, which requires langwatch to be importable; on 3.14 the test errors with ModuleNotFoundError. Guard the class with a skipif on langwatch availability. * test: allow IBM and altk components to be missing on Python 3.14 test_all_modules_importable enforces that every component in __all__ imports cleanly. On 3.14 the ibm-watsonx-ai, langchain-ibm, and altk packages are gated upstream and intentionally not installed, so the WatsonxAI, WatsonxEmbeddings, and ALTKAgent components fail to import as designed. - test_all_components_in_categories_importable: accept a known-gated deny-list on 3.14 instead of failing. - test_all_lfx_component_modules_directly_importable: extend the existing 'missing optional dependency' allowlist with altk, langchain_ibm, and ibm_watsonx_ai. * fix(lfx): pass ensure_exists to user_cache_dir for Python 3.14 Python 3.14 tightened PurePath.__init__ to reject unknown keyword arguments. The KeyedWorkerLockManager constructor was passing ensure_exists=True to Path() instead of user_cache_dir(), which silently worked on 3.10-3.13 but raises TypeError on 3.14 and also meant the cache directory was never actually being created. Move the kwarg to user_cache_dir() where it belongs and update the two unit tests that asserted the buggy call shape. * [autofix.ci] apply automated fixes * test: accept either ZIP or JSON error path on Python 3.14 Python 3.14's zipfile.is_zipfile() now validates the central-directory signature in addition to EOCD, so the garbage+EOCD payload no longer passes the is_zipfile() dispatch in the /flows/upload/ route. The endpoint still returns 400 with a descriptive detail (now from the JSON branch); only the message wording differs, which the test was asserting verbatim. * fix(lfx): normalize cors_origins ['*'] back to '*' on Python 3.14 Pydantic-settings on Python 3.14 parses the env var '*' into ['*'] before the cors_origins field validator runs (the list[str] | str union resolves differently than on 3.10-3.13). Collapse that back to the bare-string wildcard so downstream consumers — including warn_about_future_cors_changes and the test suite — see the same shape on every supported Python version. --------- Co-authored-by: vijay kumar katuri <vijay.katuri@ibm.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> (cherry picked from commit 1955f8f)
* docs-configure-mcp-tool-timeouts * Apply suggestions from code review Co-authored-by: April I. Murphy <36110273+aimurphy@users.noreply.github.com> * docs-peer-review --------- Co-authored-by: April I. Murphy <36110273+aimurphy@users.noreply.github.com>
…ow-ai#13112) Fix: preprocessing related fields removed form PATCH endpoint as they are immutable.
Adds optional session_id support to flows exposed via the MCP interface so MCP clients (Claude Desktop, Cursor, etc.) can persist conversation history across tool calls. - json_schema_from_flow now advertises session_id as an optional string property on every generated tool schema, unless the flow already defines its own session_id input. - handle_call_tool reads session_id from the incoming arguments and forwards it to simple_run_flow. When absent or blank, it falls back to a generated UUID, preserving the prior per-call behavior. Reported by Alejandro: MCP clients had no way to maintain chat history because the server unconditionally generated a fresh conversation id per call.
…w-ai#12888) * Add UTM tracking to outbound watsonx Orchestrate links Introduces a decorateWxoUrl utility that appends utm_source, utm_medium, utm_campaign, and a per-link utm_content to IBM-hosted URLs using the URL API. The utm_source is configurable via LANGFLOW_WXO_UTM_SOURCE with a "langflow" default. Applied to the Sign-up and Find-your-credentials links in step-provider and add-provider-modal. * update tsts * update tsts
chore: upgrade langchain-classic to 1.0.7 - Update version constraint from ~=1.0.0 to ~=1.0.7 - Fixes issues present in version 1.0.4 - Update uv.lock with new dependency resolution Co-authored-by: Janardan S Kavia <janardanskavia@Janardans-MacBook-Pro.local>
- langflow-base: 0.10.0 -> 0.9.3 - lfx: 0.5.0 -> 0.4.3 (and dependency reference) - sdk: 0.2.0 -> 0.1.3
- Update gunicorn constraint from <26.0.0 to <27.0.0 - Resolves dependency check failure with gunicorn 26.0.0 - Regenerate uv.lock with updated constraint
# Conflicts: # .secrets.baseline # docs/package.json # pyproject.toml # src/backend/base/langflow/initial_setup/starter_projects/Vector Store RAG.json # src/backend/base/pyproject.toml # src/backend/tests/unit/components/files_and_knowledge/test_retrieval.py # src/frontend/package-lock.json # src/frontend/package.json # src/frontend/src/components/core/parameterRenderComponent/components/modelInputComponent/__tests__/ModelInputComponent.test.tsx # src/frontend/src/components/core/parameterRenderComponent/components/modelInputComponent/index.tsx # src/frontend/src/modals/modelProviderModal/hooks/useProviderConfiguration.ts # src/lfx/pyproject.toml # src/lfx/src/lfx/_assets/component_index.json # src/sdk/pyproject.toml # uv.lock
…gflow-ai#12966) * fix(frontend): stop empty-state splash from flashing after login Two bugs caused EmptyPageCommunity and EmptyFolder to render for one frame between login success and the flows query resolving. 1. flowsManagerStore.resetStore() set flows: [] on logout. After logout/login the truthy gate in main-page.tsx (flows && examples && folders) passed immediately with stale empty values, and shouldShowMainContent returned false, so EmptyPageCommunity rendered until the new flows query resolved. Reset to undefined instead so the gate correctly waits for the next fetch. 2. homePage initialized isEmptyFolder = true and only flipped it inside a useEffect, so the first render of HomePage always rendered EmptyFolder regardless of state. Use null as the resolving sentinel, skip the effect until both the global flows store and the folder query are populated, and render the existing list skeleton while resolving. Verified with a MutationObserver in the post-login transition: prior to this change three empty-state components were inserted into the DOM in the same paint window; after the change none are. * fix(frontend): resolve isEmptyFolder when folder query errors The post-login flash guard waited for folderData to be defined, but folderData stays undefined when the folder query errors out (e.g. when myCollectionId is undefined after the user deletes all folders). isEmptyFolder then stuck at null and the page rendered ListSkeleton forever instead of EmptyFolder. Gate on isLoading from useGetFolderQuery instead. isLoading is true only on the first fetch with no data and flips to false on success or error, so the effect still waits past the post-login stale-store window but resolves correctly when the query settles either way.
…3125) * add biome checker for hardcoded pallete * add biome checker on ci * [autofix.ci] apply automated fixes * lint-js fix * improve CI job * biome fixes * unblock CI on biome job --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
…w-ai#13090) remove search Icon Co-authored-by: Olayinka Adelakun <olayinkaadelakun@Olayinkas-MacBook-Pro.local>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Created Valkey component for vector storage and chat message storage