search->search("{$subject} {$articleTypeName} specifications"); $prompt = $this->prompts->render('specs_research', [ 'articleType' => $articleTypeName, 'subject' => $subject, 'searchResults' => $searchResults !== '' ? $searchResults : 'No web results available.', ]); $result = $this->client->generate($this->model, $prompt); if ('' === trim($result)) { throw new \RuntimeException("No specifications found for model: {$modelName}"); } return $this->parseResponse($result); } /** @return array{specsText: string, correctedModelNumber: string} */ private function parseResponse(string $raw): array { $correctedModelNumber = ''; if (preg_match('/^CORRECTED_MODEL_NUMBER:\s*(\S+)/m', $raw, $matches)) { $correctedModelNumber = trim($matches[1]); // Strip the line from the specs text $raw = preg_replace('/^CORRECTED_MODEL_NUMBER:[^\n]*\n?/m', '', $raw) ?? $raw; } return [ 'specsText' => trim($raw), 'correctedModelNumber' => $correctedModelNumber, ]; } }