---
title: "ADR-007: Multi-Provider Strategy"
manual: "TYPO3 LLM Extension"
version: "0.35"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-llm:adr-007@0.35"
source: "Adr/Adr007MultiProviderStrategy.rst"
modified: "2026-09-16T22:09:16+00:00"
---

# ADR-007: Multi-Provider Strategy

-   *Status:* Accepted
-   *Date:* 2024-01
-   *Authors:* Netresearch DTT GmbH

## Context

Supporting multiple providers requires:

-   Dynamic provider registration.
-   Priority-based selection.
-   Configuration per provider.
-   Fallback mechanisms.

## Decision

Use **tagged service collection** with priority:

**Configuration/Services.yaml**

```yaml
# Services.yaml
Netresearch\NrLlm\Provider\OpenAiProvider:
  tags:
    - name: nr_llm.provider
      priority: 100

Netresearch\NrLlm\Provider\ClaudeProvider:
  tags:
    - name: nr_llm.provider
      priority: 90
```

> [!NOTE]
> The shipped providers no longer carry an explicit `tags:` entry — they
> self-register via the `#[AsLlmProvider]` attribute collected by
> `ProviderCompilerPass` ([ADR-022](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-022@0.35)). The `tags:` form
> above still works for third-party providers.

Provider selection:

1.  Explicit provider in the per-call options.
1.  Otherwise the active DB-backed default configuration's provider.
1.  Otherwise `getProvider(null)` **throws** a `ProviderException`.

There is deliberately **no** "first provider by priority" fallback: the
implicit default-provider fallback was removed in [ADR-034](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-034@0.35), so
provider selection is always explicit (per-call option or the active
configuration).

## Consequences

**Positive:**

-   ● Easy provider registration.
-   ● Clear priority system.
-   ●● Supports custom providers.
-   ● Automatic fallback.

**Negative:**

-   ◑ Priority conflicts possible.
-   ◑ All providers instantiated.
-   ◑ Configuration complexity.

**Net Score:** +5.5 (Strong positive impact - flexible
multi-provider support with minor overhead)
