Commit Graph
115 Commits
Author SHA1 Message Date
Yingfeng 4e54fe1338 Port Agentic RAG to Golang (#19563) 2026-09-14 09:38:51 +08:00
天海蒼灆 ebbdd5028a feat(agent): support document_ids in retrieval node and tool (#16938) 2026-09-11 19:15:23 +08:00
Sbaaoui Idriss 681f418424 fix(invoke): tolerate invalid headers across runtimes (#19481) 2026-09-11 10:21:25 +08:00
qinling0210 ef800ba5c2 Port agentic RAG to GO (#19500)
### Summary

Port agentic RAG to GO
2026-09-10 20:02:48 +08:00
Sbaaoui Idriss 11f4d11920 fix(agent): preserve Starter values beside query inputs (#19420) 2026-09-10 10:16:32 +08:00
Lynn cd054ed786 Fix: check sql component required fields (#19418) 2026-09-09 13:37:06 +08:00
euvre 38c40e64a9 fix(agent): treat missing List Operations input as empty list (#19275) 2026-09-09 11:07:43 +08:00
Sbaaoui Idriss d796dcfb6f fix(agent): preserve sandbox artifacts through streaming (#19355) 2026-09-09 09:57:34 +08:00
WOLIKIMCHENG 440c2c646b fix(agent): flatten scalar-list values in DataOperations combine (#19111) 2026-09-08 15:39:15 +08:00
buua436 c0470b8594 fix: support agent input mapping and converged edges (#19317) 2026-09-08 11:34:27 +08:00
euvre a41d0d3a94 fix(agent): accept user_id node param on the Retrieval agent tool (#19090) 2026-09-03 19:37:10 +08:00
jay77721andCommandCodeBot 45c3a70c2f refactor(go): merge messagefit into internal/tokenizer (#19225)
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
2026-09-03 19:33:29 +08:00
Sbaaoui Idriss ec8f5e0421 fix(agent): reject empty message rows when saving canvas (#19149) 2026-09-02 15:42:21 +08:00
euvre bba1b9d91b fix(agent): restore message download button when output file type is selected (#18955) 2026-09-02 14:42:03 +08:00
Sbaaoui Idriss 01cf9c428a fix error where returns a no dataset found error in a 500 wrapper (#19059) 2026-09-01 20:14:48 +08:00
euvre b54e0e0588 fix(agent): reject only truly-empty delimiter entries on canvas save (#19048) 2026-09-01 17:14:15 +08:00
Sbaaoui Idriss 52fe959e7f fix(agent): make user added emppty entries fail to save (#18979) 2026-08-28 19:25:27 +08:00
Sbaaoui Idriss 9efdfb2c24 fix(agent): reject fractional integer DSL parameters (#18964) 2026-08-28 15:20:19 +08:00
buua436 7d658ccd17 fix: map agent rounds to react steps (#18868) 2026-08-27 19:15:31 +08:00
Jin Hai 6c2bca893c Go: fix context, part3 (#18821)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-26 22:33:10 +08:00
Jin Hai 68f8260821 Go: fix context, part3 (#18390)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-18 00:07:37 +08:00
euvre 3d50f8bcfc fix(go-agent): forward sys.files uploads to vision LLMs (#18246) 2026-08-14 18:26:09 +08:00
Haruko386 a6f2eac496 fix: unable to pass Temperature and MaxTokens in agent (#18223)
### Summary

As title
2026-08-13 18:31:08 +08:00
jay77721 0a4cc65db0 refactor(common): unify </think>-strip into shared StripThinkTrailing helper (#18179)
Collapse the nine identical **"cut through the last `</think>`"**
implementations — mirroring Python's `re.sub(r"^.*</think>", "", s,
re.DOTALL)` — into one shared helper `common.StripThinkTrailing`,
preventing future behavior drift between copies.
2026-08-13 13:56:56 +08:00
EthanZhang 1d8b9c7452 feat(agent): add Querit Contents tool (#18156)
### Summary

Add Querit Contents as a built-in page content tool for RAGFlow Agents
and Canvas workflows.

Querit Contents crawls one or more known URLs and returns their page
content and optional metadata. It complements the existing Querit Search
tool: Search discovers relevant pages, while Contents retrieves pages
already selected by an Agent or workflow.

This integration supports two usage modes:

- A standalone `QueritContents` node in Canvas workflows.
- An embedded content tool available to RAGFlow Agents.
2026-08-12 21:03:21 +08:00
jay77721 91fd114783 fix(dao): honor tenant-configured context window override (D22/D23) (#18171)
Make `ResolveModelContentLength` honor the per-model custom **context window length** (`content_length`) — stored in the Python-legacy `tenant_model.extra["max_tokens"]` field, whose semantic meaning is the context window, NOT the generation cap — **before** any provider-catalog read, and remove the parallel service-layer implementation so every consumer shares one resolution path.
2026-08-12 19:32:37 +08:00
jay77721 d7682b5b92 fix(agent): fit LLM prompts to model content_length (#18093)
Use the chat model's context window (`content_length`) as the message-fitting budget instead of the canvas `max_tokens` parameter.
2026-08-12 17:23:43 +08:00
jay77721 341e913b7f refactor(agent): use shared message-fit in LLM component (#18092)
Switch the agent LLM component's `fitMessages` from the local map-based `messageFitInRaw`/`countAllTokens`/`stringContent`/`setContent` helpers to the new shared `internal/component/messagefit` package (#18091).
2026-08-12 15:43:46 +08:00
Jin Hai c75edbfbe8 Go: fix context (#18118)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-11 19:19:29 +08:00
Jin Hai d7661b676d Go: fix context and warnings (#18097)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-11 16:18:49 +08:00
Jin Hai c0bc146fcb Go: fix env variables (#18032)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-10 14:37:05 +08:00
Jin Hai 8bc34219f5 Go: fix plenty of warnings (#17918)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-06 13:36:04 +08:00
Hz_ a55a438b42 fix(go-agent): finish retrieval component (#17845)
- Prefer canonical `dataset_ids` over legacy `kb_ids` in Canvas
retrieval components.
- Cover selected and explicitly cleared dataset IDs with regression
tests.
- Add cross-language retrieval with dataset-specific embedding and
rerank models.
- Support vector and keyword similarity controls, metadata filtering,
TOC enhancement, and child-chunk expansion.
- Route Canvas retrieval across datasets and memories with compatible
embedding validation.
2026-08-05 15:48:54 +08:00
Hz_ f0bdd90aa2 fix(go-agent): preserve realtime stream deltas (#17791)
- Start the Agent model-stream collector before ReAct execution.
- Preserve all streamed reasoning/content deltas and drain the collector
on errors.
- Add coverage for delayed thinking streams and tool-call execution.
2026-08-04 15:43:15 +08:00
Hz_ 539eb470e3 fix(go-agent): normalize canvas tool names (#17768)
## Summary

- Normalize Canvas component names before resolving Go Agent tools and
parameters.
- Add regression coverage for CodeExec and other Canvas tool mappings.

## Testing

- `CGO_ENABLED=0 go test -count=1 ./internal/agent/tool
./internal/agent/component`
2026-08-04 13:34:59 +08:00
Jin Hai 86021932ae Go: fix warnings (#17738)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-03 21:30:01 +08:00
Jin Hai bddc941814 Go: add context to storage (#17690)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-08-03 15:08:21 +08:00
Zhichang Yu 4e78f1f440 Port Python agentic search to Go (nav service, harness, tools) (#17702)
Port Python rag/advanced_rag agentic search to Go: ES-backed dataset-nav
service, agentic-search harness, and agent tools.

Includes agentic-search port plan and self-review docs.
2026-08-03 11:16:16 +08:00
Jin Hai b058229ab3 Go: fix SSRF (#17641)
### Summary

Check the URL to prevent SSRF attack.

---------

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-07-31 19:15:38 +08:00
JackandCodeBuddy 5ba8c4febb chore(go): classify tests into unit/integration/e2e/manual tiers via build tags (#17586)
## Summary
Classify the Go test suite by dependency level using build tags so the
default
`go test ./...` run stays self-contained, and add local convenience
commands
plus a documented convention.

- Add build tags to 5 real-service tests that were previously un-tagged
and only
soft-isolated via `t.Skip`: `kg_test.go` (integration), `minio_test.go`
  (integration), `template_integration_test.go` (integration),
`stagehand_runtime_integration_test.go` (integration),
`pipeline_e2e_test.go` (e2e).
  The default unit run no longer compiles/attempts these.
- Reclassify the full-pipeline `real_consumer` tests from `integration`
to `e2e`.
- Add `build.sh` shortcuts: `--test-integration`, `--test-e2e`,
`--test-manual`,
`--test-all` (integration + e2e; `manual` is excluded and is local
opt-in only,
  never run in CI).
- Document the tier scheme (unit / integration / e2e / manual +
orthogonal cgo) in
  `AGENTS.md`.

## Tier definitions
| Tier | Build tag | Runs by default? |
|---|---|---|
| Unit | (none) | Yes — in-memory SQLite / miniredis / httptest stubs |
| Integration | `integration` | No (`-tags integration`) — single real
service |
| E2E | `e2e` | No (`-tags e2e`) — full ingest→index→retrieve pipeline |
| Manual | `manual` | No (`-tags manual`) — very slow; never in CI |

## Verification
- `gofmt -l` clean on all changed files; `bash -n build.sh` OK.
- `go list` confirms the default set excludes the tagged files, and
  `-tags integration` / `-tags e2e` include them.
- Full regression: unit / integration / e2e each **97 ok, 0 FAIL**.
- Fixed a regression where `pipeline_knowledge_compiler_test.go` relied
on a
transitive import side-effect from `template_integration_test.go` to
register
the `File`/`Parser`/`TokenChunker` components; it now blank-imports the
  component packages directly.

## Test plan
- [ ] `./build.sh --test` (unit) passes
- [ ] `./build.sh --test-integration` passes (needs real services; skips
otherwise)
- [ ] `./build.sh --test-e2e` passes (needs real services; skips
otherwise)

---------

Co-authored-by: CodeBuddy <noreply@cnb.cool>
2026-07-31 11:52:48 +08:00
EthanZhang 33e581a8b3 feat(agent): add Querit search tool (#17548) 2026-07-30 09:36:16 +08:00
JackandCodeBuddy 76aaecc284 fix(ingestion): improve Extractor/LLM robustness and Python->Go parity (#17470)
## Summary

This PR hardens the Go ingestion **Extractor** and **LLM retry** paths
and closes several Python->Go parity gaps in the keyword/question/tag
extraction flow.

- **Generic retry utility** (`internal/common/retry.go`):
`RetryWithBackoff` with exponential backoff (default 3 retries, 2s
initial delay, capped at 1m), context-aware sleep, and a `maxRetries<=0`
fast path. Covered by `internal/common/retry_test.go`.
- **LLM retry reuse**: `agent/component/llm_retry.go` now delegates to
`common.RetryWithBackoff` instead of an inline loop (behavior preserved:
ctx cancellation short-circuits the backoff).
- **Extractor LLM calls** (`extractor.go`):
- `call()` now retries transient LLM failures via `RetryWithBackoff`
(retry exhaustion fails the chunk instead of silently skipping).
  - Sets `temperature = 0.2`, matching Python `generator.py:230,245`.
- Runs keyword and question extraction **concurrently** per chunk when
both are enabled (`task_executor.py:444-448`), with mutex-guarded map
writes to avoid data races.
- Substitutes `{field_name}` placeholders (including `{chunks}` -> chunk
text) in `prompt`/`system_prompt` before the call, mirroring Python
`string_format` (`extractor.py:102-103`); unmatched placeholders are
left as-is.
- Falls back to the **tenant default chat model** when `llm_id` is empty
(`task_executor.py:573-574`).
- Strips `` **greedily** (`strings.LastIndex`) in
`cleanExtractionResult`.
- **Auto-tagging** (`extractor_tag.go`): drops the `in.llmID != ""`
guards so an empty `llm_id` no longer skips tagging (uses the tenant
default model), and strips `` greedily in `parseTaggerResponse`.
- **Docs**: fixes a misleading `PresentationChunker` docstring that
claimed per-slide `image`/`position` output (the PPTX path emits none —
unlike PDF), and removes a stale `docs/migration_python_go_diff.md`
reference in `media_dispatch.go`.

## Test plan

- `bash build.sh --test ./internal/common/...` — passes (new retry
utility + tests).
- `bash build.sh --test ./internal/ingestion/component/...` — passes
(extractor/chunker/schema).
- `gofmt` and lefthook pre-commit checks pass.

Note: the personal `docs/migration_python_go_diff.md` working notebook
in the tree is intentionally **not** part of this PR.

---------

Co-authored-by: CodeBuddy <noreply@codebuddy.ai>
2026-07-28 19:22:18 +08:00
Hz_ 55a5254045 fix(go-agent): return configured retrieval empty responses (#17484)
## Summary

- Return the configured `empty_response` when retrieval has no query or
no chunks.
- Preserve `formalized_content` for downstream Message nodes.

## Testing

- `bash build.sh --go`
- `ok    ragflow/internal/agent/tool`
- `ok    ragflow/internal/agent/component`
2026-07-28 19:17:33 +08:00
Haruko386andcoderabbitai[bot] 4885dda32a fix: failed to set right status in memory (#17472)
As title

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-07-28 19:13:22 +08:00
Lynn 675c35a2de Fix: rm tenant llm call (#17476) 2026-07-28 15:54:44 +08:00
Hz_ 19b60132da fix(go-agent): use session IDs for cancellation and context flow (#17462)
## Summary

- Propagate request contexts through Agent Canvas execution and external
calls.
- Replace internal task IDs with session IDs while retaining `task_id`
as a wire alias.
- Complete session-scoped cancellation with Redis lease and token
validation.

## Testing

- Go backend tests passed.

<img width="1176" height="574" alt="image"
src="https://github.com/user-attachments/assets/b86560be-9b8d-45bb-97e9-921dffab8ebe"
/>
2026-07-28 14:59:34 +08:00
Jin Hai 1436fcaca5 Go: add context, part13 (#17445)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-07-27 21:19:39 +08:00
Jin Hai f53518c110 Go: add context, part5 (#17392)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-07-27 10:20:16 +08:00
Hz_ 601742e000 fix(go-agent): message double (#17353)
## Summary

- Preserve all streamed Agent deltas when Message consumes deferred
output.
- Prevent duplicate final answers while keeping Agent and Message event
ordering consistent.
- Add regression coverage for complete deferred streaming output.

## Testing

- `CGO_ENABLED=0 go test ./internal/agent/component
./internal/agent/runtime -count=1`
2026-07-24 19:23:51 +08:00
futurehua bd355deaa9 refactor: use the built-in max/min to simplify the code (#17059)
### Summary

In Go 1.21, the standard library includes built-in
[max/min](https://pkg.go.dev/builtin@go1.21.0#max) function, which can
greatly simplify the code.

Signed-off-by: futurehua <futurehua@outlook.com>
2026-07-24 15:33:02 +08:00