{
"event": "PreToolUse",
"tool_name": "Grep",
"tool_input": {
"pattern": "def build_generation_prompt",
"path": "\/var\/www\/scripts\/pipeline",
"output_mode": "content",
"-A": 80
}
}
{
"tool_response": {
"mode": "content",
"numFiles": 0,
"filenames": [],
"content": "generate.py:296:def build_generation_prompt(briefing, context, profile, contract, structure=None):\n\/var\/www\/scripts\/pipeline\/generate.py-297- \"\"\"Build the content generation prompt.\"\"\"\n\/var\/www\/scripts\/pipeline\/generate.py-298-\n\/var\/www\/scripts\/pipeline\/generate.py-299- # Format context\n\/var\/www\/scripts\/pipeline\/generate.py-300- context_text = \"\"\ngenerate.py-301- for i, ctx in enumerate(context, 1):\ngenerate.py-302- context_text += f\"\\n[Quelle {i}: {ctx['source']}]\\n{ctx['content']}\\n\"\n\/var\/www\/scripts\/pipeline\/generate.py-303-\n\/var\/www\/scripts\/pipeline\/generate.py-304- # Build profile instructions - detect new vs old format\n\/var\/www\/scripts\/pipeline\/generate.py-305- profile_text = \"\"\ngenerate.py-306- if profile:\n\/var\/www\/scripts\/pipeline\/generate.py-307- config = profile.get(\"config\", {})\n\/var\/www\/scripts\/pipeline\/generate.py-308-\n\/var\/www\/scripts\/pipeline\/generate.py-309- # Detect new format (has \"haltung\" or \"tonalitaet\" at top level)\ngenerate.py-310- if \"haltung\" in config or \"tonalitaet\" in config or \"grammatik_und_satzbau\" in config:\n\/var\/www\/scripts\/pipeline\/generate.py-311- # New Cary-style profile\n\/var\/www\/scripts\/pipeline\/generate.py-312- profile_text = f\"\"\"\ngenerate.py-313-## Autorenprofil: {profile.get(\"name\", \"Standard\")}\n\/var\/www\/scripts\/pipeline\/generate.py-314-\n\/var\/www\/scripts\/pipeline\/generate.py-315-{_parse_new_author_profile(config)}\n\/var\/www\/scripts\/pipeline\/generate.py-316-\"\"\"\ngenerate.py-317- else:\n\/var\/www\/scripts\/pipeline\/generate.py-318- # Old format - keep backwards compatibility\n\/var\/www\/scripts\/pipeline\/generate.py-319- autorenprofil = config.get(\"autorenprofil\", config)\n\/var\/www\/scripts\/pipeline\/generate.py-320-\n\/var\/www\/scripts\/pipeline\/generate.py-321- stimme = autorenprofil.get(\"stimme\", {})\n\/var\/www\/scripts\/pipeline\/generate.py-322- stimme_text = \"\"\ngenerate.py-323- if stimme:\n\/var\/www\/scripts\/pipeline\/generate.py-324- stimme_text = f\"\"\"\ngenerate.py-325-### Stimme\/Tonalität:\ngenerate.py-326-- Ton: {stimme.get(\"ton\", \"neutral\")}\ngenerate.py-327-- Perspektive: {stimme.get(\"perspektive\", \"neutral\")}\ngenerate.py-328-- Komplexität: {stimme.get(\"komplexitaet\", \"mittel\")}\"\"\"\n\/var\/www\/scripts\/pipeline\/generate.py-329-\n\/var\/www\/scripts\/pipeline\/generate.py-330- stil = autorenprofil.get(\"stil\", {})\n\/var\/www\/scripts\/pipeline\/generate.py-331- stil_text = \"\"\ngenerate.py-332- if stil:\n\/var\/www\/scripts\/pipeline\/generate.py-333- stil_text = f\"\"\"\ngenerate.py-334-### Stil:\ngenerate.py-335-- Fachsprache: {\"Ja\" if stil.get(\"fachsprache\", False) else \"Nein\"}\ngenerate.py-336-- Satzlänge: {stil.get(\"satzlaenge\", \"mittel\")}\"\"\"\n\/var\/www\/scripts\/pipeline\/generate.py-337-\n\/var\/www\/scripts\/pipeline\/generate.py-338- tabus = autorenprofil.get(\"tabus\", [])\n\/var\/www\/scripts\/pipeline\/generate.py-339- tabus_text = \"\"\ngenerate.py-340- if tabus:\n\/var\/www\/scripts\/pipeline\/generate.py-341- tabus_text = f\"\"\"\ngenerate.py-342-### Zu vermeiden:\ngenerate.py-343-{\", \".join(tabus[:5])}\"\"\"\n\/var\/www\/scripts\/pipeline\/generate.py-344-\n\/var\/www\/scripts\/pipeline\/generate.py-345- profile_text = f\"\"\"\ngenerate.py-346-## Autorenprofil: {profile.get(\"name\", \"Standard\")}\n\/var\/www\/scripts\/pipeline\/generate.py-347-{stimme_text}\n\/var\/www\/scripts\/pipeline\/generate.py-348-{stil_text}\n\/var\/www\/scripts\/pipeline\/generate.py-349-{tabus_text}\n\/var\/www\/scripts\/pipeline\/generate.py-350-\"\"\"\n\/var\/www\/scripts\/pipeline\/generate.py-351-\n\/var\/www\/scripts\/pipeline\/generate.py-352- # Build contract requirements\n\/var\/www\/scripts\/pipeline\/generate.py-353- contract_text = \"\"\ngenerate.py-354- if contract:\n\/var\/www\/scripts\/pipeline\/generate.py-355- config = contract.get(\"config\", {})\n\/var\/www\/scripts\/pipeline\/generate.py-356- req = config.get(\"requirements\", {})\n\/var\/www\/scripts\/pipeline\/generate.py-357- contract_text = f\"\"\"\ngenerate.py-358-Contract: {contract.get(\"name\", \"Standard\")}\ngenerate.py-359-- Wortanzahl: {req.get(\"min_words\", 500)} - {req.get(\"max_words\", 5000)} Wörter\n\/var\/www\/scripts\/pipeline\/generate.py-360-\"\"\"\n\/var\/www\/scripts\/pipeline\/generate.py-361-\n\/var\/www\/scripts\/pipeline\/generate.py-362- # Build structure instructions - detect new vs old format\n\/var\/www\/scripts\/pipeline\/generate.py-363- structure_text = \"\"\n\/var\/www\/scripts\/pipeline\/generate.py-364- output_format = \"markdown\"\n\/var\/www\/scripts\/pipeline\/generate.py-365- erlaubte_tags = []\n\/var\/www\/scripts\/pipeline\/generate.py-366-\ngenerate.py-367- if structure:\n\/var\/www\/scripts\/pipeline\/generate.py-368- config = structure.get(\"config\", {})\n\/var\/www\/scripts\/pipeline\/generate.py-369-\n\/var\/www\/scripts\/pipeline\/generate.py-370- # Detect new format (has \"ausgabe\" at top level)\ngenerate.py-371- if \"ausgabe\" in config or \"gesamtaufbau\" in config:\n\/var\/www\/scripts\/pipeline\/generate.py-372- # New Blog-Struktur format\n\/var\/www\/scripts\/pipeline\/generate.py-373- parsed_text, output_format, erlaubte_tags = _parse_new_structure(config)\n\/var\/www\/scripts\/pipeline\/generate.py-374- structure_text = f\"\"\"\ngenerate.py-375-## Struktur: {structure.get(\"name\", \"\")}\n\/var\/www\/scripts\/pipeline\/generate.py-376-",
"numLines": 81
}
}