from abc import ABC, abstractmethod
from typing import Dict, Any

class Provider(ABC):
    @abstractmethod
    def synthesize(self, prompt: str, schema: Dict[str, Any], model_config: Dict[str, Any]) -> str:
        """
        Takes a rendered text prompt, an expected JSON schema, and a model config.
        Must return the raw JSON string generated by the model.
        """
        pass
