### What problem does this PR solve?
Fixes#17074. When a keyword-extraction LLM returns a malformed,
extremely long response, the resulting `important_kwd` term can exceed
Elasticsearch's keyword term-byte limit (32766 bytes). The chunk insert
then fails with `document_parsing_exception`.
### Type of change
- [x] Bug Fix (non-breaking change which fixes an issue)
Signed-off-by: Rahil <viperboom0786110@gmail.com>
Co-authored-by: Jin Hai <haijin.chn@gmail.com>
### Summary
- keep literal whitespace outside streamed message references
- retain single, double, and spaced outer-brace reference forms
- apply the same boundary rule to iteration aliases
- add regression coverage for adjacent and consecutive references
Fixes#18665
---------
Co-authored-by: Jin Hai <haijin.chn@gmail.com>
## Summary
`regexp.MustCompile` / `regexp.MatchString` have **no cache** in Go —
every call performs a full parse+compile of the pattern. The fulltext
query builder compiled the same 17 patterns from scratch on **every**
invocation of the retrieval hot path (tokenize → query build), paying a
fresh regexp parse+compile per token/term.
This hoists all patterns into package-level `var`s compiled **once at
package init**, and references them from every call site. **Zero logic
change** — every pattern string is byte-identical to before.
Co-authored-by: changshenhan <217217832+changshenhan@users.noreply.github.com>
Fixes#18621
Legacy .doc files are OLE/CFB compound documents; python-docx only
parses OOXML .docx ZIP packages. The Manual parser's suffix regex
`\.docx?$` (introduced in PR #4325) matches both extensions, so .doc
uploads were routed to `Docx()` and crashed with raw `BadZipFile` / OPC
relationship errors instead of a clear message.
Preserve completed component progress when an ingestion task resumes from a checkpoint. Checkpointed operators are skipped and do not emit lifecycle events again, which previously caused the document progress to
remain below 100%.
### Summary
Fix OpenSearch retrieval returning `vector_similarity = 0.000` for every
chunk when hybrid search is enabled.
On the OpenSearch backend, retrieval uses a second KNN-only search
(`Dealer._knn_scores()`) to recover per-chunk cosine scores for
reranking. That pass intentionally sends `MatchDenseExpr(...,
{"similarity": 0.0})` to mean “no minimum similarity cutoff.”
However, `OSConnection.search()` was incorrectly mapping `similarity` to
the KNN clause `boost` field:
```python
knn_query[vector_column_name]["boost"] = similarity
```
With `similarity=0.0`, this produced `boost=0.0`, which zeroed out KNN
`_score` values. `get_scores()` then returned `0.0` for every hit, so
`vector_similarity` was always zero and hybrid ranking ignored the
vector component — with no exception raised.
This is separate from the `get_scores()` `AttributeError` crash
addressed in #14970 / #15390; here retrieval succeeds but vector scores
are silently lost.
configurations.md and backup_and_migration.md cross-linked each other
via /migration#... and /configurations#s3-tigris. These host-absolute
paths match no route on the docs site (real pages live under
/administrator/...) and 404 on GitHub. Point them at the sibling
markdown files so both Docusaurus and GitHub can resolve them; the
existing anchors are preserved.
---------
Co-authored-by: jindou <jindou@local>
Co-authored-by: Jin Hai <haijin.chn@gmail.com>
### Summary
Two small fixes found during a code-review pass.
**1. `Invoke._build_proxies` sends the raw proxy string instead of the
normalized one**
**2. Leftover `print(self.variables)` in `Canvas.reset`**
---------
Co-authored-by: jindou <jindou@local>
### Summary
The Keenable tool icon added in #18341 was a placeholder I drew: a
generic blue rounded square with a magnifying glass, not the Keenable
brandmark. Swapped for the mark from our brand guidelines.
Same shape as the neighbouring tool logos: one `<svg>` with a `viewBox`
and no fixed width/height, so it is sized by the CSS around it, and
transparent, so it reads on the light and the dark theme alike.
Frontend-only, one file.
Ports the smart-reasoning (agentic RAG) conversation mode to the eino ADK, with Go retrieval tools (grep_chunks, search_chunks, list_chunks), deep-read XML output, and frontend agent-mode wiring.
### Summary
`show_env.sh` exists to produce a clean environment report to paste into
an issue. Run outside a work tree it printed a raw git error into the
middle of it.
### Summary
The CLI benchmark treated every HTTP 200 response as successful, even
when the RAGFlow response envelope reported a non-zero application code.
This caused failed API calls to inflate the benchmark success count.
- classify benchmark responses using both HTTP status and the response
envelope code
- preserve successful plain-text HTTP 200 endpoints such as ping
- cover HTTP 200 application failures with an in-process HTTP regression
test
## Summary
- Broaden `update_metadata_to` to keep `bool` / `int` / `float` / `None`
and structured values (e.g. PDF `outline` list[dict]) while retaining
string / list[str] merge+dedupe for LLM metadata.
- Fixes document system fields (`_isCurrent`, `_version`,
`_processStatus`) being dropped when parse persists PDF outline via full
`meta_fields` replace.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>