From 0af7e109982407f8f4321313bf44434cae62251b Mon Sep 17 00:00:00 2001 From: Jethro Lin Date: Wed, 4 Dec 2024 12:43:04 +0800 Subject: [PATCH] bug fix --- app/Http/Middleware/Authenticate.php | 21 +++++ app/Http/Middleware/EncryptCookies.php | 17 ++++ .../PreventRequestsDuringMaintenance.php | 17 ++++ .../Middleware/RedirectIfAuthenticated.php | 32 +++++++ app/Http/Middleware/TrimStrings.php | 19 +++++ app/Http/Middleware/TrustHosts.php | 20 +++++ app/Http/Middleware/TrustProxies.php | 23 +++++ app/Http/Middleware/VerifyCsrfToken.php | 17 ++++ app/Providers/RouteServiceProvider.php | 40 +++++++++ app/Services/LlmService.php | 84 +++++++++++++++++++ 10 files changed, 290 insertions(+) create mode 100644 app/Http/Middleware/Authenticate.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/TrimStrings.php create mode 100644 app/Http/Middleware/TrustHosts.php create mode 100644 app/Http/Middleware/TrustProxies.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 app/Services/LlmService.php diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..033136a --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..a8a252d --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ +allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..d11dd5f --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,23 @@ +by($request->user()?->id ?: $request->ip()); + }); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } +} diff --git a/app/Services/LlmService.php b/app/Services/LlmService.php new file mode 100644 index 0000000..1529616 --- /dev/null +++ b/app/Services/LlmService.php @@ -0,0 +1,84 @@ +id; + if (RateLimiter::tooManyAttempts($key, $client->rate_limit)) { + $seconds = RateLimiter::availableIn($key); + throw new \RuntimeException("请求过于频繁,请在 {$seconds} 秒后重试。"); + } + + try { + $provider = $client->llmProvider; + + if ($provider->status !== 'active') { + throw new \RuntimeException('LLM 提供商当前不可用。'); + } + + // 发送请求到 LLM 提供商 + $response = Http::timeout($client->timeout) + ->withToken($provider->api_token) + ->withHeaders([ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ]) + ->post($provider->api_url, array_merge([ + 'prompt' => $prompt, + ], $options)); + + if (!$response->successful()) { + Log::error('LLM provider request failed', [ + 'status' => $response->status(), + 'body' => $response->body(), + 'provider' => $provider->name, + 'client_id' => $client->id, + ]); + + throw new \RuntimeException('LLM 提供商服务异常,请稍后重试。'); + } + + // 记录成功的请求 + RateLimiter::hit($key, 60); + + $result = $response->json(); + + return [ + 'response' => $result['choices'][0]['text'] ?? $result['response'] ?? '', + 'usage' => $result['usage'] ?? [], + ]; + + } catch (\Illuminate\Http\Client\ConnectionException $e) { + Log::error('LLM provider connection timeout', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + 'provider' => $provider->name ?? null, + 'client_id' => $client->id, + ]); + + throw new \RuntimeException('LLM 提供商响应超时,请稍后重试。'); + } + } +}