📄 loader.py 3,818 bytes Apr 22, 2026 📋 Raw

"""Style Loader — Load JSON style examples for few-shot prompting.

Loads manual style examples from shared/project-docs/blog/style-examples/
"""

import json
import logging
from pathlib import Path
from typing import Dict, Any, Optional, List

logger = logging.getLogger(name)

Path to style examples directory

STYLE_EXAMPLES_DIR = Path("/home/hoffmann_admin/.openclaw/workspace/shared/project-docs/blog/style-examples")

class StyleExample:
"""Represents a style example for few-shot prompting."""

def __init__(self, data: Dict[str, Any]):
    self.slug = data.get("slug", "")
    self.title = data.get("title", "")
    self.excerpt = data.get("excerpt", "")
    self.structure = data.get("structure", {})
    self.voice_markers = data.get("voice_markers", {})

def to_prompt_context(self) -> str:
    """Convert to prompt-friendly context."""
    sections = [
        f"Example: {self.title}",
        f"Excerpt: {self.excerpt}",
        "",
        "Structure breakdown:",
    ]

    if self.structure:
        for key, value in self.structure.items():
            if isinstance(value, dict) and "content" in value:
                sections.append(f"  {key}: {value['content'][:100]}...")
            else:
                sections.append(f"  {key}: {str(value)[:100]}")

    if self.voice_markers:
        sections.append("")
        sections.append("Voice markers:")
        for key, value in self.voice_markers.items():
            if isinstance(value, list):
                sections.append(f"  {key}: {', '.join(str(v) for v in value[:3])}")
            else:
                sections.append(f"  {key}: {value}")

    return "\n".join(sections)

class StyleLoader:
"""Loads and caches style examples."""

def __init__(self):
    self.examples: Dict[str, StyleExample] = {}
    self._load_examples()

def _load_examples(self):
    """Load all JSON examples from style-examples directory."""
    if not STYLE_EXAMPLES_DIR.exists():
        logger.warning(f"Style examples directory not found: {STYLE_EXAMPLES_DIR}")
        return

    for json_file in STYLE_EXAMPLES_DIR.glob("*.json"):
        try:
            with open(json_file, 'r') as f:
                data = json.load(f)
                example = StyleExample(data)
                self.examples[example.slug] = example
                logger.info(f"Loaded style example: {example.slug}")
        except Exception as e:
            logger.error(f"Failed to load style example {json_file}: {e}")

def get(self, slug: str) -> Optional[StyleExample]:
    """Get a style example by slug."""
    return self.examples.get(slug)

def list_available(self) -> List[Dict[str, str]]:
    """List available style examples."""
    return [
        {"slug": slug, "title": ex.title}
        for slug, ex in self.examples.items()
    ]

def get_prompt_context(self, slug: str) -> str:
    """Get prompt context for a style example."""
    example = self.get(slug)
    if example:
        return example.to_prompt_context()
    return ""

Global loader instance

style_loader = StyleLoader()

def get_style_example(slug: str) -> Optional[StyleExample]:
"""Convenience function to get a style example."""
return style_loader.get(slug)

def list_style_examples() -> List[Dict[str, str]]:
"""Convenience function to list available examples."""
return style_loader.list_available()

def get_style_prompt_context(slug: str) -> str:
"""Get style example as prompt context."""
return style_loader.get_prompt_context(slug)