Render a value as stable text for prompts.
(value: Any)
| 39 | return f"<unserializable {type(value).__name__}>" |
| 40 | |
| 41 | def _default_render_value(value: Any) -> str: |
| 42 | """Render a value as stable text for prompts.""" |
| 43 | if isinstance(value, MediaAsset): |
| 44 | return value.prompt_summary() |
| 45 | if isinstance(value, MediaMessageBlock): |
| 46 | return value.tag |
| 47 | if isinstance(value, TextMessageBlock): |
| 48 | return value.text |
| 49 | try: |
| 50 | return media_value_to_prompt_text(value) |
| 51 | except Exception: |
| 52 | pass |
| 53 | value = _coerce_to_basic_types(value) |
| 54 | if isinstance(value, str): |
| 55 | return value |
| 56 | if isinstance(value, bytes): |
| 57 | return value.decode("utf-8", errors="replace") |
| 58 | if isinstance(value, set): |
| 59 | value = sorted(value, key=str) |
| 60 | try: |
| 61 | return json.dumps( |
| 62 | value, |
| 63 | ensure_ascii=False, |
| 64 | sort_keys=True, |
| 65 | indent=2, |
| 66 | default=_json_default, |
| 67 | ).rstrip() |
| 68 | except Exception: |
| 69 | return str(value) |
| 70 | |
| 71 | class MessageFormatter(ABC): |
| 72 | """Base interface for message parsing and rendering.""" |
no test coverage detected