# Conceptual Python Adapter Example class LLMProviderAdapter: def __init__(self, api_key): self.api_key = api_key self.base_url = "https://provider.example.com/api/v1" def _make_request(self, method, endpoint, json_data): headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"} response = requests.request(method, f"{self.base_url}{endpoint}", json=json_data, headers=headers) response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx) return response.json() def create_chat_completion(self, messages, model, max_tokens, temperature): raise NotImplementedError("Subclasses must implement this method") class OpenAIAdapter(LLMProviderAdapter): def create_chat_completion(self, messages, model, max_tokens, temperature): payload = { "model": model, "messages": messages, "max_tokens": max_tokens, "temperature": temperature, } try: response = self._make_request("POST", "/chat/completions", payload) # Transform OpenAI response to unified format if necessary return response except requests.exceptions.RequestException as e: # Map OpenAI specific errors to generic Fusion errors raise FusionError(f"OpenAI API error: {e}") from e class AnthropicAdapter(LLMProviderAdapter): def create_chat_completion(self, messages, model, max_tokens, temperature): # Anthropic API has different parameter names, e.g., 'max_tokens_to_sample' payload = { "model": model, "messages": messages, "max_tokens_to_sample": max_tokens, # Example of parameter mapping "temperature": temperature, } try: response = self._make_request("POST", "/v1/messages", payload) # Different endpoint # Transform Anthropic response to unified format return response except requests.exceptions.RequestException as e: raise FusionError(f"Anthropic API error: {e}") from e # In the main API gateway: # adapter = adapter_factory.get_adapter("openai", openai_api_key) # unified_response = adapter.create_chat_completion(...)