addArgument( 'prompt', InputArgument::REQUIRED, 'User prompt (realistic retrieval test)' ); } protected function execute(InputInterface $input, OutputInterface $output): int { $prompt = (string) $input->getArgument('prompt'); $limit = 8; $output->writeln(''); $output->writeln('Prompt: ' . $prompt); $output->writeln(''); $totalStart = microtime(true); // ---------------------------- // 1️⃣ Tag Routing Phase // ---------------------------- $tagStart = microtime(true); $tagResults = $this->tagVectorSearchClient->search($prompt, $limit); $tagDuration = (microtime(true) - $tagStart) * 1000; // ---------------------------- // 2️⃣ Chunk Retrieval Phase // ---------------------------- $chunkStart = microtime(true); $chunkResults = $this->vectorSearchClient->search($prompt, $limit); $chunkDuration = (microtime(true) - $chunkStart) * 1000; $totalDuration = (microtime(true) - $totalStart) * 1000; // ---------------------------- // Output // ---------------------------- $output->writeln('Tag Routing Time: ' . round($tagDuration, 2) . ' ms'); $output->writeln('Chunk Retrieval Time: ' . round($chunkDuration, 2) . ' ms'); $output->writeln('Total Retrieval Time: ' . round($totalDuration, 2) . ' ms'); $output->writeln(''); $output->writeln('--- Tag Results ---'); $output->writeln(json_encode($tagResults, JSON_PRETTY_PRINT)); $output->writeln(''); $output->writeln('--- Chunk Results ---'); $output->writeln(json_encode($chunkResults, JSON_PRETTY_PRINT)); $output->writeln(''); return Command::SUCCESS; } }