@php use App\Filament\Admin\Pages\Assistant; use App\Services\AI\AssistantService; use App\Support\AssistantMarkdown; $messages = $this->messages(); $conversations = $this->conversations(); $favoris = $this->favoris(); $rebonds = $this->rebonds(); $modeAnalyse = $this->mode === AssistantService::MODE_ANALYSE; @endphp {{-- Assistant interne IA en lecture seule (Prompt 26 §4, écran refondu v1.5 §6). --}}
{{-- ─────────── Barre : conversations, mode, nouvelle conversation ─────────── --}}
@if ($this->conversationId) {{ __('ai.assistant.export_pdf') }} @endif
@if ($listeConversationsOuverte)
@forelse ($conversations as $conv)
{{ optional($conv->last_message_at)->format('d/m') }}
@empty

{{ __('ai.assistant.aucune_conversation') }}

@endforelse
@endif {{-- ─────────── Le fil ─────────── --}}
@forelse ($messages as $message) @if ($message->role === 'user')
{{ $message->content }}
@else @php $chiffres = AssistantMarkdown::chiffresCles($message->content); $outils = Assistant::outilsLisibles($message->tools); @endphp
{{-- Les chiffres AVANT la prose : la réponse doit se lire d'un coup d'œil. --}} @if (! empty($chiffres))
@foreach ($chiffres as $tuile)
{{ $tuile['montant'] }}
{{ $tuile['libelle'] }}
@endforeach
@endif {{-- Markdown rendu et ASSAINI (le contenu vient d'un modèle : jamais de HTML brut). --}}
$message->mode === 'analyse']) x-ref="reponse{{ $message->id }}" >{!! AssistantMarkdown::html($message->content) !!}
{{ __('ai.assistant.pdf') }} @if (! empty($message->tool_calls)) @endif
@if (! empty($outils))

{{ __('ai.assistant.tools_used') }} : @foreach ($outils as $outil) @if ($outil['url']) {{ $outil['libelle'] }} @else {{ $outil['libelle'] }} @endif @endforeach

@endif @if (! empty($message->tool_calls))
@foreach ($message->tool_calls as $appel)
{{ $appel['libelle'] ?? ($appel['outil'] ?? '—') }}

{{ __('ai.assistant.entree') }}

{{ json_encode($appel['entree'] ?? [], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) }}

{{ __('ai.assistant.sortie') }}

{{ json_encode($appel['sortie'] ?? [], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) }}
@endforeach
@endif {{-- L'avertissement n'occupe plus le haut de la page : il est là où il sert. --}}

{{ __('ai.disclaimer') }}

@endif @empty
{{ __('ai.assistant.empty') }}
@endforelse {{-- L'erreur s'affiche DANS le fil, la question n'est pas perdue. --}} @if ($erreur)

{{ __('ai.assistant.echec') }}

{{ $erreur }}

@if ($questionEnErreur)

{{ __('ai.assistant.question_conservee') }} « {{ $questionEnErreur }} »

@endif
{{ __('ai.assistant.reessayer') }}
@endif {{-- Progression RÉELLE : on sait quels outils sont appelés, on le dit. --}}
{{ __('ai.assistant.thinking') }}
{{ __('ai.assistant.arreter') }}
{{-- ─────────── Rebonds contextuels ─────────── --}} @if (! empty($rebonds))
@foreach ($rebonds as $rebond) @endforeach
@endif {{-- ─────────── Favoris ─────────── --}} @if ($favoris->isNotEmpty())
@foreach ($favoris as $favori) @endforeach
@endif {{-- ─────────── Suggestions : toujours accessibles, repliées, par thème ─────────── --}}
@if ($suggestionsOuvertes)
@if ($modeAnalyse)

{{ __('ai.assistant.questions_strategiques') }}

@foreach (Assistant::QUESTIONS_ANALYSE as $index => $question) @endforeach
@endif @foreach (Assistant::SUGGESTIONS as $theme => $questions)

{{ $theme }}

@foreach ($questions as $index => $question) @endforeach
@endforeach
@endif
{{-- ─────────── Saisie collante ─────────── --}}
@script @endscript