| 1 | """Convenience accessor for PE-set prompt strings. |
| 2 | |
| 3 | Usage:: |
| 4 | |
| 5 | from nanobot.prompts import prompts |
| 6 | |
| 7 | text = prompts.text("director.tool.get_story.description") |
| 8 | msg = prompts.text("director.callback.merge_shot.completed", work_id=w, final_output=o) |
| 9 | |
| 10 | Missing keys log a warning and return ``default`` (or ``""``). String templates |
| 11 | use ``str.format`` placeholders; formatting is applied only when kwargs are given. |
| 12 | """ |
| 13 | |
| 14 | from __future__ import annotations |
| 15 | |
| 16 | import logging |
| 17 | |
| 18 | from nanobot.prompts.manager import PEManager |
| 19 | |
| 20 | logger = logging.getLogger(__name__) |
| 21 | |
| 22 | |
| 23 | class _Prompts: |
| 24 | def text(self, key: str, default: str | None = None, /, **fmt: object) -> str: |
| 25 | value = PEManager.instance().get_string(key) |
| 26 | if value is None: |
| 27 | if default is not None: |
| 28 | value = default |
| 29 | else: |
| 30 | logger.warning("Missing PE prompt key: %s", key) |
| 31 | return "" |
| 32 | if fmt: |
| 33 | try: |
| 34 | return value.format(**fmt) |
| 35 | except (KeyError, IndexError, ValueError) as exc: |
| 36 | logger.warning("PE prompt format failed for key %s: %s", key, exc) |
| 37 | return value |
| 38 | |
| 39 | |
| 40 | prompts = _Prompts() |
| 41 |