Skip to content

fix: accept scalar knowledge resource values#3069

Open
wolfkill wants to merge 6 commits into
eosphoros-ai:mainfrom
wolfkill:fix/knowledge-resource-scalar-value
Open

fix: accept scalar knowledge resource values#3069
wolfkill wants to merge 6 commits into
eosphoros-ai:mainfrom
wolfkill:fix/knowledge-resource-scalar-value

Conversation

@wolfkill

Copy link
Copy Markdown
Contributor

Description

Fixes #2609.

The AWEL Agent Resource Knowledge selector can persist a knowledge space ID as a JSON scalar value, for example "2". During resource construction that value is decoded to an integer and passed to KnowledgeSpaceLoadResourceParameters.from_dict, which expected a dict and failed with 'int' object has no attribute 'copy'.

This change makes the knowledge resource parameter adapter accept scalar space values as well as legacy {value: ...} payloads, converts the selected space value to a string, and supplies a safe default resource name when the payload does not include one.

Testing

  • PYTHONPATH=packages/dbgpt-core/src:packages/dbgpt-app/src:packages/dbgpt-serve/src:packages/dbgpt-ext/src .venv/bin/python -m pytest packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py -q
  • .venv/bin/ruff check packages/dbgpt-serve/src/dbgpt_serve/agent/resource/knowledge.py packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py
  • .venv/bin/ruff format --check packages/dbgpt-serve/src/dbgpt_serve/agent/resource/knowledge.py packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py
  • PYTHONPATH=packages/dbgpt-core/src:packages/dbgpt-app/src:packages/dbgpt-serve/src:packages/dbgpt-ext/src .venv/bin/python -m compileall -q packages/dbgpt-serve/src/dbgpt_serve/agent/resource/knowledge.py packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py
  • git diff --check

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes AWEL knowledge resource construction when the persisted “knowledge space” selector value is a JSON scalar (e.g., 2 / "2"), by making KnowledgeSpaceLoadResourceParameters.from_dict accept non-dict payloads and normalizing the space_name value.

Changes:

  • Allow KnowledgeSpaceLoadResourceParameters.from_dict to accept scalar inputs and normalize space_name to str.
  • Add a default name when missing, and support legacy { "value": ... } payloads.
  • Add parameterized tests covering scalar and legacy payload shapes.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
packages/dbgpt-serve/src/dbgpt_serve/agent/resource/knowledge.py Makes the knowledge resource parameter adapter accept scalar inputs and normalizes defaults.
packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py Adds tests for scalar and legacy payload parsing for space_name.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

copied_data = data.copy()
else:
copied_data = {"space_name": data}
copied_data.setdefault("name", "knowledge")
Comment on lines +60 to +64
copied_data.setdefault("name", "knowledge")
if "space_name" not in copied_data and "value" in copied_data:
copied_data["space_name"] = copied_data.pop("value")
if copied_data.get("space_name") is not None:
copied_data["space_name"] = str(copied_data["space_name"])
cls, data: dict, ignore_extra_fields: bool = True
cls, data: Any, ignore_extra_fields: bool = True
) -> "KnowledgeSpaceLoadResourceParameters":
"""Create a new instance from a dictionary."""
Comment on lines +7 to +21
("data", "expected_space_name"),
[
(2, "2"),
("2", "2"),
({"value": 2}, "2"),
({"value": "space_name"}, "space_name"),
({"space_name": "space_name"}, "space_name"),
],
)
def test_knowledge_resource_parameters_accept_scalar_space_values(
data, expected_space_name
):
params = KnowledgeSpaceLoadResourceParameters.from_dict(data)

assert params.space_name == expected_space_name
@chenliang15405

Copy link
Copy Markdown
Collaborator

LGTM. Clean, backward-compatible fix. One minor nit: docstring still says "from a dictionary" — consider updating. Good to merge.

chenliang15405
chenliang15405 previously approved these changes May 21, 2026

@chenliang15405 chenliang15405 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Clean, backward-compatible fix. One minor nit: docstring still says "from a dictionary" — consider updating. Good to merge.

@wolfkill

Copy link
Copy Markdown
Contributor Author

Updated the docstring in 9907128 so it no longer describes the input as only dict/dictionary-based; it now reflects the supported mapping, legacy value, and scalar space input forms.

Verification:

  • PYTHONPATH=packages/dbgpt-core/src:packages/dbgpt-serve/src .venv/bin/python -m pytest packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py -q
  • .venv/bin/python -m ruff check packages/dbgpt-serve/src/dbgpt_serve/agent/resource/knowledge.py packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py
  • .venv/bin/python -m ruff format --check packages/dbgpt-serve/src/dbgpt_serve/agent/resource/knowledge.py packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py
  • .venv/bin/python -m compileall -q packages/dbgpt-serve/src/dbgpt_serve/agent/resource/knowledge.py packages/dbgpt-serve/src/dbgpt_serve/agent/resource/tests/test_knowledge_resource.py
  • git diff --check

@chenliang15405

Copy link
Copy Markdown
Collaborator

@wolfkill Please make code format

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix Bug fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] [Awel] Awel Agent Resource Knowledge node not work

3 participants