# JSON Continuation Context Module

Ein Python-Modul zur Generierung von Kontextinformationen für abgeschnittene JSON-Strings, um AI-Modellen die Fortsetzung zu ermöglichen.

## Problem

Wenn eine AI-Antwort als JSON abgeschnitten wird (z.B. Token-Limit erreicht), muss die nächste Iteration wissen:
- **Wo** der JSON abgeschnitten wurde
- **Was** bereits generiert wurde  
- **Was** als nächstes geliefert werden soll

## Lösung: Drei Kontexte

### 1. Overlap Context
- Zeigt das **innerste Objekt/Array-Element**, das den Cut-Punkt enthält
- Wird verwendet, um den abgeschnittenen Teil mit dem neuen Teil zu **mergen**
- Exakt so wie im Original-String (für String-Matching beim Merge)

### 2. Hierarchy Context  
- Zeigt die **hierarchische Struktur** vom Root bis zum Cut-Punkt
- Mit **Budget-Logik**: Näher am Cut = vollständige Werte, weiter weg = `"..."` Platzhalter
- Gibt der AI den Kontext der gesamten JSON-Struktur

### 3. Complete Part (NEU)
- Der **vollständige, valide JSON** bis zum Cut-Punkt
- Alle offenen Strukturen werden geschlossen (`}`, `]`, `"`)
- Unvollständige Keys werden entfernt
- Kann direkt als valides JSON geparst werden

## Installation

```bash
# Keine externen Abhängigkeiten erforderlich
cp json_continuation.py /your/project/
```

## Modulkonstanten

```python
# Diese Konstanten können vor dem Import angepasst werden
BUDGET_LIMIT: int = 500      # Zeichen-Budget für Datenwerte
OVERLAP_MAX_CHARS: int = 1000  # Max Zeichen für Overlap Context
```

## Verwendung

### Grundlegende Verwendung

```python
from json_continuation import extract_continuation_contexts

truncated_json = '''{"customers": [
    {"id": 1, "name": "John"},
    {"id": 2, "name": "Jane", "email": "jane@exa'''

overlap, hierarchy, complete = extract_continuation_contexts(truncated_json)

print("Overlap Context:")
print(overlap)
# {"id": 2, "name": "Jane", "email": "jane@exa

print("Hierarchy Context:")
print(hierarchy)
# {"customers": [...structure with budget logic...]

print("Complete Part (valid JSON):")
print(complete)
# {"customers": [{"id": 1, "name": "John"}, {"id": 2, "name": "Jane", "email": "jane@exa"}]}

import json
parsed = json.loads(complete)  # ✓ Funktioniert!
```

### Mit Dictionary-Interface

```python
from json_continuation import get_contexts

contexts = get_contexts(truncated_json)

print(contexts['overlap'])
print(contexts['hierarchy'])
print(contexts['complete_part'])
```

### Konstanten anpassen

```python
import json_continuation

# Budget anpassen bevor Funktionen aufgerufen werden
json_continuation.BUDGET_LIMIT = 200
json_continuation.OVERLAP_MAX_CHARS = 500

overlap, hierarchy, complete = json_continuation.extract_continuation_contexts(truncated_json)
```

## Rückgabewerte

| Rückgabe | Typ | Beschreibung |
|----------|-----|--------------|
| `overlap` | str | Innerstes Element mit Cut-Punkt (für Merge) |
| `hierarchy` | str | Volle Struktur mit Budget-Logik |
| `complete_part` | str | Valides JSON mit geschlossenen Strukturen |

## Beispiele

### Verschachtelte Objekte

```python
json_str = '{"user": {"profile": {"bio": "Hello Wor'

overlap, hierarchy, complete = extract_continuation_contexts(json_str)

# Overlap: {"bio": "Hello Wor
# Hierarchy: {"user": {"profile": {"bio": "Hello Wor
# Complete: {"user": {"profile": {"bio": "Hello Wor"}}}  ← Valides JSON!
```

### Array von Objekten mit unvollständigem Key

```python
json_str = '''{
  "items": [
    {"id": 1, "name": "First"},
    {"id": 2, "name": "Second"},
    {"id": 3, "name": "Third", "add'''

overlap, hierarchy, complete = extract_continuation_contexts(json_str)

# Complete entfernt den unvollständigen Key "add":
# {"items": [{"id": 1, ...}, {"id": 2, ...}, {"id": 3, "name": "Third"}]}
```

## Budget-Logik

Die Budget-Logik funktioniert wie folgt:

1. **Sammeln**: Alle String-Werte werden mit ihrer Position gesammelt
2. **Sortieren**: Nach Entfernung zum Cut-Punkt (näher = höhere Priorität)
3. **Zuweisen**: Budget wird von hinten nach vorne aufgebraucht
4. **Ersetzen**: Werte außerhalb des Budgets werden durch `"..."` ersetzt

## Tests ausführen

```bash
python -m unittest test_json_continuation -v
```

## API Referenz

### `extract_continuation_contexts(truncated_json: str) -> Tuple[str, str, str]`

Hauptfunktion. Gibt `(overlap, hierarchy, complete_part)` zurück.

### `get_contexts(truncated_json: str) -> dict`

Convenience-Funktion. Gibt Dictionary mit Keys `'overlap'`, `'hierarchy'`, `'complete_part'` zurück.

### Modulkonstanten

- `BUDGET_LIMIT`: int (default: 500) - Zeichen-Budget für Hierarchy-Context
- `OVERLAP_MAX_CHARS`: int (default: 1000) - Max Zeichen für Overlap-Context

