Introduction
What does it do?
nr-llm is the shared AI foundation for TYPO3. It lets administrators configure LLM providers once in the backend — and integrated AI-powered extension on the site uses them automatically.
For extension developers, it eliminates the need to build provider integrations, manage API keys, or implement caching and streaming. Add AI capabilities to your extension with three lines of dependency injection.
For administrators, it provides a backend module tree to manage all AI connections, encrypted API keys, and provider configurations — plus a dedicated AI Tasks module under AI where editors run prepared tasks and decide pending approvals, gated by explicit permissions. Switch from OpenAI to Anthropic without touching any extension code.
For agencies, it means consistent AI architecture across client projects, no vendor lock-in, and a local-first option via Ollama for data-sensitive environments.
The extension enables developers to:
- Access multiple AI providers through a single, consistent API.
- Switch providers transparently without code changes.
- Leverage specialized services for common AI tasks (translation, vision, embeddings).
- Cache responses to reduce API costs and improve performance.
- Stream responses for real-time user experiences.
- Store API keys securely as nr-vault identifiers (envelope encryption).
Supported providers
The Adapter catalogue lists every supported protocol, including Together, Fireworks, Perplexity and the separate decision adapters. Supported operations depend on the adapter and model. Select a discovered model and verify it with representative inputs rather than relying on a model-family name alone.
Key features
AI-powered wizards
Built-in wizards reduce manual setup to a minimum:
- Setup wizard guides first-time configuration in five steps (provider, connection test, model fetch, configuration, test prompt).
- Configuration wizard generates a complete LLM configuration from a plain-language description of your use case.
- Task wizard creates reusable one-shot prompt templates the same way.
- Model discovery fetches available models directly from the provider API.
See AI-powered wizards for details and screenshots.
Unified provider API
All providers implement a common interface, allowing you to:
- Switch between providers with a single configuration change.
- Test with different models without modifying application code.
- Implement provider fallbacks for increased reliability.
use Netresearch\NrLlm\Domain\ValueObject\ConfigurationIdentifier;
// Resolve the configuration created by an administrator.
$config = $configurationResolver->getActiveByIdentifier(
new ConfigurationIdentifier('blog-summarizer'),
);
$response = $llmManager->chatForConfiguration($messages, $config);
This keeps the selected configuration's provider, model, skills and fallback settings. See Step 5: Select a database configuration for dependency injection and access checks.
Specialized feature services
High-level services for common AI tasks:
CompletionService - Text generation with format control (JSON, Markdown) and creativity presets.
EmbeddingService - Text-to-vector conversion with caching and similarity calculations.
VisionService - Image analysis with specialized prompts for alt-text, titles, descriptions.
TranslationService - Language translation with formality control, domain-specific terminology, and glossaries.
Structured outputs
Schema-validated JSON from every provider:
complete takes a JSON schema from a named strict
subset, enforces it provider-natively where the provider can (OpenAI
json_, Gemini response, Ollama format, a forced
tool on Claude), validates the response strictly and repairs a mismatch
with one controlled round-trip. See ADR-126: A named JSON-Schema subset, enforced strict and ADR-128: Provider-native structured output.
Streaming support
Real-time response streaming for better user experience:
foreach ($llmManager->streamChat($messages) as $chunk) {
echo $chunk;
flush();
}
Tool/function calling
Execute custom functions based on AI decisions:
$response = $llmManager->chatWithTools($messages, $tools);
if ($response->hasToolCalls()) {
// Process tool calls
}
Intelligent caching
- Automatic response caching using TYPO3's caching framework.
- Deterministic embedding caching (24-hour default TTL).
- Configurable cache lifetimes per operation type.
Use cases
Content generation
- Generate product descriptions.
- Create meta descriptions and SEO content.
- Draft blog posts and articles.
- Summarize long-form content.
Translation
- Translate website content.
- Maintain consistent terminology with glossaries.
- Preserve formatting in technical documents.
Image processing
- Generate accessibility-compliant alt-text.
- Create SEO-optimized image titles.
- Analyze and categorize image content.
Search and discovery
- Semantic search using embeddings.
- Content similarity detection.
- Recommendation systems.
Chatbots and assistants
- Customer support chatbots.
- FAQ answering systems.
- Guided navigation assistants.
Requirements
- PHP: 8.2 or higher.
- TYPO3: v13.4 LTS or v14.3 LTS.
- HTTP client: PSR-18 compatible (e.g., guzzlehttp/guzzle ).
Provider requirements
To use specific providers, you need:
- OpenAI: API key from https://platform.openai.com.
- Anthropic Claude: API key from https://console.anthropic.com.
- Google Gemini: API key from https://aistudio.google.com.
- Ollama: Local installation from https://ollama.ai (no API key required).
- OpenRouter: API key from https://openrouter.ai.
- Mistral: API key from https://console.mistral.ai.
- Groq: API key from https://console.groq.com.
Credits
This extension is developed and maintained by:
- Netresearch DTT GmbH
- https://www.netresearch.de
Built with the assistance of modern AI development tools and following TYPO3 coding standards and best practices.