fix: accept scalar knowledge resource values#3069
Conversation
There was a problem hiding this comment.
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_dictto accept scalar inputs and normalizespace_nametostr. - Add a default
namewhen 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") |
| 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.""" |
| ("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 |
|
LGTM. Clean, backward-compatible fix. One minor nit: docstring still says "from a dictionary" — consider updating. Good to merge. |
chenliang15405
left a comment
There was a problem hiding this comment.
LGTM. Clean, backward-compatible fix. One minor nit: docstring still says "from a dictionary" — consider updating. Good to merge.
|
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:
|
|
@wolfkill Please make code format |
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 toKnowledgeSpaceLoadResourceParameters.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.pyPYTHONPATH=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.pygit diff --check