---
title: "Completion recipes"
manual: "LLM Foundation"
version: "main"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-llm:completion-recipes@main"
source: "Developer/FeatureServices/Completion.rst"
rendered: "2026-11-12T15:41:35+00:00"
---

# Completion recipes {#completion-recipes}

## CompletionService {#feature-services-completion}

**Purpose**: Text generation and completion.

### Use cases {#feature-services-completion-use-cases}

-   Content generation.
-   Rule generation (contexts extension).
-   Content summarization.
-   SEO meta generation.

### Key features {#feature-services-completion-features}

-   JSON response formatting (adapter-dependent native support,
    [ADR-128](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-128@main)).
-   Schema-validated structured output — a strict JSON-schema subset,
    provider-enforced, with one repair round-trip ([ADR-126](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-126@main)).
-   Markdown generation.
-   Factual mode (low creativity).
-   Creative mode (high creativity).
-   System prompt support.

### Example {#feature-services-completion-example}

**Example: Using CompletionService**

```php
use Netresearch\NrLlm\Service\Feature\CompletionService;
use Netresearch\NrLlm\Service\Option\ChatOptions;

$completion = $completionService->complete(
    prompt: 'Explain TYPO3 in simple terms',
    options: new ChatOptions(
        temperature: 0.3,
        maxTokens: 200,
        responseFormat: 'markdown',
    ),
);

echo $completion->content;
```

### Methods {#feature-services-completion-methods}

**CompletionService methods**

```php
// Standard completion
$response = $completionService->complete($prompt);

// JSON output
$data = $completionService->completeJson('List 5 colors as a JSON array');

// Markdown output
$markdown = $completionService->completeMarkdown('Write docs for this API');

// Factual (low creativity, high consistency)
$response = $completionService->completeFactual('What is the capital of France?');

// Creative (high creativity)
$response = $completionService->completeCreative('Write a haiku about coding');

// Structured: schema-validated JSON (strict subset, ADR-126); ->data is
// the payload, ->response the answering call, ->usage every attempt
$data = $completionService->completeStructured('Rate this text', [
    'type'       => 'object',
    'required'   => ['score', 'reason'],
    'properties' => [
        'score'  => ['type' => 'number'],
        'reason' => ['type' => 'string'],
    ],
])->data;
```
