diff --git a/.agents/skills/e2e-testing/SKILL.md b/.agents/skills/e2e-testing/SKILL.md index 273508f3b51c..6ad0e6ecac23 100644 --- a/.agents/skills/e2e-testing/SKILL.md +++ b/.agents/skills/e2e-testing/SKILL.md @@ -21,7 +21,7 @@ description: Write and review Playwright E2E tests for Langflow. Trigger when th | Tool | Version | Purpose | |------|---------|---------| -| Playwright | 1.57.0 | E2E test runner + browser automation | +| Playwright | 1.59.1 | E2E test runner + browser automation | | Chromium | (bundled) | Default browser (Firefox/Safari disabled) | | Custom fixtures | `tests/fixtures.ts` | Auto-detects API errors and flow execution failures | diff --git a/.github/workflows/docker-build-v2.yml b/.github/workflows/docker-build-v2.yml index 88dfa76055b5..86f74f4a7ab9 100644 --- a/.github/workflows/docker-build-v2.yml +++ b/.github/workflows/docker-build-v2.yml @@ -137,7 +137,8 @@ jobs: echo "Latest main release version: $last_released_version" fi - if [ "$version" = "$last_released_version" ]; then + # Skip check only applies to main image, not backend/frontend which are separate images + if [ "$version" = "$last_released_version" ] && [[ "${{ inputs.release_type }}" != "main-backend" ]] && [[ "${{ inputs.release_type }}" != "main-frontend" ]]; then echo "Main docker version $version is already released. Skipping release." echo skipped=true >> $GITHUB_OUTPUT exit 0 diff --git a/.github/workflows/mend.yml b/.github/workflows/mend.yml new file mode 100644 index 000000000000..dc173a0c4794 --- /dev/null +++ b/.github/workflows/mend.yml @@ -0,0 +1,56 @@ +name: "Mend" + +on: + push: + branches: ["release-*", "main"] + pull_request: + branches: ["release-*", "main"] + +concurrency: + group: mend-${{ github.ref }} + cancel-in-progress: true + +env: + NODE_VERSION: "22" + +jobs: + mend-scan: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout Repository + uses: actions/checkout@v6 + + - name: Setup Node.js Environment + uses: actions/setup-node@v6 + with: + node-version: ${{ env.NODE_VERSION }} + cache: "npm" + cache-dependency-path: ./src/frontend/package-lock.json + + - name: Install Frontend Dependencies + working-directory: ./src/frontend + run: npm ci + + - name: Set up Java (Semeru) + uses: actions/setup-java@v5 + with: + distribution: "semeru" + java-version: "21" + + - name: Download Mend Unified Agent + run: | + curl --fail --show-error --retry 3 --location -o wss-unified-agent.jar https://unified-agent.s3.amazonaws.com/wss-unified-agent.jar + + - name: Run Mend Scan + #prevent forks from running mend scans + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository + env: + WS_APIKEY: ${{ secrets.WS_APIKEY }} + WS_WSS_URL: ${{ secrets.WS_WSS_URL }} + WS_USERKEY: ${{ secrets.WS_USERKEY }} + WS_PRODUCTNAME: ${{ secrets.WS_PRODUCTNAME }} + WS_PROJECTNAME: ${{ secrets.WS_PROJECTNAME }} + run: | + java -jar wss-unified-agent.jar -d src -logLevel info diff --git a/.github/workflows/python_test.yml b/.github/workflows/python_test.yml index 689b2a79d451..ba5d4a76cc5c 100644 --- a/.github/workflows/python_test.yml +++ b/.github/workflows/python_test.yml @@ -93,7 +93,7 @@ jobs: - name: Run unit tests uses: nick-fields/retry@v3 with: - timeout_minutes: 15 + timeout_minutes: 20 max_attempts: 2 command: make unit_tests args="-x -vv --splits ${{ matrix.splitCount }} --group ${{ matrix.group }} --reruns 5 --cov --cov-config=src/backend/.coveragerc --cov-report=xml --cov-report=html" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cb18e8c7f7b9..2c52f0b9dfcb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,6 +53,11 @@ on: required: false type: boolean default: true + run_pip_check: + description: "Whether to run pip check - ONLY SET TO FALSE ONCE YOU HAVE ALREADY ATTEMPTED AND FAILED A RUN THEN MADE SURE DEPS DO NOT CAUSE FAILURES" + required: false + type: boolean + default: true jobs: echo-inputs: @@ -98,6 +103,46 @@ jobs: echo "Validated: '${{ inputs.release_tag }}' is a valid tag." + validate-tag-format: + name: Validate Tag Format and Check for Duplicates + runs-on: ubuntu-latest + needs: [validate-tag] + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Validate Tag Has v Prefix + run: | + TAG="${{ inputs.release_tag }}" + if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "❌ Error: Tag must start with 'v' and follow semver format (v1.2.3)" + echo " Got: $TAG" + echo "" + echo "This is required to ensure GitHub's generateReleaseNotes uses the correct base comparison." + exit 1 + fi + echo "✅ Tag format is valid: $TAG" + + - name: Check for Duplicate Tag Without v Prefix + run: | + TAG="${{ inputs.release_tag }}" + TAG_WITHOUT_V="${TAG#v}" + + if git rev-parse "$TAG_WITHOUT_V" >/dev/null 2>&1; then + echo "❌ Error: Duplicate tag without 'v' prefix exists: $TAG_WITHOUT_V" + echo " This will cause release notes to use the wrong base comparison." + echo "" + echo " The tag '$TAG_WITHOUT_V' points to commit: $(git rev-parse --short $TAG_WITHOUT_V)" + echo " The tag '$TAG' points to commit: $(git rev-parse --short $TAG)" + echo "" + echo " To fix this, delete the duplicate tag:" + echo " git push origin :refs/tags/$TAG_WITHOUT_V" + exit 1 + fi + echo "✅ No duplicate tag found" + validate-dependencies: name: Validate Release Dependencies runs-on: ubuntu-latest @@ -560,6 +605,7 @@ jobs: fi uv pip install $FIND_LINKS --prerelease=allow -e src/backend/base - name: Check for dependency incompatibility + if: ${{ inputs.run_pip_check }} run: uv pip check - name: Set version for pre-release if: ${{ inputs.pre_release }} @@ -707,6 +753,7 @@ jobs: fi uv pip install $FIND_LINKS --prerelease=allow -e . - name: Check for dependency incompatibility + if: ${{ inputs.run_pip_check }} run: uv pip check - name: Set version for pre-release if: ${{ inputs.pre_release }} @@ -1000,14 +1047,16 @@ jobs: create_release: name: Create Release runs-on: ubuntu-latest - needs: [determine-main-version, build-main, publish-main] + needs: + [determine-main-version, build-main, publish-main, validate-tag-format] if: | always() && !cancelled() && !inputs.dry_run && inputs.create_release && needs.build-main.result == 'success' && - needs.publish-main.result == 'success' + needs.publish-main.result == 'success' && + needs.validate-tag-format.result == 'success' steps: - uses: actions/download-artifact@v4 with: diff --git a/.github/workflows/typescript_test.yml b/.github/workflows/typescript_test.yml index 2e03993b31f8..cfb87a36c8e5 100644 --- a/.github/workflows/typescript_test.yml +++ b/.github/workflows/typescript_test.yml @@ -70,7 +70,7 @@ env: # Define the directory where Playwright browsers will be installed. # This path is used for caching across workflows PLAYWRIGHT_BROWSERS_PATH: "ms-playwright" - PLAYWRIGHT_VERSION: "1.57.0" + PLAYWRIGHT_VERSION: "1.59.1" LANGFLOW_FEATURE_WXO_DEPLOYMENTS: "true" jobs: diff --git a/.gitignore b/.gitignore index f397b68dba72..67957bc0f9bf 100644 --- a/.gitignore +++ b/.gitignore @@ -292,4 +292,11 @@ sso-config.yaml AGENTS.md CLAUDE.local.md langflow.log.* -tmp_toolguard/ \ No newline at end of file +tmp_toolguard/ + +#whitesource +whitesource/ + + +#AI +.kiro diff --git a/.secrets.baseline b/.secrets.baseline index 2bb238610e75..f3cd7510d208 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -197,7 +197,7 @@ "filename": ".github/workflows/release.yml", "hashed_secret": "3e26d6750975d678acb8fa35a0f69237881576b0", "is_verified": false, - "line_number": 346, + "line_number": 391, "is_secret": false } ], @@ -1726,38 +1726,6 @@ "hashed_secret": "d6e6d7b4b115cd3b9d172623199f8c403055fecc", "is_verified": false, "line_number": 659 - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json", - "hashed_secret": "665b1e3851eefefa3fb878654292f16597d25155", - "is_verified": false, - "line_number": 1506, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json", - "hashed_secret": "3f2df46921dd8e2c36e2ce85238705ac0774c74a", - "is_verified": false, - "line_number": 1641, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json", - "hashed_secret": "d3d6fe3f7d33d0f4aa28c49544a865982a48a00a", - "is_verified": false, - "line_number": 1701, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json", - "hashed_secret": "d4c3d66fd0c38547a3c7a4c6bdc29c36911bc030", - "is_verified": false, - "line_number": 1766, - "is_secret": false } ], "src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting.json": [ @@ -1970,28 +1938,12 @@ "is_verified": false, "line_number": 1170 }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Hybrid Search RAG.json", - "hashed_secret": "665b1e3851eefefa3fb878654292f16597d25155", - "is_verified": false, - "line_number": 1317, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Hybrid Search RAG.json", - "hashed_secret": "d3d6fe3f7d33d0f4aa28c49544a865982a48a00a", - "is_verified": false, - "line_number": 1452, - "is_secret": false - }, { "type": "Hex High Entropy String", "filename": "src/backend/base/langflow/initial_setup/starter_projects/Hybrid Search RAG.json", "hashed_secret": "d2d44958e9ddf0f3c8f9019ce3f56548e801c023", "is_verified": false, - "line_number": 1749 + "line_number": 1515 } ], "src/backend/base/langflow/initial_setup/starter_projects/Image Sentiment Analysis.json": [ @@ -2275,44 +2227,12 @@ "line_number": 1612, "is_secret": false }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json", - "hashed_secret": "665b1e3851eefefa3fb878654292f16597d25155", - "is_verified": false, - "line_number": 1803, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json", - "hashed_secret": "3f2df46921dd8e2c36e2ce85238705ac0774c74a", - "is_verified": false, - "line_number": 1938, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json", - "hashed_secret": "d3d6fe3f7d33d0f4aa28c49544a865982a48a00a", - "is_verified": false, - "line_number": 1998, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json", - "hashed_secret": "d4c3d66fd0c38547a3c7a4c6bdc29c36911bc030", - "is_verified": false, - "line_number": 2063, - "is_secret": false - }, { "type": "Hex High Entropy String", "filename": "src/backend/base/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json", "hashed_secret": "13f728be4fd927580a98667bcd624f511f459de0", "is_verified": false, - "line_number": 2333 + "line_number": 2017 } ], "src/backend/base/langflow/initial_setup/starter_projects/Price Deal Finder.json": [ @@ -2465,38 +2385,6 @@ "hashed_secret": "d6e6d7b4b115cd3b9d172623199f8c403055fecc", "is_verified": false, "line_number": 650 - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json", - "hashed_secret": "665b1e3851eefefa3fb878654292f16597d25155", - "is_verified": false, - "line_number": 1278, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json", - "hashed_secret": "3f2df46921dd8e2c36e2ce85238705ac0774c74a", - "is_verified": false, - "line_number": 1410, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json", - "hashed_secret": "d3d6fe3f7d33d0f4aa28c49544a865982a48a00a", - "is_verified": false, - "line_number": 1470, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json", - "hashed_secret": "d4c3d66fd0c38547a3c7a4c6bdc29c36911bc030", - "is_verified": false, - "line_number": 1535, - "is_secret": false } ], "src/backend/base/langflow/initial_setup/starter_projects/Social Media Agent.json": [ @@ -2539,38 +2427,6 @@ "is_verified": false, "line_number": 1480, "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json", - "hashed_secret": "665b1e3851eefefa3fb878654292f16597d25155", - "is_verified": false, - "line_number": 1671, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json", - "hashed_secret": "3f2df46921dd8e2c36e2ce85238705ac0774c74a", - "is_verified": false, - "line_number": 1806, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json", - "hashed_secret": "d3d6fe3f7d33d0f4aa28c49544a865982a48a00a", - "is_verified": false, - "line_number": 1866, - "is_secret": false - }, - { - "type": "Secret Keyword", - "filename": "src/backend/base/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json", - "hashed_secret": "d4c3d66fd0c38547a3c7a4c6bdc29c36911bc030", - "is_verified": false, - "line_number": 1931, - "is_secret": false } ], "src/backend/base/langflow/initial_setup/starter_projects/Travel Planning Agents.json": [ @@ -3012,7 +2868,7 @@ "filename": "src/backend/tests/unit/api/v1/test_projects.py", "hashed_secret": "8bb6118f8fd6935ad0876a3be34a717d32708ffd", "is_verified": false, - "line_number": 1819 + "line_number": 1829 } ], "src/backend/tests/unit/api/v1/test_transactions.py": [ @@ -8389,5 +8245,5 @@ } ] }, - "generated_at": "2026-04-14T19:39:07Z" + "generated_at": "2026-04-23T21:12:19Z" } diff --git a/.whitesource b/.whitesource new file mode 100644 index 000000000000..46b91270d46e --- /dev/null +++ b/.whitesource @@ -0,0 +1,12 @@ +{ + "settingsInheritedFrom": "whitesource-config/whitesource-config@master", + "scanSettings": { + "dependencyScopes": [ + "prod" + ], + "baseBranches": [ + "main", + "release-*" + ] + } +} diff --git a/docker/build_and_push.Dockerfile b/docker/build_and_push.Dockerfile index 90c8659a793f..d64d6f984e5b 100644 --- a/docker/build_and_push.Dockerfile +++ b/docker/build_and_push.Dockerfile @@ -99,8 +99,6 @@ RUN useradd user -u 1000 -g 0 --no-create-home --home-dir /app/data COPY --from=builder --chown=1000 /app/.venv /app/.venv ENV PATH="/app/.venv/bin:$PATH" -RUN /app/.venv/bin/pip install --upgrade playwright \ - && /app/.venv/bin/playwright install LABEL org.opencontainers.image.title=langflow LABEL org.opencontainers.image.authors=['Langflow'] diff --git a/docker/build_and_push_backend.Dockerfile b/docker/build_and_push_backend.Dockerfile index acdc8dc845cf..f9e1dc96904a 100644 --- a/docker/build_and_push_backend.Dockerfile +++ b/docker/build_and_push_backend.Dockerfile @@ -37,6 +37,7 @@ RUN uv venv /app/.venv ENV PATH="/app/.venv/bin:$PATH" ENV VIRTUAL_ENV="/app/.venv" +# Install langflow-base with all extras except dev (which includes Playwright) RUN --mount=type=cache,target=/root/.cache/uv \ uv pip install ./src/sdk ./src/lfx "./src/backend/base[complete,postgresql]" diff --git a/docker/build_and_push_base.Dockerfile b/docker/build_and_push_base.Dockerfile index 83f3f8588f6b..3fa479929fb7 100644 --- a/docker/build_and_push_base.Dockerfile +++ b/docker/build_and_push_base.Dockerfile @@ -101,8 +101,6 @@ RUN useradd user -u 1000 -g 0 --no-create-home --home-dir /app/data COPY --from=builder --chown=1000 /app/.venv /app/.venv ENV PATH="/app/.venv/bin:$PATH" -RUN /app/.venv/bin/pip install --upgrade playwright \ - && /app/.venv/bin/playwright install LABEL org.opencontainers.image.title=langflow LABEL org.opencontainers.image.authors=['Langflow'] diff --git a/docker/build_and_push_ep.Dockerfile b/docker/build_and_push_ep.Dockerfile index 8e7a35ef79a0..fef744f730c5 100644 --- a/docker/build_and_push_ep.Dockerfile +++ b/docker/build_and_push_ep.Dockerfile @@ -95,8 +95,6 @@ RUN useradd user -u 1000 -g 0 --no-create-home --home-dir /app/data COPY --from=builder --chown=1000 /app/.venv /app/.venv ENV PATH="/app/.venv/bin:$PATH" -RUN /app/.venv/bin/pip install --upgrade playwright \ - && /app/.venv/bin/playwright install LABEL org.opencontainers.image.title=langflow LABEL org.opencontainers.image.authors=['Langflow'] diff --git a/docker/build_and_push_with_extras.Dockerfile b/docker/build_and_push_with_extras.Dockerfile index 21fcee99fc18..b022017d9c48 100644 --- a/docker/build_and_push_with_extras.Dockerfile +++ b/docker/build_and_push_with_extras.Dockerfile @@ -96,8 +96,6 @@ RUN useradd user -u 1000 -g 0 --no-create-home --home-dir /app/data COPY --from=builder --chown=1000 /app/.venv /app/.venv ENV PATH="/app/.venv/bin:$PATH" -RUN /app/.venv/bin/pip install --upgrade playwright \ - && /app/.venv/bin/playwright install LABEL org.opencontainers.image.title=langflow LABEL org.opencontainers.image.authors=['Langflow'] diff --git a/docs/docs/API-Reference/curl-examples/api-reference-api-examples/result-get-configuration.json b/docs/docs/API-Reference/curl-examples/api-reference-api-examples/result-get-configuration.json index 135e5c3f2c00..879c8e4ba4c0 100644 --- a/docs/docs/API-Reference/curl-examples/api-reference-api-examples/result-get-configuration.json +++ b/docs/docs/API-Reference/curl-examples/api-reference-api-examples/result-get-configuration.json @@ -13,7 +13,7 @@ "public_flow_cleanup_interval": 3600, "public_flow_expiration": 86400, "event_delivery": "streaming", - "webhook_auth_enable": false, + "webhook_auth_enable": true, "voice_mode_available": false, "default_folder_name": "Starter Project", "hide_getting_started_progress": false diff --git a/docs/docs/Components/bundles-elastic.mdx b/docs/docs/Components/bundles-elastic.mdx index f3d9f0984bbf..020ec926eca1 100644 --- a/docs/docs/Components/bundles-elastic.mdx +++ b/docs/docs/Components/bundles-elastic.mdx @@ -104,3 +104,62 @@ This output can only connect to a `VectorStore` input port, and it was intended The **OpenSearch** component doesn't require a separate Graph RAG component because OpenSearch instances support Graph traversal through built-in RAG functionality and plugins. + +## OpenSearch (Multi-Model Multi-Embedding) + +The **OpenSearch (Multi-Model Multi-Embedding)** component reads and writes to OpenSearch. +It is different from the OpenSearch component because it supports multiple embedding models within the same index. +It creates dynamic embedding fields per model, detects which models are available in the index, and combines semantic and keyword search for hybrid retrieval. + +
+About vector store instances + + + +
+ +### OpenSearch (Multi-Model Multi-Embedding) parameters + +You can inspect a vector store component's parameters to learn more about the inputs it accepts, the features it supports, and how to configure it. + + + + + +For information about accepted values and functionality, see the [OpenSearch documentation](https://opensearch.org/platform/search/vector-database.html) or inspect [component code](/concepts-components#component-code). + +| Name | Type | Description | +|------|------|-------------| +| docs_metadata | Table | Input parameter. Additional metadata key-value pairs to attach to every ingested document. | +| opensearch_url | String | Input parameter. URL for the OpenSearch cluster. Default: `http://localhost:9200`. | +| index_name | String | Input parameter. Name of the index to create or query. Default: `langflow`. | +| engine | String | Input parameter. Vector engine to use. Options are `nmslib`, `faiss`, `lucene`, or `jvector` (default). | +| space_type | String | Input parameter. Distance metric for vector similarity. Options are `l2` (default), `l1`, `cosinesimil`, `linf`, or `innerproduct`. | +| ef_construction | Integer | Input parameter. HNSW index-construction candidate list size. Default: `512`. | +| m | Integer | Input parameter. HNSW graph connection count. Default: `16`. | +| num_candidates | Integer | Input parameter. Approximate-nearest-neighbor candidate pool size for KNN search. Set to `0` to disable it. Default: `1000`. | +| ingest_data | JSON | Input parameter. Data to ingest into the vector store. | +| search_query | String | Input parameter. Query string used by `search_documents`. Leave empty to ingest without searching. | +| should_cache_vector_store | Boolean | Input parameter. If `true`, the component caches the vector store for the current build. Default: Enabled (`true`). | +| embedding | Embeddings | Input parameter. One or more embedding components used for ingestion and search. | +| embedding_model_name | String | Input parameter. Selects which embedding model to use for ingestion. If omitted, the component uses the first available embedding. | +| vector_field | String | Input parameter. Legacy vector field name used for backward compatibility. Default: `chunk_embedding`. | +| number_of_results | Integer | Input parameter. Default maximum number of search results to return. Default: `10`. | +| filter_expression | String | Input parameter. JSON filter, limit, and score-threshold configuration for search and raw search. | +| auth_mode | String | Input parameter. Authentication mode. Options are `basic` or `jwt`. Default: `jwt`. | +| username | String | Input parameter. Username for basic authentication. Default: `admin`. | +| password | SecretString | Input parameter. Password for basic authentication. Default: `admin`. | +| jwt_token | SecretString | Input parameter. JWT token for token-based authentication. | +| jwt_header | String | Input parameter. Header name used for JWT authentication. Default: `Authorization`. | +| bearer_prefix | Boolean | Input parameter. If enabled, prefixes the JWT token with `Bearer `. Default: Disabled (`false`). | +| use_ssl | Boolean | Input parameter. Whether to use SSL/TLS for the connection. Default: Enabled (`true`). | +| verify_certs | Boolean | Input parameter. Whether to verify SSL certificates. Default: Disabled (`false`). | +| request_timeout | String | Input parameter. Timeout in seconds for OpenSearch requests. Default: `60`. | +| max_retries | String | Input parameter. Number of retries for failed requests. Default: `3`. | + +### OpenSearch (Multi-Model Multi-Embedding) output + +The component exposes: + +- `search_results`: Returns hybrid search results as a table of documents and metadata. +- `raw_search`: Executes a raw OpenSearch query or a text query and returns the raw response. diff --git a/docs/docs/Components/bundles-ollama.mdx b/docs/docs/Components/bundles-ollama.mdx index 9388b44838f2..b0c9a8a2b3c5 100644 --- a/docs/docs/Components/bundles-ollama.mdx +++ b/docs/docs/Components/bundles-ollama.mdx @@ -28,6 +28,10 @@ To use the **Ollama** component in a flow, connect Langflow to your locally runn To refresh the server's list of models, click