> ## Documentation Index
> Fetch the complete documentation index at: https://icrl.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom LLM Providers

> Implement your own provider for Python or TypeScript

## Python Provider Contract

Implement:

```python theme={null}
async def complete(messages: list[Message]) -> str:
    ...
```

`Message` has:

* `role: str`
* `content: str`

## TypeScript Provider Contract

Implement:

```ts theme={null}
interface LLMProvider {
  complete(messages: Message[]): Promise<string>;
}
```

## Built-in Providers

Python:

* `LiteLLMProvider`
* `AnthropicVertexProvider`

TypeScript:

* `OpenAIProvider`
* `AnthropicProvider`
* `AnthropicVertexProvider`

## Common Adapter Pattern

1. Map internal message format to SDK format.
2. Handle system prompt semantics for provider.
3. Return plain text string.
4. Keep token/timeouts/retries in provider layer.
