middleware(function ($request, $next) { if (!VectorQueryServiceProvider::isEnabled()) { $this->showPermissionError('/'); } return $next($request); }); } /** * Show the view to start a vector/LLM-based query search. */ public function show(Request $request) { $query = $request->get('ask', ''); // TODO - Set page title return view('search.query', [ 'query' => $query, ]); } /** * Perform a vector/LLM-based query search. */ public function run(Request $request, VectorSearchRunner $searchRunner, LlmQueryRunner $llmRunner) { // TODO - Rate limiting $query = $request->get('query', ''); return response()->eventStream(function () use ($query, $searchRunner, $llmRunner) { $results = $query ? $searchRunner->run($query) : []; $entities = []; foreach ($results as $result) { $entityKey = $result->entity->getMorphClass() . ':' . $result->entity->id; if (!isset($entities[$entityKey])) { $entities[$entityKey] = $result->entity; } } yield ['view' => view('entities.list', ['entities' => $entities])->render()]; yield ['result' => $llmRunner->run($query, $results)]; }); } }