Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/afedukov_searchtweak.json
T

1 line
7.6 KiB
JSON

{"repo": "afedukov/searchtweak", "files": {"app/Services/Judges/Providers/OpenAiCompatibleJudgeHandler.php": {"1db8d6628ddae81df7f3c46b117b56bab67c2f82": {"t": 1785746150.0469236, "n": 3591, "h": "6c31a60ccbb20aa6", "c": "<?php\n\nnamespace App\\Services\\Judges\\Providers;\n\nuse App\\Models\\Judge;\nuse App\\Services\\Judges\\AbstractJudgeHandler;\nuse GuzzleHttp\\RequestOptions;\n\nclass OpenAiCompatibleJudgeHandler extends AbstractJudgeHandler\n{\n private const int TIMEOUT = 120;\n\n private const array API_URLS = [\n Judge::PROVIDER_DEEPSEEK => 'https://api.deepseek.com/v1/chat/completions',\n Judge::PROVIDER_XAI => 'https://api.x.ai/v1/chat/completions',\n Judge::PROVIDER_GROQ => 'https://api.groq.com/openai/v1/chat/completions',\n Judge::PROVIDER_MISTRAL => 'https://api.mistral.ai/v1/chat/completions',\n Judge::PROVIDER_OLLAMA => 'http://localhost:11434/v1/chat/completions',\n ];\n\n public function grade(Judge $judge, string $prompt, array $validGrades): array\n {\n $content = $this->executeRequest(\n judge: $judge,\n method: 'POST',\n url: $this->resolveApiUrl($judge),\n guzzleOptions: [\n RequestOptions::TIMEOUT => self::TIMEOUT,\n RequestOptions::CONNECT_TIMEOUT => 10,\n RequestOptions::HEADERS => $this->buildHeaders($judge),\n RequestOptions::JSON => array_merge([\n 'model' => $judge->model_name,\n 'messages' => [\n ['role' => 'user', 'content' => $prompt],\n ],\n ], $judge->getModelParams()),\n ],\n extractContent: fn (array $body) => $body['choices'][0]['message']['content'] ?? '',\n );\n\n return $this->parseResponse($content, $validGrades);\n }\n\n private function resolveApiUrl(Judge $judge): string\n {\n if ($judge->provider === Judge::PROVIDER_CUSTOM_OPENAI) {\n $baseUrl = $judge->getBaseUrl();\n if ($baseUrl === null) {\n throw new \\RuntimeException('Custom OpenAI-compatible provider requires Base URL.');\n }\n\n return $this->normalizeApiUrl($baseUrl);\n }\n\n if ($judge->provider === Judge::PROVIDER_OLLAMA) {\n return $this->normalizeOllamaApiUrl($judge->getBaseUrl() ?? self::API_URLS[Judge::PROVIDER_OLLAMA]);\n }\n\n $apiUrl = self::API_URLS[$judge->provider] ?? null;\n if ($apiUrl === null) {\n throw new \\RuntimeException(sprintf('Provider \"%s\" is not OpenAI-compatible.', $judge->provider));\n }\n\n return $apiUrl;\n }\n\n private function normalizeApiUrl(string $url): string\n {\n $url = rtrim(trim($url), '/');\n\n return str_ends_with($url, '/chat/completions')\n ? $url\n : $url . '/chat/completions';\n }\n\n private function normalizeOllamaApiUrl(string $url): string\n {\n $url = rtrim(trim($url), '/');\n\n if (str_ends_with($url, '/v1/chat/completions')) {\n return $url;\n }\n\n if (str_ends_with($url, '/chat/completions')) {\n $base = substr($url, 0, -strlen('/chat/completions'));\n\n return rtrim($base, '/') . '/v1/chat/completions';\n }\n\n if (str_ends_with($url, '/v1')) {\n return $url . '/chat/completions';\n }\n\n return $url . '/v1/chat/completions';\n }\n\n private function buildHeaders(Judge $judge): array\n {\n $headers = [\n 'Content-Type' => 'application/json',\n ];\n\n if (is_string($judge->api_key) && $judge->api_key !== '' && Judge::providerRequiresApiKey($judge->provider)) {\n $headers['Authorization'] = 'Bearer ' . $judge->api_key;\n }\n\n return $headers;\n }\n}\n"}, "9125574ee7088fb3ffc1e175ac0f3273b72c4d9a": {"t": 1785760207.7923698, "n": 3591, "h": "6c31a60ccbb20aa6", "c": "<?php\n\nnamespace App\\Services\\Judges\\Providers;\n\nuse App\\Models\\Judge;\nuse App\\Services\\Judges\\AbstractJudgeHandler;\nuse GuzzleHttp\\RequestOptions;\n\nclass OpenAiCompatibleJudgeHandler extends AbstractJudgeHandler\n{\n private const int TIMEOUT = 120;\n\n private const array API_URLS = [\n Judge::PROVIDER_DEEPSEEK => 'https://api.deepseek.com/v1/chat/completions',\n Judge::PROVIDER_XAI => 'https://api.x.ai/v1/chat/completions',\n Judge::PROVIDER_GROQ => 'https://api.groq.com/openai/v1/chat/completions',\n Judge::PROVIDER_MISTRAL => 'https://api.mistral.ai/v1/chat/completions',\n Judge::PROVIDER_OLLAMA => 'http://localhost:11434/v1/chat/completions',\n ];\n\n public function grade(Judge $judge, string $prompt, array $validGrades): array\n {\n $content = $this->executeRequest(\n judge: $judge,\n method: 'POST',\n url: $this->resolveApiUrl($judge),\n guzzleOptions: [\n RequestOptions::TIMEOUT => self::TIMEOUT,\n RequestOptions::CONNECT_TIMEOUT => 10,\n RequestOptions::HEADERS => $this->buildHeaders($judge),\n RequestOptions::JSON => array_merge([\n 'model' => $judge->model_name,\n 'messages' => [\n ['role' => 'user', 'content' => $prompt],\n ],\n ], $judge->getModelParams()),\n ],\n extractContent: fn (array $body) => $body['choices'][0]['message']['content'] ?? '',\n );\n\n return $this->parseResponse($content, $validGrades);\n }\n\n private function resolveApiUrl(Judge $judge): string\n {\n if ($judge->provider === Judge::PROVIDER_CUSTOM_OPENAI) {\n $baseUrl = $judge->getBaseUrl();\n if ($baseUrl === null) {\n throw new \\RuntimeException('Custom OpenAI-compatible provider requires Base URL.');\n }\n\n return $this->normalizeApiUrl($baseUrl);\n }\n\n if ($judge->provider === Judge::PROVIDER_OLLAMA) {\n return $this->normalizeOllamaApiUrl($judge->getBaseUrl() ?? self::API_URLS[Judge::PROVIDER_OLLAMA]);\n }\n\n $apiUrl = self::API_URLS[$judge->provider] ?? null;\n if ($apiUrl === null) {\n throw new \\RuntimeException(sprintf('Provider \"%s\" is not OpenAI-compatible.', $judge->provider));\n }\n\n return $apiUrl;\n }\n\n private function normalizeApiUrl(string $url): string\n {\n $url = rtrim(trim($url), '/');\n\n return str_ends_with($url, '/chat/completions')\n ? $url\n : $url . '/chat/completions';\n }\n\n private function normalizeOllamaApiUrl(string $url): string\n {\n $url = rtrim(trim($url), '/');\n\n if (str_ends_with($url, '/v1/chat/completions')) {\n return $url;\n }\n\n if (str_ends_with($url, '/chat/completions')) {\n $base = substr($url, 0, -strlen('/chat/completions'));\n\n return rtrim($base, '/') . '/v1/chat/completions';\n }\n\n if (str_ends_with($url, '/v1')) {\n return $url . '/chat/completions';\n }\n\n return $url . '/v1/chat/completions';\n }\n\n private function buildHeaders(Judge $judge): array\n {\n $headers = [\n 'Content-Type' => 'application/json',\n ];\n\n if (is_string($judge->api_key) && $judge->api_key !== '' && Judge::providerRequiresApiKey($judge->provider)) {\n $headers['Authorization'] = 'Bearer ' . $judge->api_key;\n }\n\n return $headers;\n }\n}\n"}}}}