Skip to content

refactor: make ParameterMapper generic on Content type#189

Merged
Kamilbenkirane merged 4 commits intomainfrom
refactor/generic-parameter-mapper
Feb 25, 2026
Merged

refactor: make ParameterMapper generic on Content type#189
Kamilbenkirane merged 4 commits intomainfrom
refactor/generic-parameter-mapper

Conversation

@Kamilbenkirane
Copy link
Copy Markdown
Member

Summary

Closes #186.

  • Make ParameterMapper[Content] and FieldMapper[Content] generic using PEP 695 syntax, replacing the Any type on parse_output() introduced in Move _transform_output from provider _parse_content to base _predict pipeline #142
  • Propagate the Content type parameter through the full mapper hierarchy: provider-level → protocol-level → modality-level → client files
  • Update parameter_mappers() return type on ModalityClient to list[ParameterMapper[Content]], restoring end-to-end type safety through _transform_output()
  • Zero runtime behavior changes — purely a typing improvement

Approach

Three categories of mapper changes:

  1. Provider-level shared mappers (generate_content/parameters.py): Made generic [Content] so modality-level subclasses can specialize
  2. Provider-level single-modality mappers: Specialized directly (TextContent, ImageContent, VideoContent, AudioContent, EmbeddingsContent)
  3. Modality-level wrappers: Specialize parent generics and update list type annotations

Test plan

  • All pre-commit hooks pass (ruff, mypy, bandit, tests)
  • uv run pytest tests/unit_tests/ -v — 478 tests pass
  • uv run mypy src/ — no type errors
  • Verify _transform_output type chain: mapper.parse_output(content, value) returns Content not Any

Replace Any with a Content type parameter on parse_output() using
PEP 695 syntax. Update parameter_mappers() return type on ModalityClient
to propagate the generic through _transform_output().
Add Content type parameter to all provider-level and protocol-level
ParameterMapper/FieldMapper subclasses. Shared mappers in
generate_content are generic [Content]; single-modality mappers
are specialized directly (TextContent, ImageContent, etc.).
…lients

Specialize parent generic mappers with modality content types and
update all parameter_mappers() return types and mapper list annotations
across text, images, videos, audio, and embeddings modalities.
Update test mappers and template scaffolding to use parameterized
ParameterMapper[Content] and FieldMapper[Content] types.
@claude
Copy link
Copy Markdown

claude bot commented Feb 25, 2026

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

@Kamilbenkirane Kamilbenkirane merged commit 0a94f5a into main Feb 25, 2026
11 checks passed
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.

Make ParameterMapper generic on Content type

1 participant