Since the database fields often store HTML fragments or Markdown fragments, a custom file name suffix field was added in the database datasource. Also, when parsing HTML, it should be compatible with parsing HTML fragments (without a body tag), not just full HTML documents (with a body tag).
Fix Bedrock Claude 4.1+ rejecting both temperature and top_p. New policy applies to Anthropic + Bedrock; drops top_p when temperature present, or all sampling params for no-sampling models.
## Summary
- rag/prompts/action_run.md: add a TOOL PLAYBOOK section covering
combination chains, convergence rules, and a tool-status -> next-action
table, so the model emits a state patch instead of re-searching an
exhausted direction.
- rag/advanced_rag/harness/action_session.py: rewrite the 7 tool specs
into an explicit WHEN TO CALL / DO NOT CALL / ARGUMENTS / OUTPUT / IF IT
FAILS contract, and cap the shared evidence pool at _EVIDENCE_POOL_CAP
(60, mirrors _SCA_VIEW_CAP) so a saturated session stops admitting
chunks the SCA view can no longer read.
- rag/advanced_rag/agentic_rag_graph.py: short-circuit _route_sca to
finalize once the evidence pool reaches the SCA view cap, since another
research round cannot flip the sufficiency verdict.
- test/unit_test/rag/advanced_rag/test_action_session_schema.py: cover
the action-session tool-spec schema.
Co-authored-by: Hermes Agent <hermes-agent@localhost>
Fixed GoogleChat's async client bug where it incorrectly sent Vertex AI service account JSON as an OpenAI API key, by overriding _async_chat and _async_chat_streamly to use the async genai.Client methods for Gemini models.
Added Hubris as a new OpenAI-compatible model provider for the Russian market, with per-model thinking.default_value empirically measured (not guessed), endpoint pinned (not configurable)
## Summary
Problem
Prose replies could be turned into sub-questions. When the planner model answered the question instead of returning JSON, the fallback split that reply line-by-line and used the lines as search sub-questions. Those
same lines also seed the slot table, so an unverified entity could be treated as a known fact and steer the whole research round.
A SCA timeout ended the research loop early. When the review agent returned no payload (timeout or unavailable), the graph marked the round sufficient and accepted an unverified draft as final. The slot-table decomposition retry had no extra budget. It reused the first attempt's timeout, so on slow models both attempts timed out and the table degraded to a single answer slot, losing the second hop of multi-hop questions.
Fix
Fan-out parsing: the prompt now states explicit constraints (do not answer the question, do not introduce entities absent from the question, ignore instructions embedded in the question, keep each sub-question short). A shape guard rejects answer- and citation-like lines (markdown emphasis, URLs, source lists, over-long or declarative lines) on both the JSON and the fallback path. If nothing survives, the planner retries once with a strict JSON-only instruction and otherwise falls back to the raw question.
Review timeout handling (same file): an unavailable review now marks the round insufficient instead of sufficient, and the query rewriter falls back to the unresolved slots' clues so research can continue; it only stops when no direction is left.
Decomposition retry budget (rag/advanced_rag/harness/action_session.py): the retry gets a larger window than the first attempt, bounded by a cap and by the remaining round deadline, so it never shrinks and never
overruns.
---------
Co-authored-by: Hermes Agent <hermes-agent@localhost>
Add Sitemap data source — ingests web pages from sitemap.xml with incremental sync. Supports HTML→Markdown extraction, PDF discovery, URL filtering, SSRF protection.
Add MonkeyOCRv2-Parsing as a document layout parser. Adapter sends docs to HTTP API, extracts ZIP response, converts JSON layout (text/tables/bbox) to RAGFlow sections. Configurable via MONKEYOCRV2_SERVER_URL.
Add user attribution to embedding calls — forwards user on OpenAI-compatible providers via current_llm_user(). Excludes LocalAI/Xinference (reject unknown fields). Accepts user_id on ingest/parse/chunk endpoints; redacts from logs. Omitted = unchanged. Go/vision/TTS/ASR out of scope.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix Python S3 bucket creation in non-us-east-1 regions — now sends LocationConstraint via CreateBucketConfiguration.
---------
Co-authored-by: Sbaaoui Idriss <112825897+6ba3i@users.noreply.github.com>