> */ public array $embeddingResults = []; public function mount(EmbeddingWorkbench $workbench): void { $this->initializeWorkbench($workbench); } public function generateEmbeddings(EmbeddingWorkbench $workbench, RecordEmbeddingUsageEvent $recordUsageEvent): void { if (! $this->ensureWorkbenchAvailable($workbench, 'embeddingInput')) { return; } $this->validate([ 'embeddingInput' => ['required', 'string', 'max:12000'], 'embeddingModel' => ['required', 'string'], ]); $phrases = EmbeddingVector::phrasesFromText($this->embeddingInput); if ($phrases === []) { $this->addError('embeddingInput', __('Enter at least one phrase.')); return; } try { $entries = $workbench->embed($phrases, $this->embeddingModel); $tokens = (int) $entries->sum(fn (EmbeddingEntry $entry): int => (int) ($entry->tokens ?? 0)); $this->embeddingResults = $entries ->map(fn (EmbeddingEntry $entry): array => $workbench->presentEntry($entry)) ->all(); $recordUsageEvent->handle( user: auth()->user(), workbench: $workbench, selectedModel: $this->embeddingModel, tool: 'embed', inputCount: count($phrases), resultCount: $entries->count(), tokens: $tokens > 0 ? $tokens : null, ); $this->refreshSummary($workbench); Flux::toast(variant: 'success', text: __('Embeddings generated.')); } catch (\Throwable $exception) { $this->addError('embeddingModel', $exception->getMessage()); } } }; ?>
@include('pages.embeddings.partials.navigation', ['heading' => __('Embed')])
{{ __('Phrases') }}
{{ __('Generate') }} {{ __('Generating') }}
@if ($embeddingResults !== [])
@foreach ($embeddingResults as $result) @endforeach
{{ __('Phrase') }} {{ __('Vector') }} {{ __('Meta') }}
{{ $result['source_text'] }} [{{ implode(', ', $result['vector_preview']) }}...]
{{ __('Full vector') }}
{{ $result['vector_json'] }}
{{ $result['dimensions'] }}d
{{ $result['provider'] }} / {{ $result['model'] }}
@endif