*/ public function getHistory(): array { return session()->get(self::SESSION_KEY, []); } /** * Reset conversation history. */ public function reset(): void { session()->forget(self::SESSION_KEY); } /** * Send a message and get AI response. * * @return array */ public function sendMessage( string $userMessage, AiProvider $provider, AiModel $model, float $temperature = 0.7, int $maxTokens = 8192 ): array { $history = $this->getHistory(); $history[] = ['role' => 'user', 'content' => $userMessage]; $startTime = microtime(true); try { $service = $this->aiServiceFactory->make($provider); $result = $service->chat($history, [ 'temperature' => $temperature, 'max_tokens' => $maxTokens, 'model' => $model->slug, 'api_key' => $provider->api_key, 'base_url' => $provider->base_url, ]); } catch (ConnectionException|RuntimeException $e) { Log::error('Chat API error: ' . $e->getMessage()); return [ 'success' => false, 'error' => $e->getMessage(), 'content' => '', 'role' => 'assistant', 'tokens_used' => null, 'generation_time' => round(microtime(true) - $startTime, 3), ]; } $assistantMessage = [ 'role' => 'assistant', 'content' => $result['content'] ?? '', ]; $history[] = $assistantMessage; session()->put(self::SESSION_KEY, $history); return [ 'success' => true, 'content' => $result['content'] ?? '', 'role' => 'assistant', 'tokens_used' => $result['tokens_used'] ?? null, 'generation_time' => round(microtime(true) - $startTime, 3), ]; } }