Each provider has a set of adapters that handle its specific format requirements:
Request Adapters
Request adapters convert Polyglot’s unified request format to provider-specific HTTP requests:
namespace Cognesy\Polyglot\LLM\Drivers\OpenAI;
class OpenAIRequestAdapter implements ProviderRequestAdapter {
public function __construct(
protected LLMConfig $config,
protected CanMapRequestBody $bodyFormat
) { ... }
public function toHttpClientRequest(
array $messages,
string $model,
array $tools,
array|string $toolChoice,
array $responseFormat,
array $options,
Mode $mode
): HttpClientRequest { ... }
protected function toHeaders(): array { ... }
protected function toUrl(string $model = '', bool $stream = false): string { ... }
}
Message formatters handle the conversion of messages to provider-specific formats:
namespace Cognesy\Polyglot\LLM\Drivers\OpenAI;
class OpenAIMessageFormat implements CanMapMessages {
public function map(array $messages): array { ... }
protected function mapMessage(array $message): array { ... }
protected function toNativeToolCall(array $message): array { ... }
protected function toNativeToolResult(array $message): array { ... }
}
Body Formatters
Body formatters handle the conversion of request bodies to provider-specific formats:
namespace Cognesy\Polyglot\LLM\Drivers\OpenAI;
class OpenAIBodyFormat implements CanMapRequestBody {
public function __construct(
protected LLMConfig $config,
protected CanMapMessages $messageFormat
) { ... }
public function map(
array $messages,
string $model,
array $tools,
array|string $toolChoice,
array $responseFormat,
array $options,
Mode $mode
): array { ... }
private function applyMode(
array $request,
Mode $mode,
array $tools,
string|array $toolChoice,
array $responseFormat
): array { ... }
}
Response Adapters
Response adapters convert provider-specific responses to Polyglot’s unified format:
namespace Cognesy\Polyglot\LLM\Drivers\OpenAI;
class OpenAIResponseAdapter implements ProviderResponseAdapter {
public function __construct(
protected CanMapUsage $usageFormat
) { ... }
public function fromResponse(array $data): ?LLMResponse { ... }
public function fromStreamResponse(array $data): ?PartialLLMResponse { ... }
public function fromStreamData(string $data): string|bool { ... }
protected function makeToolCalls(array $data): ToolCalls { ... }
protected function makeContent(array $data): string { ... }
protected function makeContentDelta(array $data): string { ... }
protected function makeToolId(array $data): string { ... }
protected function makeToolNameDelta(array $data): string { ... }
protected function makeToolArgsDelta(array $data): string { ... }
}
Usage formatters extract token usage information from provider responses:
namespace Cognesy\Polyglot\LLM\Drivers\OpenAI;
class OpenAIUsageFormat implements CanMapUsage {
public function fromData(array $data): Usage { ... }
}