Skip to content

Add SDC Agents community toolsets module#106

Open
twcook wants to merge 2 commits intogoogle:mainfrom
SemanticDataCharter:feat/sdc-agents-toolsets
Open

Add SDC Agents community toolsets module#106
twcook wants to merge 2 commits intogoogle:mainfrom
SemanticDataCharter:feat/sdc-agents-toolsets

Conversation

@twcook
Copy link
Copy Markdown

@twcook twcook commented Mar 23, 2026

Summary

Adds SDC Agents as a community integration module providing eight purpose-scoped BaseToolset implementations (32 tools) for semantic data governance within the ADK ecosystem.

What this adds

  • Re-export module (google.adk_community.sdc_agents): Thin wrapper over the sdc-agents PyPI package
  • Optional dependency: pip install google-adk-community[sdc-agents] (no impact on users who don't need it)
  • Demo agent: Full pipeline example using 5 of 8 toolsets
  • Tests: Import verification for all 8 toolsets

Toolsets (8 toolsets, 32 tools)

Toolset Purpose
CatalogToolset Discover and download published SDC4 schemas
IntrospectToolset Extract structure from SQL, CSV, JSON, MongoDB
MappingToolset Match columns to schema components
AssemblyToolset Compose data models from catalog components
GeneratorToolset Generate validated XML instances
ValidationToolset Validate and digitally sign artifacts
DistributionToolset Deliver RDF to graph databases
KnowledgeToolset Semantic search over domain documentation

Architecture

Zero code duplication. Re-exports from the PyPI sdc-agents package. No maintenance burden on ADK maintainers -- version updates happen via the PyPI dependency. All 218 upstream tests pass independently.

@google-cla
Copy link
Copy Markdown

google-cla Bot commented Mar 23, 2026

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@twcook
Copy link
Copy Markdown
Author

twcook commented Mar 23, 2026

@googlebot I signed it.

@twcook twcook force-pushed the feat/sdc-agents-toolsets branch from 6f788a8 to d541623 Compare March 23, 2026 14:11
Thin re-export wrapper over the sdc-agents PyPI package, providing
eight BaseToolset implementations (32 tools) for semantic data
governance through the google.adk_community namespace.

Includes:
- Re-export module at google.adk_community.sdc_agents
- Optional dependency: pip install google-adk-community[sdc-agents]
- Import verification tests
- Sample agent demo (CatalogToolset + IntrospectToolset)
@twcook twcook force-pushed the feat/sdc-agents-toolsets branch from d541623 to e478805 Compare March 23, 2026 14:19
- Bump sdc-agents dependency from >=4.2.0 to >=4.3.3
- Update toolset descriptions for 4.3.x improvements (catalog-first
  discovery, structured unmatched columns, mapping context persistence,
  sidecar metadata support)
- Enhance demo agent to show full pipeline (5 toolsets) instead of
  minimal 2-toolset example
@DeanChensj
Copy link
Copy Markdown
Collaborator

@gemini-cli /review

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 5, 2026

🤖 Hi @DeanChensj, I've received your request, and I'm working on it now! You can track my progress in the logs for more details.

Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Thanks for this contribution! The integration of SDC Agents as a community module looks solid.

The use of optional dependencies via pyproject.toml and the try...except in the package root correctly follows the project's pattern for community extensions.

I've left a few minor comments regarding configuration flexibility in the demo agent, but overall the implementation is clean and well-tested (for imports).

One thing to double-check: ensure that the sdc-agents package itself doesn't have any conflicting dependencies with the core google-adk package. Assuming the upstream tests pass as mentioned in the PR description, this should be fine.

Nice work on the comprehensive README and demo agent!

try:
from . import sdc_agents
except ImportError:
pass # Optional: pip install google-adk-community[sdc-agents]
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This try...except block correctly handles the optional dependency. However, for better discoverability and consistent error messaging, it's often helpful to include a message in the ImportError if a user tries to access sdc_agents directly but it's not installed. Currently, it just fails silently here but will fail with a standard ImportError if something else tries to use it. This is acceptable for a top-level __init__.py.

)

config = SDCAgentsConfig(
sdcstudio={
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hardcoding the base_url to https://sdcstudio.com might be restrictive if users need to point to a staging or local environment. Consider allowing this to be overridden via an environment variable as well, e.g., "${SDC_BASE_URL:-https://sdcstudio.com}".

Comment thread pyproject.toml
"pytest-asyncio>=1.2.0",
]
sdc-agents = [
"sdc-agents>=4.3.3",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The sdc-agents dependency is added as an optional extra. This is the correct approach for community toolsets to keep the core package lean. Ensure that sdc-agents versions are compatible with the supported Python versions of this project (3.11+ is indicated in the README).

from sdc_agents.toolsets.mapping import MappingToolset
from sdc_agents.toolsets.validation import ValidationToolset

__all__ = [
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The __all__ list is comprehensive and correctly matches the imports. Using __all__ is a best practice for public-facing modules to control the exported API.

cls = getattr(mod, name, None)
assert cls is not None, f"{name} not found in sdc_agents module"

def test_all_list_complete(self):
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This test ensures that all expected toolsets are present in the __all__ list and correctly exported. This is a good way to prevent accidental omissions during future updates.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants