Skip to content

Consolidate trivial parameter mapper wrappers across modalities #215

@Kamilbenkirane

Description

@Kamilbenkirane

Problem

~75 trivial parameter mapper wrapper classes are duplicated across providers. Each wrapper exists solely to set name = SomeParameter.SOMETHING on a base mapper class. For example, TemperatureMapper, MaxTokensMapper, OutputSchemaMapper, and ToolsMapper are defined identically in deepseek, moonshot, groq, huggingface (ChatCompletions) and openai, xai, openresponses (OpenResponses).

Proposed Solution

Define wrapper classes once per protocol, providers reference the shared list. Zero pattern changes.

Before — same file repeated N times per protocol:

# modalities/text/providers/deepseek/parameters.py (one of many copies)
class TemperatureMapper(_TemperatureMapper):
    name = TextParameter.TEMPERATURE
class MaxTokensMapper(_MaxTokensMapper):
    name = TextParameter.MAX_TOKENS
# ...
DEEPSEEK_PARAMETER_MAPPERS = [TemperatureMapper(), MaxTokensMapper(), ...]

After — defined once, referenced everywhere:

# Shared canonical source (e.g. providers/chatcompletions/parameters.py)
class TemperatureMapper(_TemperatureMapper):
    name = TextParameter.TEMPERATURE
# ...
CHATCOMPLETIONS_PARAMETER_MAPPERS = [TemperatureMapper(), MaxTokensMapper(), ...]
# Trivial providers — just reference the shared list
DEEPSEEK_PARAMETER_MAPPERS = CHATCOMPLETIONS_PARAMETER_MAPPERS
# Custom providers — filter + extend
GROQ_PARAMETER_MAPPERS = [
    m for m in CHATCOMPLETIONS_PARAMETER_MAPPERS if m.name != TextParameter.TOOLS
] + [GroqToolsMapper()]

Scope

Modality Providers affected Est. LOC saved
Text (ChatCompletions) deepseek, moonshot, groq, huggingface, mistral ~200
Text (OpenResponses) openai, xai ~100
Audio elevenlabs, openai, gradium ~40
Videos byteplus, google, xai ~50
Images openai, xai, byteplus, google ~30
Embeddings google ~5

Providers with custom logic (Anthropic, Cohere, Google text) keep their own files — only trivial wrappers are consolidated.

Validation

  • Mappers are stateless — no instance state, no __init__, no self.* writes
  • No isinstance or class identity checks on mappers anywhere in the codebase
  • Same mapper instances are safe to share across providers

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions