mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
feat: gemini 支持
This commit is contained in:
@@ -11,6 +11,7 @@ const authenticateApiKey = async (req, res, next) => {
|
||||
try {
|
||||
// 安全提取API Key,支持多种格式
|
||||
const apiKey = req.headers['x-api-key'] ||
|
||||
req.headers['x-goog-api-key'] ||
|
||||
req.headers['authorization']?.replace(/^Bearer\s+/i, '') ||
|
||||
req.headers['api-key'];
|
||||
|
||||
|
||||
@@ -415,9 +415,10 @@ async function handleGenerateContent(req, res) {
|
||||
const { model, project, user_prompt_id, request: requestData } = req.body;
|
||||
const sessionHash = sessionHelper.generateSessionHash(req.body);
|
||||
|
||||
// 处理 OpenAI 格式请求(没有 request 字段的情况)
|
||||
// 处理不同格式的请求
|
||||
let actualRequestData = requestData;
|
||||
if (!requestData && req.body.messages) {
|
||||
if (!requestData) {
|
||||
if (req.body.messages) {
|
||||
// 这是 OpenAI 格式的请求,构建 Gemini 格式的 request 对象
|
||||
actualRequestData = {
|
||||
contents: req.body.messages.map(msg => ({
|
||||
@@ -431,8 +432,11 @@ async function handleGenerateContent(req, res) {
|
||||
topK: req.body.top_k !== undefined ? req.body.top_k : 40
|
||||
}
|
||||
};
|
||||
} else if (req.body.contents) {
|
||||
// 直接的 Gemini 格式请求(没有 request 包装)
|
||||
actualRequestData = req.body;
|
||||
}
|
||||
}
|
||||
console.log(321, actualRequestData);
|
||||
|
||||
// 验证必需参数
|
||||
if (!actualRequestData || !actualRequestData.contents) {
|
||||
@@ -468,6 +472,7 @@ async function handleGenerateContent(req, res) {
|
||||
|
||||
res.json(response);
|
||||
} catch (error) {
|
||||
console.log(321, error.response);
|
||||
const version = req.path.includes('v1beta') ? 'v1beta' : 'v1internal';
|
||||
logger.error(`Error in generateContent endpoint (${version})`, { error: error.message });
|
||||
res.status(500).json({
|
||||
@@ -487,9 +492,10 @@ async function handleStreamGenerateContent(req, res) {
|
||||
const { model, project, user_prompt_id, request: requestData } = req.body;
|
||||
const sessionHash = sessionHelper.generateSessionHash(req.body);
|
||||
|
||||
// 处理 OpenAI 格式请求(没有 request 字段的情况)
|
||||
// 处理不同格式的请求
|
||||
let actualRequestData = requestData;
|
||||
if (!requestData && req.body.messages) {
|
||||
if (!requestData) {
|
||||
if (req.body.messages) {
|
||||
// 这是 OpenAI 格式的请求,构建 Gemini 格式的 request 对象
|
||||
actualRequestData = {
|
||||
contents: req.body.messages.map(msg => ({
|
||||
@@ -503,6 +509,10 @@ async function handleStreamGenerateContent(req, res) {
|
||||
topK: req.body.top_k !== undefined ? req.body.top_k : 40
|
||||
}
|
||||
};
|
||||
} else if (req.body.contents) {
|
||||
// 直接的 Gemini 格式请求(没有 request 包装)
|
||||
actualRequestData = req.body;
|
||||
}
|
||||
}
|
||||
|
||||
// 验证必需参数
|
||||
|
||||
Reference in New Issue
Block a user