ADR-007: Multi-Provider Strategy 

Status 

Accepted (2024-01)

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
# Services.yaml
Netresearch\NrLlm\Provider\OpenAiProvider:
  tags:
    - name: nr_llm.provider
      priority: 100

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

Provider selection:

  1. Explicit provider in the per-call options.
  2. Otherwise the active DB-backed default configuration's provider.
  3. 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, 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)