user(); $result = $this->gatewayService->chatCompletion( user: $user, provider: $request->input('provider'), model: $request->input('model'), messages: $request->input('messages'), options: $request->only(['temperature', 'max_tokens', 'top_p', 'frequency_penalty', 'presence_penalty', 'stop']), ipAddress: $request->ip(), userAgent: $request->userAgent() ); return response()->json($result, 200); } catch (InsufficientBudgetException $e) { return response()->json([ 'success' => false, 'error' => 'budget_exceeded', 'message' => $e->getMessage(), ], 402); // Payment Required } catch (RateLimitExceededException $e) { return response()->json([ 'success' => false, 'error' => 'rate_limit_exceeded', 'message' => $e->getMessage(), 'retry_after' => $e->getRetryAfter(), ], 429); } catch (ProviderException $e) { Log::error('Provider error in chat completion', [ 'user_id' => $request->user()->user_id, 'provider' => $request->input('provider'), 'error' => $e->getMessage(), ]); return response()->json([ 'success' => false, 'error' => 'provider_error', 'message' => $e->getMessage(), ], $e->getCode() ?: 500); } catch (\Exception $e) { Log::error('Unexpected error in chat completion', [ 'user_id' => $request->user()->user_id, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'success' => false, 'error' => 'internal_error', 'message' => 'An unexpected error occurred. Please try again.', ], 500); } } }