generateRequestId(); LogLlmRequest::dispatch( userId: $gatewayUserId, provider: $provider, model: $model, requestPayload: $requestPayload, responsePayload: $responsePayload, promptTokens: $responsePayload['usage']['prompt_tokens'] ?? 0, completionTokens: $responsePayload['usage']['completion_tokens'] ?? 0, totalTokens: $responsePayload['usage']['total_tokens'] ?? 0, responseTimeMs: $responseTimeMs, promptCost: $costs['prompt_cost'], completionCost: $costs['completion_cost'], totalCost: $costs['total_cost'], status: 'success', errorMessage: null, httpStatus: 200, ipAddress: $ipAddress, userAgent: $userAgent, requestId: $requestId ); return $requestId; } /** * Log a failed LLM request * * @param string $gatewayUserId Gateway user ID (user_id from gateway_users) * @param string $provider Provider name * @param string $model Model name * @param array $requestPayload Request payload * @param string $errorMessage Error message * @param int $httpStatus HTTP status code * @param string|null $ipAddress Client IP address * @param string|null $userAgent Client user agent * @return string Request ID */ public function logFailure( string $gatewayUserId, string $provider, string $model, array $requestPayload, string $errorMessage, int $httpStatus, ?string $ipAddress = null, ?string $userAgent = null ): string { $requestId = $this->generateRequestId(); LogLlmRequest::dispatch( userId: $gatewayUserId, provider: $provider, model: $model, requestPayload: $requestPayload, responsePayload: null, promptTokens: 0, completionTokens: 0, totalTokens: 0, responseTimeMs: null, promptCost: 0.0, completionCost: 0.0, totalCost: 0.0, status: 'failed', errorMessage: $errorMessage, httpStatus: $httpStatus, ipAddress: $ipAddress, userAgent: $userAgent, requestId: $requestId ); return $requestId; } /** * Generate unique request ID */ private function generateRequestId(): string { return 'req_' . Str::random(24); } }