Spaces:
Sleeping
Sleeping
| """Formatting utilities for the frontend.""" | |
| from datetime import datetime, timedelta | |
| def format_relative_timestamp(iso_timestamp: str) -> str: | |
| """ | |
| Format an ISO timestamp into a human-readable relative string. | |
| Args: | |
| iso_timestamp: ISO format timestamp string from Supabase | |
| Returns: | |
| Formatted string like: | |
| - "Today, 9:00 AM" | |
| - "Yesterday, 10:00 PM" | |
| - "Nov. 12, 2:50 PM" | |
| """ | |
| try: | |
| # Parse ISO timestamp | |
| if iso_timestamp.endswith('Z'): | |
| dt = datetime.fromisoformat(iso_timestamp.replace('Z', '+00:00')) | |
| else: | |
| dt = datetime.fromisoformat(iso_timestamp) | |
| # Convert to local time if timezone-aware | |
| if dt.tzinfo is not None: | |
| dt = dt.astimezone() | |
| dt = dt.replace(tzinfo=None) | |
| now = datetime.now() | |
| today = now.date() | |
| yesterday = today - timedelta(days=1) | |
| # Format time portion (cross-platform: use %I and strip leading zero) | |
| time_str = dt.strftime("%I:%M %p").lstrip('0') | |
| # Determine date portion | |
| if dt.date() == today: | |
| return f"Today, {time_str}" | |
| elif dt.date() == yesterday: | |
| return f"Yesterday, {time_str}" | |
| else: | |
| # Format as "Nov. 12, 2:50 PM" | |
| month_abbr = dt.strftime("%b") | |
| day = dt.day | |
| return f"{month_abbr}. {day}, {time_str}" | |
| except Exception as e: | |
| print(f"Error formatting timestamp: {e}") | |
| return iso_timestamp[:16] if len(iso_timestamp) > 16 else iso_timestamp | |
| def format_standards_for_llm(standards: list) -> str: | |
| """ | |
| Format standards array for LLM consumption. | |
| Args: | |
| standards: List of dicts with 'code' and 'text' keys | |
| Returns: | |
| Formatted string: "code: text\ncode: text" | |
| """ | |
| if not standards: | |
| return "" | |
| lines = [] | |
| for standard in standards: | |
| code = standard.get('code', '') | |
| text = standard.get('text', '') | |
| lines.append(f"{code}: {text}") | |
| return "\n".join(lines) | |
| def format_standards_list(standards: list) -> list: | |
| """ | |
| Validate and return standards list. | |
| Args: | |
| standards: List of dicts with 'code' and 'text' keys | |
| Returns: | |
| The standards list (pass-through for now) | |
| """ | |
| return standards | |