Skip to content

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

@Kamilbenkirane

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions