runId = $run; $this->level = request()->query('level'); } #[Computed] public function run(): BenchmarkRun { $run = BenchmarkRun::where('run_id', $this->runId) ->visibleTo(auth()->user()) ->firstOrFail(); if ($run->isOwnedBy(auth()->user()) && $this->notes === null) { $this->notes = $run->notes; } return $run; } public function saveNotes(): void { $this->authorizeOwner(); $this->validate([ 'notes' => ['nullable', 'string', 'max:65535'], ]); $this->run->fill(['notes' => $this->notes])->save(); Flux::toast(variant: 'success', text: __('Notes saved.')); } public function toggleVisibility(): void { $this->authorizeOwner(); $this->run->fill([ 'visibility' => $this->run->visibility === BenchmarkRun::VISIBILITY_PUBLIC ? BenchmarkRun::VISIBILITY_PRIVATE : BenchmarkRun::VISIBILITY_PUBLIC, ])->save(); Flux::toast(variant: 'success', text: __('Visibility updated.')); } private function authorizeOwner(): void { if (! $this->run->isOwnedBy(auth()->user())) { throw new AuthorizationException; } } }; ?>
{{ $this->run->suite }} · {{ $this->run->model_id }} @if ($this->run->label) {{ $this->run->label }} @else @if ($this->run->model_quant){{ $this->run->model_quant }} @endif @if ($this->run->engine){{ $this->run->engine }} @endif @endif @if ($this->run->visibility === 'private'){{ __('Private') }} @endif {{ optional($this->run->ran_at)->format('Y-m-d H:i') }}
{{ __('Sessions') }} @if ($this->run->isOwnedBy(auth()->user())) {{ $this->run->visibility === 'public' ? __('Make private') : __('Make public') }} @endif
{{ __('Run metadata') }}
{{ __('Engine build') }}
{{ $this->run->engine_build ?? '—' }}
{{ __('Context') }}
{{ number_format($this->run->n_ctx ?? 0) }}
{{ __('Slots') }}
{{ $this->run->slots ?? '—' }}
{{ __('GPU') }}
{{ ($this->run->gpu_count ? $this->run->gpu_count.'x ' : '').($this->run->gpu ?? 'unknown') }}
{{ __('Inference host') }}
{{ $this->run->engine ?? 'unknown' }}
{{ __('Image digest') }}
{{ $this->run->image_digest ?? '—' }}
@if ($this->run->serverConfig)
{{ __('Server config') }}
{{ $this->run->serverConfig->name }}
@endif @if ($this->run->suite_versions)
{{ __('Suite versions') }}
{{ json_encode($this->run->suite_versions) }}
@endif @if ($this->run->validators)
{{ __('Validators') }}
{{ json_encode($this->run->validators) }}
@endif
@if ($this->run->isOwnedBy(auth()->user())) {{ __('Your notes') }} {{ __("Festbench data can't be modified — add your own context here.") }}
{{ __('Save notes') }}
@endif
{{ $this->run->suite === 'scenariobench' ? __('Scenario results') : ($this->run->suite === 'depthsweep' ? __('Depth sweep results') : __('Task results')) }}
@if ($this->run->suite === 'scenariobench') {{ __('Scenario') }} {{ __('Level') }} {{ __('Pass') }} {{ __('Outcome') }} {{ __('Wall (s)') }} {{ __('Turns') }} {{ __('Commands') }} {{ __('Submissions') }} {{ __('Rejected') }} {{ __('t first sub') }} {{ __('t pass') }} {{ __('Gen tokens') }} @foreach ($this->run->suiteResults() as $result) {{ $result->scenario }} {{ $result->level ?? '—' }} @if ($result->ok) @elseif ($result->ok === null) — @else @endif {{ $result->outcome ?? '—' }} {{ number_format($result->wall, 1) }} {{ number_format($result->turns) }} {{ number_format($result->commands) }} {{ number_format($result->submissions) }} {{ number_format($result->rejected) }} {{ number_format($result->t_first_sub, 1) }} {{ $result->t_pass !== null ? number_format($result->t_pass, 1) : '—' }} {{ number_format($result->gen_tokens) }} @endforeach @elseif ($this->run->suite === 'depthsweep') @if ($this->level)
{{ __('Thinking level') }}: {{ $this->level }} {{ __('show all levels') }}
@endif {{ __('Depth') }} {{ __('Task') }} {{ __('Level') }} {{ __('Found') }} {{ __('Needle') }} {{ __('TTFT') }} {{ __('Wall') }} {{ __('Visible') }} @foreach ($this->run->suiteResults($this->level) as $result) {{ $result->section }} {{ $result->task }} {{ $result->level ?? '—' }} @if ($result->ok) @else @endif {{ $result->detail ?? '—' }} {{ number_format($result->ttft, 2) }} {{ number_format($result->wall, 2) }} {{ number_format($result->visible) }} @endforeach @else @if (in_array($this->run->suite, ['softbench', 'prosebench', 'psychbench'])) {{ __('Section') }} @endif {{ __('Task') }} {{ __('Level') }} {{ __('Pass') }} @if (in_array($this->run->suite, ['prosebench', 'psychbench'])) {{ __('Checks') }} @endif @if ($this->run->suite === 'infrabench') {{ __('Kind') }} @endif {{ __('User tok/s') }} {{ __('Decode') }} {{ __('TTFT') }} {{ __('t_answer') }} {{ __('Wall') }} {{ __('Reasoning') }} {{ __('Visible') }} {{ __('Finish') }} @foreach ($this->run->suiteResults() as $result) @if (in_array($this->run->suite, ['softbench', 'prosebench', 'psychbench'])) {{ $result->section ?? '—' }} @endif {{ $result->task }} {{ $result->level ?? '—' }} @if ($result->ok) @elseif ($result->ok === null) — @else @endif @if (in_array($this->run->suite, ['prosebench', 'psychbench'])) {{ $result->checks_passed !== null ? $result->checks_passed.'/'.$result->checks_total : '—' }} @endif @if ($this->run->suite === 'infrabench') {{ $result->kind ?? '—' }} @endif {{ number_format($result->user_tps, 1) }} {{ number_format($result->decode, 1) }} {{ number_format($result->ttft, 2) }} {{ number_format($result->t_answer, 2) }} {{ number_format($result->wall, 2) }} {{ number_format($result->reasoning) }} {{ number_format($result->visible) }} {{ $result->finish ?? '—' }} @endforeach @endif