### Summary
This PR sanitizes the parsed tree instead of the string:
`rehype-sanitize` runs after `rehype-raw` and before `rehype-katex`,
with one shared schema.
### Summary
The fix is one line per helper — assign the `order_by(...)` result back
so the
ordering is actually applied to the query.
Co-authored-by: rsnetworkinginc <rsnetworkinginc@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
### Summary
Complete the Go Agent OpenAI-compatible response path for `POST
/api/v1/agents/chat/completions` when `openai-compatible` is true. This
endpoint is already documented and routed, but the Go implementation
returned a placeholder response instead of executing the Agent.
### Summary
The fix turns a negative timeout into a finite 60 second wait inside
`MysqlDatabaseLock`, which both servers accept. Callers keep expressing
"block until available", and the equivalent PostgreSQL and GaussDB work
on the same `-1` semantics (#16346, #18506) is untouched. Non-negative
timeouts keep their current behaviour.
---------
Co-authored-by: Krim <git@krim.dev>
### Summary
OIDC discovery builds its URL as
`f"{issuer}/.well-known/openid-configuration"`. Providers whose issuer
carries a trailing slash therefore get asked for a URL with a double
slash in it, which 404s. authentik is one of them: its issuer is
`https://auth.example.com/application/o/<app>/`, so the request goes to
`.../o/<app>//.well-known/openid-configuration` and login fails right at
the start with `Failed to fetch OIDC metadata`.
Stripping trailing slashes off the issuer before joining the well-known
path is enough. The `issuer` used later for ID token validation still
comes from the discovery document itself, so nothing else about the flow
changes.
Co-authored-by: Krim <git@krim.dev>
### Summary
Multi-type memory prompts were assembled from sets, so their instruction
and output sections could change order across Python processes with
different hash seeds. Because the generated default prompt is persisted
and later compared as a string, a restart could make an untouched
default look custom and prevent it from being regenerated when memory
types change.
### Summary
Preserve explicitly saved `false` values for RAPTOR and GraphRAG when
hydrating the dataset Configuration form. The existing form defaults
still apply when either enable flag is absent.
Adds hook-level regression coverage for both explicit disablement and
default fallback behavior.
Fixes#17654
## What
Pressing Enter to confirm IME (e.g. Japanese) text conversion in the
knowledge base name field of the "Create knowledge base" dialog was
incorrectly treated as the dialog's submit trigger. The
composition-confirm Enter both let the IME finish composing and
triggered the dialog's Enter handler, which called `preventDefault()`
and `form.requestSubmit()` — causing input like "アルゴ" to be duplicated
as "アルゴアルゴ".
### Summary
Adds You.com as a built-in Web Search provider for RAGFlow Chat,
alongside Tavily and Querit, using the provider-neutral dispatch #17813
put in place. No changes to existing Tavily or Querit behaviour.
You.com runs its own web index and returns several extracted passages
per result rather than a single meta description, so retrieved chunks
arrive with usable context.
---------
Co-authored-by: Brian Sparker <brainsparker@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
## Summary
Fixes#18025. Both merge paths deduplicated IDs by scanning a plain list
(`item not in list`) inside a loop while appending — O(n²) per merge.
Replaced with a set-backed `seen` check alongside the existing ordered
list: same order, same dedup result, O(n).
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
An image whose OCR text is shorter than the CV LLM threshold produces zero chunks when the tenant has no image2text model configured. The extracted text is discarded.
## Summary
- Pass `vector_similarity_weight` from Python and Go retrieval requests
into Infinity's weighted fusion expression.
- Keep fusion weights ordered as text first and vector second, with the
existing default vector weight of `0.3`.
---------
Co-authored-by: chenglinpeng <1042527908@qq.com>
### Summary
Clear the paired tenant model ID when a model selection is explicitly
cleared in a whitelisted API request.
Replaces #18205.
Co-authored-by: Jin Hai <haijin.chn@gmail.com>
### Summary
This PR adds [Serply](https://serply.io) as a third web search provider
for chat assistants, alongside the existing Tavily and Querit options.
## Summary
Closes#5703.
Users who delete the hardcoded `{knowledge}` placeholder from the system
prompt while datasets are selected can still retrieve the right chunks,
but the assistant answers as if nothing were found — because the
retrieved content has nowhere to be injected. Likewise, a non-empty
*empty response* with **no** dataset selected fires on every turn
(nothing can ever be retrieved). This PR adds a save-time self-check
that prompts the user about both contradictory configurations, as
requested in the issue.
Co-authored-by: peewee92 <20059253+peewee92@users.noreply.github.com>