---
title: "ADR-004: PSR-14 Event System"
manual: "TYPO3 LLM Extension"
version: "0.35"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-llm:adr-004@0.35"
source: "Adr/Adr004Psr14EventSystem.rst"
modified: "2026-09-16T22:09:16+00:00"
---

# ADR-004: PSR-14 Event System

-   *Status:* Superseded
-   *Date:* 2024-02
-   *Superseded:* 2026 by [ADR-026](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-026@0.35)
-   *Authors:* Netresearch DTT GmbH

> [!NOTE]
> The PSR-14 events described below (`BeforeRequestEvent` /
> `AfterResponseEvent`) were **never implemented** and no longer reflect
> the code — there is no `Classes/Event/` directory and
> `LlmServiceManager` dispatches no events. The extension points this ADR
> set out to provide (request modification, response processing, cost tracking,
> rate limiting) are delivered instead by the **provider middleware pipeline**
> ([ADR-026](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-026@0.35)): `FallbackMiddleware`, `BudgetMiddleware`,
> `UsageMiddleware` and `CacheMiddleware` wrap every provider call. New
> cross-cutting behaviour should be added as a middleware, not an event
> listener. The original decision is kept below for historical context.

## Context

Consumers need extension points for:

-   Logging and monitoring.
-   Request modification.
-   Response processing.
-   Cost tracking and rate limiting.

## Decision

Use **TYPO3's PSR-14 event system** with events:

-   `BeforeRequestEvent`: Modify requests before sending.
-   `AfterResponseEvent`: Process responses after receiving.

Events are dispatched by `LlmServiceManager` and provide:

-   Full context (messages, options, provider).
-   Mutable options (before request).
-   Response data (after response).
-   Timing information.

## Consequences

**Positive:**

-   ●● Follows TYPO3 conventions.
-   ●● Decoupled extension mechanism.
-   ● Multiple listeners without modification.
-   ● Testable event handlers.

**Negative:**

-   ◑ Event overhead on every request.
-   ◑ Listener ordering considerations.
-   ◑ Debugging event flow complexity.

**Net Score:** +6.5 (Strong positive impact - standard
TYPO3 integration with decoupled extensibility)
