> */ public array $similarityResults = []; public function mount(EmbeddingWorkbench $workbench): void { $this->initializeWorkbench($workbench); } public function searchSimilar(EmbeddingWorkbench $workbench, RecordEmbeddingUsageEvent $recordUsageEvent): void { if (! $this->ensureWorkbenchAvailable($workbench, 'similarityQuery')) { return; } $this->validate([ 'similarityQuery' => ['required', 'string', 'max:1000'], 'similarityLimit' => ['required', 'integer', 'min:1', 'max:50'], 'minimumSimilarity' => ['required', 'numeric', 'min:0', 'max:1'], 'embeddingModel' => ['required', 'string'], ]); try { $this->similarityResults = $workbench ->search($this->similarityQuery, $this->similarityLimit, (float) $this->minimumSimilarity, $this->embeddingModel) ->map(function (array $result) use ($workbench): array { return [ ...$workbench->presentEntry($result['entry']), 'similarity' => $result['similarity'], 'distance' => $result['distance'], ]; }) ->all(); $recordUsageEvent->handle( user: auth()->user(), workbench: $workbench, selectedModel: $this->embeddingModel, tool: 'search', inputCount: 1, resultCount: count($this->similarityResults), ); $this->refreshSummary($workbench); } catch (\Throwable $exception) { $this->addError('embeddingModel', $exception->getMessage()); } } }; ?>
@include('pages.embeddings.partials.navigation', ['heading' => __('Similarity search')])
{{ __('Query') }}
{{ __('Search') }} {{ __('Searching') }}
@if ($similarityResults !== [])
@foreach ($similarityResults as $result) @endforeach
{{ __('Phrase') }} {{ __('Similarity') }} {{ __('Distance') }}
{{ $result['source_text'] }} {{ number_format($result['similarity'], 3) }} {{ number_format($result['distance'], 3) }}
@endif