nanobot/nanobot/session/model_selection.py

21 lines
758 B
Python

"""Session-scoped model preset metadata."""
from __future__ import annotations
from collections.abc import Mapping
# Session.metadata is public SDK data, so internal selectors use a reserved namespace.
SESSION_MODEL_PRESET_METADATA_KEY = "_nanobot_model_preset"
def model_preset_from_metadata(metadata: object) -> str | None:
"""Read the canonical session preset name from persisted metadata."""
if not isinstance(metadata, Mapping):
return None
if SESSION_MODEL_PRESET_METADATA_KEY not in metadata:
return None
value = metadata[SESSION_MODEL_PRESET_METADATA_KEY]
if not isinstance(value, str) or not value.strip():
raise ValueError("session model preset must be a non-empty string")
return value.strip()