Skip to content

refactor: pass session as parameter in knowledge_retrieval_inner_service and agent_app_feature_service#37639

Merged
asukaminato0721 merged 3 commits into
langgenius:mainfrom
EvanYao826:refactor/db-session-parameter-37403
Jun 24, 2026
Merged

refactor: pass session as parameter in knowledge_retrieval_inner_service and agent_app_feature_service#37639
asukaminato0721 merged 3 commits into
langgenius:mainfrom
EvanYao826:refactor/db-session-parameter-37403

Conversation

@EvanYao826

@EvanYao826 EvanYao826 commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Migrate db.session usage to explicit session parameter in two service files, following the pattern established in #37402.

Changes

api/services/knowledge_retrieval_inner_service.py:

  • Added session: scoped_session | None = None to retrieve()
  • Added session: scoped_session to _validate_caller_app() and _validate_datasets()
  • Replaced db.session with session in validation methods
  • Updated controller caller to pass session=db.session explicitly

api/services/agent_app_feature_service.py:

  • Added session: scoped_session | None = None to update_features()
  • Replaced db.session.add/flush/commit with session.add/flush/commit
  • Updated controller caller to pass session=db.session explicitly

Pattern

# Before
def retrieve(self, request: ...):
    app = db.session.scalar(select(App).where(...))

# After
def retrieve(self, request: ..., session: scoped_session | None = None):
    session = session or db.session
    app = session.scalar(select(App).where(...))

This makes the session dependency explicit while maintaining backward compatibility via the default None fallback.

Related

…ice and agent_app_feature_service (langgenius#37403)

Migrate db.session usage to explicit session parameter in two service files,
following the pattern established in langgenius#37402.

### Changes

- `knowledge_retrieval_inner_service.py`:
  - Added `session: scoped_session | None = None` to `retrieve()`
  - Added `session: scoped_session` to `_validate_caller_app()` and `_validate_datasets()`
  - Replaced `db.session` with `session` in validation methods

- `agent_app_feature_service.py`:
  - Added `session: scoped_session | None = None` to `update_features()`
  - Replaced `db.session.add/flush/commit` with `session.add/flush/commit`

- Controller callers updated to pass `session=db.session` explicitly.

Closes langgenius#37403
@EvanYao826 EvanYao826 requested a review from QuantumGhost as a code owner June 18, 2026 11:48
@dosubot dosubot Bot added size:M This PR changes 30-99 lines, ignoring generated files. refactor labels Jun 18, 2026
@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Pyrefly Type Coverage

Metric Base PR Delta
Type coverage 50.84% 50.85% +0.01%
Strict coverage 50.35% 50.36% +0.01%
Typed symbols 29,966 29,967 +1
Untyped symbols 29,254 29,248 -6
Modules 2914 2914 0

Comment thread api/services/agent_app_feature_service.py Outdated
Comment thread api/services/agent_app_feature_service.py Outdated
Comment thread api/services/knowledge_retrieval_inner_service.py Outdated
Comment thread api/services/knowledge_retrieval_inner_service.py Outdated
@asukaminato0721 asukaminato0721 self-assigned this Jun 18, 2026
auto-merge was automatically disabled June 19, 2026 01:07

Head branch was pushed to by a user without write access

@EvanYao826

Copy link
Copy Markdown
Contributor Author

Thanks for the review @asukaminato0721! I've applied all four suggestions:

  • Made session a required parameter (scoped_session instead of scoped_session | None = None)
  • Removed the session = session or db.session fallback lines in both files

The callers already pass session=db.session explicitly, so no changes needed there.

@github-actions

github-actions Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-06-21 05:36:47.960388301 +0000
+++ /tmp/pyrefly_pr.txt	2026-06-21 05:36:33.433322587 +0000
@@ -6885,6 +6885,18 @@
   --> tests/unit_tests/services/test_human_input_file_upload_service.py:55:20
 ERROR `in` is not supported between `Literal['form_id=test-form']` and `None` [not-iterable]
    --> tests/unit_tests/services/test_human_input_service.py:547:12
+ERROR Missing argument `session` in function `services.knowledge_retrieval_inner_service.InnerKnowledgeRetrievalService.retrieve` [missing-argument]
+   --> tests/unit_tests/services/test_knowledge_retrieval_inner_service.py:104:61
+ERROR Missing argument `session` in function `services.knowledge_retrieval_inner_service.InnerKnowledgeRetrievalService.retrieve` [missing-argument]
+   --> tests/unit_tests/services/test_knowledge_retrieval_inner_service.py:175:50
+ERROR Missing argument `session` in function `services.knowledge_retrieval_inner_service.InnerKnowledgeRetrievalService.retrieve` [missing-argument]
+   --> tests/unit_tests/services/test_knowledge_retrieval_inner_service.py:192:54
+ERROR Missing argument `session` in function `services.knowledge_retrieval_inner_service.InnerKnowledgeRetrievalService.retrieve` [missing-argument]
+   --> tests/unit_tests/services/test_knowledge_retrieval_inner_service.py:199:54
+ERROR Missing argument `session` in function `services.knowledge_retrieval_inner_service.InnerKnowledgeRetrievalService.retrieve` [missing-argument]
+   --> tests/unit_tests/services/test_knowledge_retrieval_inner_service.py:207:54
+ERROR Missing argument `session` in function `services.knowledge_retrieval_inner_service.InnerKnowledgeRetrievalService.retrieve` [missing-argument]
+   --> tests/unit_tests/services/test_knowledge_retrieval_inner_service.py:218:54
 ERROR Object of class `ModelLoadBalancingService` has no attribute `provider_manager` [missing-attribute]
   --> tests/unit_tests/services/test_model_load_balancing_service.py:76:5
 ERROR Object of class `ModelLoadBalancingService` has no attribute `model_assembly` [missing-attribute]

@dosubot dosubot Bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size:M This PR changes 30-99 lines, ignoring generated files. labels Jun 21, 2026
@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label Jun 21, 2026
@asukaminato0721

Copy link
Copy Markdown
Contributor

=========================== short test summary info ============================
FAILED api/tests/unit_tests/services/test_knowledge_retrieval_inner_service.py::TestInnerKnowledgeRetrievalService::test_retrieve_maps_multiple_request_and_skips_enable_api_check - AttributeError: <module 'services.knowledge_retrieval_inner_service' from '/home/runner/work/dify/dify/api/services/knowledge_retrieval_inner_service.py'> does not have the attribute 'db'
FAILED api/tests/unit_tests/services/test_knowledge_retrieval_inner_service.py::TestInnerKnowledgeRetrievalService::test_retrieve_maps_single_request - AttributeError: <module 'services.knowledge_retrieval_inner_service' from '/home/runner/work/dify/dify/api/services/knowledge_retrieval_inner_service.py'> does not have the attribute 'db'
FAILED api/tests/unit_tests/services/test_knowledge_retrieval_inner_service.py::TestInnerKnowledgeRetrievalService::test_retrieve_raises_when_app_missing - AttributeError: <module 'services.knowledge_retrieval_inner_service' from '/home/runner/work/dify/dify/api/services/knowledge_retrieval_inner_service.py'> does not have the attribute 'db'
FAILED api/tests/unit_tests/services/test_knowledge_retrieval_inner_service.py::TestInnerKnowledgeRetrievalService::test_retrieve_raises_when_app_belongs_to_other_tenant - AttributeError: <module 'services.knowledge_retrieval_inner_service' from '/home/runner/work/dify/dify/api/services/knowledge_retrieval_inner_service.py'> does not have the attribute 'db'
FAILED api/tests/unit_tests/services/test_knowledge_retrieval_inner_service.py::TestInnerKnowledgeRetrievalService::test_retrieve_raises_when_dataset_missing - AttributeError: <module 'services.knowledge_retrieval_inner_service' from '/home/runner/work/dify/dify/api/services/knowledge_retrieval_inner_service.py'> does not have the attribute 'db'
FAILED api/tests/unit_tests/services/test_knowledge_retrieval_inner_service.py::TestInnerKnowledgeRetrievalService::test_retrieve_raises_when_dataset_belongs_to_other_tenant - AttributeError: <module 'services.knowledge_retrieval_inner_service' from '/home/runner/work/dify/dify/api/services/knowledge_retrieval_inner_service.py'> does not have the attribute 'db'
===== 6 failed, 12541 passed, 4 skipped, 535 warnings in 225.20s (0:03:45) =====

Address review feedback from asukaminato0721:
- Remove '| None = None' from session parameter, make it required
- Remove 'session = session or db.session' fallback lines
- Callers already pass session=db.session explicitly
auto-merge was automatically disabled June 22, 2026 04:28

Head branch was pushed to by a user without write access

@EvanYao826 EvanYao826 force-pushed the refactor/db-session-parameter-37403 branch from 96f6aed to abbaa7b Compare June 22, 2026 04:28
@EvanYao826 EvanYao826 requested a review from laipz8200 as a code owner June 22, 2026 04:28
@dosubot dosubot Bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Jun 22, 2026
@EvanYao826

Copy link
Copy Markdown
Contributor Author

Thanks for the review @asukaminato0721! All 4 suggestions have been applied:

  1. agent_app_feature_service.py: session: scoped_session (removed | None = None)
  2. agent_app_feature_service.py: Removed session = session or db.session fallback
  3. knowledge_retrieval_inner_service.py: session: scoped_session (removed | None = None)
  4. knowledge_retrieval_inner_service.py: Removed session = session or db.session fallback

The session parameter is now required in both files, and the controller callers already pass session=db.session explicitly.

@EvanYao826

Copy link
Copy Markdown
Contributor Author

Hi @asukaminato0721, thanks for the review suggestions! I've addressed the session parameter style changes — in the follow-up PR #37793, I've switched to session: scoped_session (required, no default) for consistency with the pattern in #37402. The session = session or db.session fallback lines are also removed there.

Since this batch1 PR already has lgtm, I kept it as-is to avoid rebasing. The style unification is in batch2. Let me know if you'd like me to backport the changes here instead!

@asukaminato0721 asukaminato0721 added this pull request to the merge queue Jun 24, 2026
Merged via the queue into langgenius:main with commit 67a5eac Jun 24, 2026
32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer refactor size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants