Spaces:
Running
Running
| """Content block helpers for Anthropic-compatible payloads.""" | |
| from typing import Any | |
| def get_block_attr(block: Any, attr: str, default: Any = None) -> Any: | |
| """Get an attribute from a Pydantic model, lightweight object, or dict.""" | |
| if hasattr(block, attr): | |
| return getattr(block, attr) | |
| if isinstance(block, dict): | |
| return block.get(attr, default) | |
| return default | |
| def get_block_type(block: Any) -> str | None: | |
| """Return a content block type when present.""" | |
| return get_block_attr(block, "type") | |
| def extract_text_from_content(content: Any) -> str: | |
| """Extract concatenated text from message content.""" | |
| if isinstance(content, str): | |
| return content | |
| if isinstance(content, list): | |
| parts: list[str] = [] | |
| for block in content: | |
| text = get_block_attr(block, "text", "") | |
| if isinstance(text, str) and text: | |
| parts.append(text) | |
| return "".join(parts) | |
| return "" | |