fix(agent): restore be_output and test DeepL error return#16363
Conversation
|
Could a maintainer add the |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
💤 Files with no reviewable changes (1)
📝 WalkthroughWalkthroughComponentBase adds a helper that wraps a value in a one-row pandas DataFrame with a ChangesDeepL output helper and failure test
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related issues
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
test/unit_test/agent/component/test_deepl.py (1)
62-62: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueRedundant input setup.
get_inputis patched at Line 64 to return{"content": ["hello"]}, so seedingcpn._param.inputshere has no effect on the code path under test. Drop it to avoid implying it's exercised.♻️ Proposed cleanup
def test_run_returns_error_on_translation_failure(): cpn = _deepl() - cpn._param.inputs = {"content": {"value": ["hello"]}} with patch.object(DeepL, "get_input", return_value={"content": ["hello"]}):🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/unit_test/agent/component/test_deepl.py` at line 62, Remove the redundant test setup in test_deepl.py by deleting the cpn._param.inputs assignment, since get_input is already patched to return the needed {"content": ["hello"]}. Keep the test focused on the patched get_input path and rely on that mocked value instead of seeding internal state on cpn.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@test/unit_test/agent/component/test_deepl.py`:
- Line 62: Remove the redundant test setup in test_deepl.py by deleting the
cpn._param.inputs assignment, since get_input is already patched to return the
needed {"content": ["hello"]}. Keep the test focused on the patched get_input
path and rely on that mocked value instead of seeding internal state on cpn.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: a9bc01b6-d235-47d4-a89d-8c19917bb319
📒 Files selected for processing (2)
agent/component/base.pytest/unit_test/agent/component/test_deepl.py
|
Fixed the preflight Ruff failure in 2dd8d93 by removing the unused Verification:
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #16363 +/- ##
==========================================
- Coverage 94.56% 93.16% -1.40%
==========================================
Files 10 10
Lines 717 717
Branches 118 118
==========================================
- Hits 678 668 -10
- Misses 25 29 +4
- Partials 14 20 +6 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
yuzhichang
left a comment
There was a problem hiding this comment.
I re-reviewed the current head locally. The be_output() restoration and the DeepL failure-path regression test both look correct, and I do not see any remaining blocking issue in the current diff. The only unresolved bot comment is a very low-value cleanup in the test setup, so from my side this is ready to merge.
## Summary #16332 fixed the missing `return` in DeepL's except branch, but `ComponentBase.be_output` was removed during the agent refactor (#9113) while several components still call it. DeepL (and other tools) would raise `AttributeError` before any error message could be returned. - Restore `ComponentBase.be_output` as `pd.DataFrame([{"content": v}])` (same as pre-refactor behavior) - Add regression test that `_run` returns the `**Error**:` message when translation fails Related to #16329 ## Test plan - [x] `test_run_returns_error_on_translation_failure` - [x] Existing `test_deepl.py` check() tests still pass --------- Co-authored-by: Harsh Kashyap <harshkashyap@Harshs-MacBook-Pro.local> Co-authored-by: Zhichang Yu <yuzhichang@gmail.com>
Ports 5 S-effort PRs from .claude/plans/review-and-port-py-agent-changes.md Execution snapshot (all merged upstream) to the Go agent side. Group 1 - tool ports - infiniflow#15609 ExeSQL SSRF guard: add ValidateDBHost to tool/ssrf.go and wire into exesql.InvokableRun. Loopback, link-local, RFC1918, and empty host are rejected before any driver dispatch. Allowed hosts are dialed via the validated/resolved public IP (DNS-pin). - infiniflow#15436 HTTP timeout: Go side already routes github/qweather/tushare through HTTPHelper (client.Timeout: 30s + per-stage timeouts) and jin10 is a stub. Added regression guard tests: default client timeout, stage timeouts, and AST scan for bare http.Get/Post calls outside the helper. Group 2 - component ports - infiniflow#16363 be_output restore + DeepL error: add BeOutput(v) helper returning {"content": v} frame; add DeepL translation-failure regression test using rewriteHostTransport (avoids mutating package globals which raced TestDeepL_BuildRequest). - infiniflow#15644 Switch no longer matches empty condition: evaluateGroup empty-clauses short-circuit now returns false (was true) so an "and" condition with no clauses falls through to the next condition or end_cpn_ids instead of routing to the empty group's "to" target. Mirrors the all([]) is True fix. Group 4 - API ports - infiniflow#15374 session_id bind to path agent_id: Go DAO already enforces WHERE id = ? AND dialog_id = ? (stronger than the Python post-fetch check). Added 3 IDOR regression tests at the service level (Get/Get mismatch/Delete) confirming the binding holds. Total: 32 new tests across 4 new test files. All agent/tool and agent/component tests pass (320 + 331). All new service IDOR tests pass (3/3). The one failing test in agent/component (TestAgent_ReActExhaustsSteps) is a pre-existing flaky test that also fails on the baseline without my changes. Refs: .claude/plans/review-and-port-py-agent-changes.md Refs: infiniflow#15609 infiniflow#15436 infiniflow#16363 infiniflow#15644 infiniflow#15374
Ports 5 S-effort PRs from .claude/plans/review-and-port-py-agent-changes.md Execution snapshot (all merged upstream) to the Go agent side. Group 1 - tool ports - infiniflow#15609 ExeSQL SSRF guard: add ValidateDBHost to tool/ssrf.go and wire into exesql.InvokableRun. Loopback, link-local, RFC1918, and empty host are rejected before any driver dispatch. Allowed hosts are dialed via the validated/resolved public IP (DNS-pin). - infiniflow#15436 HTTP timeout: Go side already routes github/qweather/tushare through HTTPHelper (client.Timeout: 30s + per-stage timeouts) and jin10 is a stub. Added regression guard tests: default client timeout, stage timeouts, and AST scan for bare http.Get/Post calls outside the helper. Group 2 - component ports - infiniflow#16363 be_output restore + DeepL error: add BeOutput(v) helper returning {"content": v} frame; add DeepL translation-failure regression test using rewriteHostTransport (avoids mutating package globals which raced TestDeepL_BuildRequest). - infiniflow#15644 Switch no longer matches empty condition: evaluateGroup empty-clauses short-circuit now returns false (was true) so an "and" condition with no clauses falls through to the next condition or end_cpn_ids instead of routing to the empty group's "to" target. Mirrors the all([]) is True fix. Group 4 - API ports - infiniflow#15374 session_id bind to path agent_id: Go DAO already enforces WHERE id = ? AND dialog_id = ? (stronger than the Python post-fetch check). Added 3 IDOR regression tests at the service level (Get/Get mismatch/Delete) confirming the binding holds. Total: 32 new tests across 4 new test files. All agent/tool and agent/component tests pass (320 + 331). All new service IDOR tests pass (3/3). The one failing test in agent/component (TestAgent_ReActExhaustsSteps) is a pre-existing flaky test that also fails on the baseline without my changes. Refs: .claude/plans/review-and-port-py-agent-changes.md Refs: infiniflow#15609 infiniflow#15436 infiniflow#16363 infiniflow#15644 infiniflow#15374
Ports 5 S-effort PRs from .claude/plans/review-and-port-py-agent-changes.md Execution snapshot (all merged upstream) to the Go agent side. Group 1 - tool ports - infiniflow#15609 ExeSQL SSRF guard: add ValidateDBHost to tool/ssrf.go and wire into exesql.InvokableRun. Loopback, link-local, RFC1918, and empty host are rejected before any driver dispatch. Allowed hosts are dialed via the validated/resolved public IP (DNS-pin). - infiniflow#15436 HTTP timeout: Go side already routes github/qweather/tushare through HTTPHelper (client.Timeout: 30s + per-stage timeouts) and jin10 is a stub. Added regression guard tests: default client timeout, stage timeouts, and AST scan for bare http.Get/Post calls outside the helper. Group 2 - component ports - infiniflow#16363 be_output restore + DeepL error: add BeOutput(v) helper returning {"content": v} frame; add DeepL translation-failure regression test using rewriteHostTransport (avoids mutating package globals which raced TestDeepL_BuildRequest). - infiniflow#15644 Switch no longer matches empty condition: evaluateGroup empty-clauses short-circuit now returns false (was true) so an "and" condition with no clauses falls through to the next condition or end_cpn_ids instead of routing to the empty group's "to" target. Mirrors the all([]) is True fix. Group 4 - API ports - infiniflow#15374 session_id bind to path agent_id: Go DAO already enforces WHERE id = ? AND dialog_id = ? (stronger than the Python post-fetch check). Added 3 IDOR regression tests at the service level (Get/Get mismatch/Delete) confirming the binding holds. Total: 32 new tests across 4 new test files. All agent/tool and agent/component tests pass (320 + 331). All new service IDOR tests pass (3/3). The one failing test in agent/component (TestAgent_ReActExhaustsSteps) is a pre-existing flaky test that also fails on the baseline without my changes. Refs: .claude/plans/review-and-port-py-agent-changes.md Refs: infiniflow#15609 infiniflow#15436 infiniflow#16363 infiniflow#15644 infiniflow#15374
Ports 5 S-effort PRs from .claude/plans/review-and-port-py-agent-changes.md Execution snapshot (all merged upstream) to the Go agent side. Group 1 - tool ports - infiniflow#15609 ExeSQL SSRF guard: add ValidateDBHost to tool/ssrf.go and wire into exesql.InvokableRun. Loopback, link-local, RFC1918, and empty host are rejected before any driver dispatch. Allowed hosts are dialed via the validated/resolved public IP (DNS-pin). - infiniflow#15436 HTTP timeout: Go side already routes github/qweather/tushare through HTTPHelper (client.Timeout: 30s + per-stage timeouts) and jin10 is a stub. Added regression guard tests: default client timeout, stage timeouts, and AST scan for bare http.Get/Post calls outside the helper. Group 2 - component ports - infiniflow#16363 be_output restore + DeepL error: add BeOutput(v) helper returning {"content": v} frame; add DeepL translation-failure regression test using rewriteHostTransport (avoids mutating package globals which raced TestDeepL_BuildRequest). - infiniflow#15644 Switch no longer matches empty condition: evaluateGroup empty-clauses short-circuit now returns false (was true) so an "and" condition with no clauses falls through to the next condition or end_cpn_ids instead of routing to the empty group's "to" target. Mirrors the all([]) is True fix. Group 4 - API ports - infiniflow#15374 session_id bind to path agent_id: Go DAO already enforces WHERE id = ? AND dialog_id = ? (stronger than the Python post-fetch check). Added 3 IDOR regression tests at the service level (Get/Get mismatch/Delete) confirming the binding holds. Total: 32 new tests across 4 new test files. All agent/tool and agent/component tests pass (320 + 331). All new service IDOR tests pass (3/3). The one failing test in agent/component (TestAgent_ReActExhaustsSteps) is a pre-existing flaky test that also fails on the baseline without my changes. Refs: .claude/plans/review-and-port-py-agent-changes.md Refs: infiniflow#15609 infiniflow#15436 infiniflow#16363 infiniflow#15644 infiniflow#15374
Ports 5 S-effort PRs from .claude/plans/review-and-port-py-agent-changes.md Execution snapshot (all merged upstream) to the Go agent side. Group 1 - tool ports - infiniflow#15609 ExeSQL SSRF guard: add ValidateDBHost to tool/ssrf.go and wire into exesql.InvokableRun. Loopback, link-local, RFC1918, and empty host are rejected before any driver dispatch. Allowed hosts are dialed via the validated/resolved public IP (DNS-pin). - infiniflow#15436 HTTP timeout: Go side already routes github/qweather/tushare through HTTPHelper (client.Timeout: 30s + per-stage timeouts) and jin10 is a stub. Added regression guard tests: default client timeout, stage timeouts, and AST scan for bare http.Get/Post calls outside the helper. Group 2 - component ports - infiniflow#16363 be_output restore + DeepL error: add BeOutput(v) helper returning {"content": v} frame; add DeepL translation-failure regression test using rewriteHostTransport (avoids mutating package globals which raced TestDeepL_BuildRequest). - infiniflow#15644 Switch no longer matches empty condition: evaluateGroup empty-clauses short-circuit now returns false (was true) so an "and" condition with no clauses falls through to the next condition or end_cpn_ids instead of routing to the empty group's "to" target. Mirrors the all([]) is True fix. Group 4 - API ports - infiniflow#15374 session_id bind to path agent_id: Go DAO already enforces WHERE id = ? AND dialog_id = ? (stronger than the Python post-fetch check). Added 3 IDOR regression tests at the service level (Get/Get mismatch/Delete) confirming the binding holds. Total: 32 new tests across 4 new test files. All agent/tool and agent/component tests pass (320 + 331). All new service IDOR tests pass (3/3). The one failing test in agent/component (TestAgent_ReActExhaustsSteps) is a pre-existing flaky test that also fails on the baseline without my changes. Refs: .claude/plans/review-and-port-py-agent-changes.md Refs: infiniflow#15609 infiniflow#15436 infiniflow#16363 infiniflow#15644 infiniflow#15374
Ports 5 S-effort PRs from .claude/plans/review-and-port-py-agent-changes.md Execution snapshot (all merged upstream) to the Go agent side. Group 1 - tool ports - infiniflow#15609 ExeSQL SSRF guard: add ValidateDBHost to tool/ssrf.go and wire into exesql.InvokableRun. Loopback, link-local, RFC1918, and empty host are rejected before any driver dispatch. Allowed hosts are dialed via the validated/resolved public IP (DNS-pin). - infiniflow#15436 HTTP timeout: Go side already routes github/qweather/tushare through HTTPHelper (client.Timeout: 30s + per-stage timeouts) and jin10 is a stub. Added regression guard tests: default client timeout, stage timeouts, and AST scan for bare http.Get/Post calls outside the helper. Group 2 - component ports - infiniflow#16363 be_output restore + DeepL error: add BeOutput(v) helper returning {"content": v} frame; add DeepL translation-failure regression test using rewriteHostTransport (avoids mutating package globals which raced TestDeepL_BuildRequest). - infiniflow#15644 Switch no longer matches empty condition: evaluateGroup empty-clauses short-circuit now returns false (was true) so an "and" condition with no clauses falls through to the next condition or end_cpn_ids instead of routing to the empty group's "to" target. Mirrors the all([]) is True fix. Group 4 - API ports - infiniflow#15374 session_id bind to path agent_id: Go DAO already enforces WHERE id = ? AND dialog_id = ? (stronger than the Python post-fetch check). Added 3 IDOR regression tests at the service level (Get/Get mismatch/Delete) confirming the binding holds. Total: 32 new tests across 4 new test files. All agent/tool and agent/component tests pass (320 + 331). All new service IDOR tests pass (3/3). The one failing test in agent/component (TestAgent_ReActExhaustsSteps) is a pre-existing flaky test that also fails on the baseline without my changes. Refs: .claude/plans/review-and-port-py-agent-changes.md Refs: infiniflow#15609 infiniflow#15436 infiniflow#16363 infiniflow#15644 infiniflow#15374 Apply unstaged agent-go-port prep work docker/.env - switch API_PROXY_SCHEME from python to go (Go server is the default) - enable SANDBOX_ENABLED=1 and extend COMPOSE_PROFILES with ragflow-go web/CLAUDE.md - document frontend agent conventions: CSS/flex layout debugging, scope boundaries, i18n language files, query-key factory pattern, request layering (hook -> service -> next-request), shared UI lock, utility libs (dayjs, ahooks, lodash) web/.agents/skills/tanstack-query-best-practices/ - remove the full tanstack-query-best-practices skill set (SKILL.md + 21 rule files, 1,535 lines total) Lefthook pre-commit was satisfied after stripping two pre-existing trailing-whitespace lines from docker/.env comments. chore(hooks): enable auto-fix for staged file checks Convert lefthook pre-commit to B-mode (check + auto-fix in place) for the four fixable jobs: - end-of-file-fixer, trailing-whitespace, mixed-line-ending: these wrap tools/hooks/check_files.py, which gains a --fix mode that rewrites staged files in place. Lefthook re-stages the fixes via stage_fixed: true, so the next commit naturally includes the cleanup. The user no longer has to manually strip whitespace, append newlines, or normalize line endings. - web-eslint: ESLint --fix is enabled; safe auto-fixes are applied, warnings still surface. trailing-whitespace now uses a regex ([ \t]+(?=\r?\n|$)) so it correctly detects/strips whitespace before a line terminator and preserves CRLF when only stripping whitespace. A previous splitlines-based rstrip pass would silently miss whitespace-before-newline. Checks that only validate (json, yaml) or detect states that need human review (case-conflict, merge-conflict, broken symlinks) remain check-only; their --fix flag is accepted but a no-op. ruff check/format, gofmt, and web-prettier already auto-fixed in the previous config and were left unchanged. fix
Ports 5 S-effort PRs from .claude/plans/review-and-port-py-agent-changes.md Execution snapshot (all merged upstream) to the Go agent side. Group 1 - tool ports - infiniflow#15609 ExeSQL SSRF guard: add ValidateDBHost to tool/ssrf.go and wire into exesql.InvokableRun. Loopback, link-local, RFC1918, and empty host are rejected before any driver dispatch. Allowed hosts are dialed via the validated/resolved public IP (DNS-pin). - infiniflow#15436 HTTP timeout: Go side already routes github/qweather/tushare through HTTPHelper (client.Timeout: 30s + per-stage timeouts) and jin10 is a stub. Added regression guard tests: default client timeout, stage timeouts, and AST scan for bare http.Get/Post calls outside the helper. Group 2 - component ports - infiniflow#16363 be_output restore + DeepL error: add BeOutput(v) helper returning {"content": v} frame; add DeepL translation-failure regression test using rewriteHostTransport (avoids mutating package globals which raced TestDeepL_BuildRequest). - infiniflow#15644 Switch no longer matches empty condition: evaluateGroup empty-clauses short-circuit now returns false (was true) so an "and" condition with no clauses falls through to the next condition or end_cpn_ids instead of routing to the empty group's "to" target. Mirrors the all([]) is True fix. Group 4 - API ports - infiniflow#15374 session_id bind to path agent_id: Go DAO already enforces WHERE id = ? AND dialog_id = ? (stronger than the Python post-fetch check). Added 3 IDOR regression tests at the service level (Get/Get mismatch/Delete) confirming the binding holds. Total: 32 new tests across 4 new test files. All agent/tool and agent/component tests pass (320 + 331). All new service IDOR tests pass (3/3). The one failing test in agent/component (TestAgent_ReActExhaustsSteps) is a pre-existing flaky test that also fails on the baseline without my changes. Refs: .claude/plans/review-and-port-py-agent-changes.md Refs: infiniflow#15609 infiniflow#15436 infiniflow#16363 infiniflow#15644 infiniflow#15374 Apply unstaged agent-go-port prep work docker/.env - switch API_PROXY_SCHEME from python to go (Go server is the default) - enable SANDBOX_ENABLED=1 and extend COMPOSE_PROFILES with ragflow-go web/CLAUDE.md - document frontend agent conventions: CSS/flex layout debugging, scope boundaries, i18n language files, query-key factory pattern, request layering (hook -> service -> next-request), shared UI lock, utility libs (dayjs, ahooks, lodash) web/.agents/skills/tanstack-query-best-practices/ - remove the full tanstack-query-best-practices skill set (SKILL.md + 21 rule files, 1,535 lines total) Lefthook pre-commit was satisfied after stripping two pre-existing trailing-whitespace lines from docker/.env comments. chore(hooks): enable auto-fix for staged file checks Convert lefthook pre-commit to B-mode (check + auto-fix in place) for the four fixable jobs: - end-of-file-fixer, trailing-whitespace, mixed-line-ending: these wrap tools/hooks/check_files.py, which gains a --fix mode that rewrites staged files in place. Lefthook re-stages the fixes via stage_fixed: true, so the next commit naturally includes the cleanup. The user no longer has to manually strip whitespace, append newlines, or normalize line endings. - web-eslint: ESLint --fix is enabled; safe auto-fixes are applied, warnings still surface. trailing-whitespace now uses a regex ([ \t]+(?=\r?\n|$)) so it correctly detects/strips whitespace before a line terminator and preserves CRLF when only stripping whitespace. A previous splitlines-based rstrip pass would silently miss whitespace-before-newline. Checks that only validate (json, yaml) or detect states that need human review (case-conflict, merge-conflict, broken symlinks) remain check-only; their --fix flag is accepted but a no-op. ruff check/format, gofmt, and web-prettier already auto-fixed in the previous config and were left unchanged.
) Mirrors 14 merged upstream PRs into the Go agent port. PRs ported: - #15609 ExeSQL SSRF guard + DNS pin - #15436 HTTP timeout on external API tools - #16363 be_output restore + DeepL error path - #15644 switch no longer matches empty condition - #15374 session_id bind to path agent_id (DAO idor guard) - #16169 sandbox artifact ownership gate - #15457 tenant ownership on agentbots - #15145 rerun agent document access check - #15446 thinking switch (component portion; provider policy lives in internal/llm) - #15426 Invoke URL/proxy SSRF + DNS pin + no-redirects - #15238 agentbot thinking-logs beta endpoint - #14589 UserFillUp SSE event propagation - #14890 anonymous webhook opt-in - #15068 PipelineChunker new component (text/file_ref/parser_id dispatch; file-format extraction is a follow-up) 40 files, +2355 / -58 lines. 33 new tests, all targeted package suites pass (1721 + 4 skipped); 1 pre-existing flaky test unrelated.
…sion/user + input/output to Langfuse for agent runs Rebuilt on current upstream/main after force-push; cherry-pick of the 7 PR-original commits collapsed into a single net diff to avoid conflicts with intervening commits pulled in by repeated merges of upstream/main. Original PR work (commits dropped during rebuild because their content already lives on upstream/main or was a merge of upstream/main): c7339ae Enhance LLMService with token usage reporting 0266cf0 Implement token usage tracking and Langfuse integration ab2b267 Include session_id in run_kwargs 8bf937c Implement token usage tracking in chat model c955988 Enhance token tracking with context variables and functions 3e88ed5 fix(agent): address CodeRabbit review on token usage tracking 74b8c8c fix(agent): address CodeRabbit follow-up review Forced-upstream duplicates dropped (already merged to main): 70546ea (infiniflow#16396), 5b09910 (infiniflow#16403), 5d7f0fd (infiniflow#16405), 730f33b (infiniflow#16407), a06343e (infiniflow#16408), f90be41 (infiniflow#16410), c4fe68e (infiniflow#16409), d4a0e71 (infiniflow#14773), ef42fd7 (infiniflow#15436), ab1015d (infiniflow#16363), db188cc (infiniflow#15446), 56ece68 (infiniflow#15609), 2589b6e (infiniflow#15644), 74c2944 (infiniflow#15374), 78832ff (infiniflow#14985), bf18b59 (infiniflow#15457), 6c87225 (infiniflow#14890), e16d1a0 (infiniflow#15426), 4712fcb (infiniflow#16169), 0536233 (infiniflow#14589), 08c807a (infiniflow#15145) Plus 18 'Merge branch main into main' commits dropped (polluted topology).
…sion/user + input/output to Langfuse for agent runs Rebuilt on current upstream/main after force-push; cherry-pick of the 7 PR-original commits collapsed into a single net diff to avoid conflicts with intervening commits pulled in by repeated merges of upstream/main. Original PR work (commits dropped during rebuild because their content already lives on upstream/main or was a merge of upstream/main): c7339ae Enhance LLMService with token usage reporting 0266cf0 Implement token usage tracking and Langfuse integration ab2b267 Include session_id in run_kwargs 8bf937c Implement token usage tracking in chat model c955988 Enhance token tracking with context variables and functions 3e88ed5 fix(agent): address CodeRabbit review on token usage tracking 74b8c8c fix(agent): address CodeRabbit follow-up review Forced-upstream duplicates dropped (already merged to main): 70546ea (infiniflow#16396), 5b09910 (infiniflow#16403), 5d7f0fd (infiniflow#16405), 730f33b (infiniflow#16407), a06343e (infiniflow#16408), f90be41 (infiniflow#16410), c4fe68e (infiniflow#16409), d4a0e71 (infiniflow#14773), ef42fd7 (infiniflow#15436), ab1015d (infiniflow#16363), db188cc (infiniflow#15446), 56ece68 (infiniflow#15609), 2589b6e (infiniflow#15644), 74c2944 (infiniflow#15374), 78832ff (infiniflow#14985), bf18b59 (infiniflow#15457), 6c87225 (infiniflow#14890), e16d1a0 (infiniflow#15426), 4712fcb (infiniflow#16169), 0536233 (infiniflow#14589), 08c807a (infiniflow#15145) Plus 18 'Merge branch main into main' commits dropped (polluted topology). Co-authored-by: yzc <yuzhichang@gmail.com>
…iniflow#16455) Mirrors 14 merged upstream PRs into the Go agent port. PRs ported: - infiniflow#15609 ExeSQL SSRF guard + DNS pin - infiniflow#15436 HTTP timeout on external API tools - infiniflow#16363 be_output restore + DeepL error path - infiniflow#15644 switch no longer matches empty condition - infiniflow#15374 session_id bind to path agent_id (DAO idor guard) - infiniflow#16169 sandbox artifact ownership gate - infiniflow#15457 tenant ownership on agentbots - infiniflow#15145 rerun agent document access check - infiniflow#15446 thinking switch (component portion; provider policy lives in internal/llm) - infiniflow#15426 Invoke URL/proxy SSRF + DNS pin + no-redirects - infiniflow#15238 agentbot thinking-logs beta endpoint - infiniflow#14589 UserFillUp SSE event propagation - infiniflow#14890 anonymous webhook opt-in - infiniflow#15068 PipelineChunker new component (text/file_ref/parser_id dispatch; file-format extraction is a follow-up) 40 files, +2355 / -58 lines. 33 new tests, all targeted package suites pass (1721 + 4 skipped); 1 pre-existing flaky test unrelated.
Summary
#16332 fixed the missing
returnin DeepL's except branch, butComponentBase.be_outputwas removed during the agent refactor (#9113) while several components still call it. DeepL (and other tools) would raiseAttributeErrorbefore any error message could be returned.ComponentBase.be_outputaspd.DataFrame([{"content": v}])(same as pre-refactor behavior)_runreturns the**Error**:message when translation failsRelated to #16329
Test plan
test_run_returns_error_on_translation_failuretest_deepl.pycheck() tests still pass