response.php
- Pfad:
src/View/chat/partials/response.php - Namespace: -
- Zeilen: 101 | Größe: 4,919 Bytes
- Geändert: 2025-12-29 14:57:07 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Versionen 5
-
v5
2025-12-29 14:57 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v4
2025-12-28 01:20 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v3
2025-12-26 20:07 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Write-Operation -
v2
2025-12-23 03:36 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-22 22:27 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
/**
* HTMX Response Partial - Renders both user question and assistant response
* Uses same CSS classes as index.php for consistent styling
*
* @var string $question The user's question
* @var array $result AI response with 'answer', 'sources', 'usage'
* @var string $model The model used
* @var string $formattedAnswer Pre-formatted answer HTML
*/
$answer = $formattedAnswer ?? htmlspecialchars($result['answer'] ?? '');
$sources = $result['sources'] ?? [];
$usage = $result['usage'] ?? null;
$isOllama = str_starts_with($model, 'ollama:');
$modelLabel = $isOllama ? substr($model, 7) : $model;
$inputTokens = (int) ($usage['input_tokens'] ?? 0);
$outputTokens = (int) ($usage['output_tokens'] ?? 0);
$cost = ($inputTokens * 0.000015) + ($outputTokens * 0.000075);
$qualityValidation = $result['quality_validation'] ?? null;
$uniqueId = uniqid('sources-');
?>
<!-- User Message -->
<div class="chat-msg chat-msg--user">
<div class="chat-msg__content"><?= htmlspecialchars($question) ?></div>
</div>
<!-- Assistant Message -->
<div class="chat-msg chat-msg--assistant">
<div class="chat-msg__content">
<?= $answer ?>
<?php if ($qualityValidation !== null): ?>
<div class="chat-quality chat-quality--<?= $qualityValidation['passed'] ? 'passed' : 'failed' ?>"
title="<?= htmlspecialchars($qualityValidation['details'] ?? '') ?>">
<span class="chat-quality__icon"><?= $qualityValidation['passed'] ? '✓' : '⚠' ?></span>
<span class="chat-quality__score"><?= round($qualityValidation['score'] ?? 0) ?>%</span>
<?php if (!empty($qualityValidation['issues'])): ?>
<div class="chat-quality__issues">
<strong>Hinweise:</strong>
<ul>
<?php foreach ($qualityValidation['issues'] as $issue): ?>
<li><?= htmlspecialchars($issue) ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if (!empty($sources)): ?>
<div class="chat-sources" id="<?= $uniqueId ?>">
<button type="button" class="chat-sources__toggle" onclick="this.parentElement.classList.toggle('chat-sources--open')">
<?= count($sources) ?> Quelle<?= count($sources) > 1 ? 'n' : '' ?> ▾
</button>
<div class="chat-sources__list">
<?php foreach ($sources as $source): ?>
<div class="chat-source">
<div class="chat-source__header">
<?php if (!empty($source['collection'])): ?>
<span class="chat-source__collection">[<?= htmlspecialchars($source['collection']) ?>]</span>
<?php endif; ?>
<span class="chat-source__title"><?= htmlspecialchars($source['title'] ?? 'Unbekannt') ?></span>
<span class="chat-source__score"><?= round(($source['score'] ?? 0) * \Domain\Constants::PERCENT_FULL) ?>%</span>
</div>
<?php if (!empty($source['content'])): ?>
<div class="chat-source__content">"<?= htmlspecialchars(mb_substr($source['content'], 0, 200)) ?><?= mb_strlen($source['content']) > 200 ? '...' : '' ?>"</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
<div class="chat-msg__meta">
<span><?= htmlspecialchars($modelLabel) ?></span>
<?php if (!$isOllama && ($inputTokens > 0 || $outputTokens > 0)): ?>
<span class="chat-msg__tokens">↓<?= number_format($inputTokens) ?> ↑<?= number_format($outputTokens) ?></span>
<span class="chat-msg__cost">~$<?= number_format($cost, 4) ?></span>
<?php elseif ($isOllama): ?>
<span class="chat-msg__local">lokal</span>
<?php endif; ?>
</div>
<div class="chat-msg__actions">
<form method="POST" action="/chat/promote" class="chat-promote-form">
<input type="hidden" name="question" value="<?= htmlspecialchars($question) ?>">
<input type="hidden" name="answer" value="<?= htmlspecialchars($result['answer'] ?? '') ?>">
<input type="hidden" name="model" value="<?= htmlspecialchars($model) ?>">
<input type="hidden" name="_csrf_token" value="<?= htmlspecialchars($_SESSION['_csrf_token'] ?? '') ?>">
<button type="submit" class="chat-promote-btn" title="Als Content-Projekt weiterentwickeln">
<span class="chat-promote-btn__icon">↗</span>
<span class="chat-promote-btn__text">Promote to Content</span>
</button>
</form>
</div>
</div>
</div>