Skip to content

Update templates for tools parameter and Layer 5 (modality+protocol) #216

Description

@Kamilbenkirane

Context

The feat/unified-tools-parameter PR (#191) introduced tool calling support across the codebase, including a new architectural layer: modalities/{modality}/protocols/{protocol}/ (Layer 5). Templates need to be updated to stay in sync.

Templates are enforced by unit tests (test_provider_api_templates.py), so keeping them current matters.

What needs updating

1. Modality parameters template — add ToolDefinition import

File: templates/modalities/{modality_slug}/parameters.py.template

The template shows commented # tools: list[ToolDefinition] but doesn't show the import. Add:

# from celeste.tools import ToolDefinition

2. Protocol parameters template — add ToolsMapper pattern

File: templates/protocols/{protocol_slug}/parameters.py.template

Has 3 patterns (simple, nested, response format) but no ToolsMapper pattern. Both chatcompletions/parameters.py and openresponses/parameters.py have ToolsMapper with dispatch logic. Add a PATTERN 4 showing ToolsMapper with TOOL_MAPPERS dispatch.

3. Create Layer 5 templates (modality+protocol)

New directory: templates/modalities/{modality_slug}/protocols/{protocol_slug}/

3 new files based on existing implementations at src/celeste/modalities/text/protocols/chatcompletions/:

  • __init__.py.template — re-exports {Protocol}{Modality}Client and {Protocol}{Modality}Stream
  • client.py.template — protocol text client base class combining protocol mixin + modality client, with generate(), analyze(), _init_request() (using serialize_messages()), _parse_tool_calls(), _stream_class()
  • parameters.py.template — wraps protocol-level mappers with name = {Modality}Parameter.X, exports {PROTOCOL}_PARAMETER_MAPPERS list

Reference implementations

  • src/celeste/modalities/text/protocols/chatcompletions/ (client.py, parameters.py)
  • src/celeste/modalities/text/protocols/openresponses/ (client.py, parameters.py)

Related issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions