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;
}
}