mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
feat: gemini 支持
This commit is contained in:
@@ -11,6 +11,7 @@ const authenticateApiKey = async (req, res, next) => {
|
|||||||
try {
|
try {
|
||||||
// 安全提取API Key,支持多种格式
|
// 安全提取API Key,支持多种格式
|
||||||
const apiKey = req.headers['x-api-key'] ||
|
const apiKey = req.headers['x-api-key'] ||
|
||||||
|
req.headers['x-goog-api-key'] ||
|
||||||
req.headers['authorization']?.replace(/^Bearer\s+/i, '') ||
|
req.headers['authorization']?.replace(/^Bearer\s+/i, '') ||
|
||||||
req.headers['api-key'];
|
req.headers['api-key'];
|
||||||
|
|
||||||
|
|||||||
@@ -415,9 +415,10 @@ async function handleGenerateContent(req, res) {
|
|||||||
const { model, project, user_prompt_id, request: requestData } = req.body;
|
const { model, project, user_prompt_id, request: requestData } = req.body;
|
||||||
const sessionHash = sessionHelper.generateSessionHash(req.body);
|
const sessionHash = sessionHelper.generateSessionHash(req.body);
|
||||||
|
|
||||||
// 处理 OpenAI 格式请求(没有 request 字段的情况)
|
// 处理不同格式的请求
|
||||||
let actualRequestData = requestData;
|
let actualRequestData = requestData;
|
||||||
if (!requestData && req.body.messages) {
|
if (!requestData) {
|
||||||
|
if (req.body.messages) {
|
||||||
// 这是 OpenAI 格式的请求,构建 Gemini 格式的 request 对象
|
// 这是 OpenAI 格式的请求,构建 Gemini 格式的 request 对象
|
||||||
actualRequestData = {
|
actualRequestData = {
|
||||||
contents: req.body.messages.map(msg => ({
|
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
|
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) {
|
if (!actualRequestData || !actualRequestData.contents) {
|
||||||
@@ -468,6 +472,7 @@ async function handleGenerateContent(req, res) {
|
|||||||
|
|
||||||
res.json(response);
|
res.json(response);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.log(321, error.response);
|
||||||
const version = req.path.includes('v1beta') ? 'v1beta' : 'v1internal';
|
const version = req.path.includes('v1beta') ? 'v1beta' : 'v1internal';
|
||||||
logger.error(`Error in generateContent endpoint (${version})`, { error: error.message });
|
logger.error(`Error in generateContent endpoint (${version})`, { error: error.message });
|
||||||
res.status(500).json({
|
res.status(500).json({
|
||||||
@@ -487,9 +492,10 @@ async function handleStreamGenerateContent(req, res) {
|
|||||||
const { model, project, user_prompt_id, request: requestData } = req.body;
|
const { model, project, user_prompt_id, request: requestData } = req.body;
|
||||||
const sessionHash = sessionHelper.generateSessionHash(req.body);
|
const sessionHash = sessionHelper.generateSessionHash(req.body);
|
||||||
|
|
||||||
// 处理 OpenAI 格式请求(没有 request 字段的情况)
|
// 处理不同格式的请求
|
||||||
let actualRequestData = requestData;
|
let actualRequestData = requestData;
|
||||||
if (!requestData && req.body.messages) {
|
if (!requestData) {
|
||||||
|
if (req.body.messages) {
|
||||||
// 这是 OpenAI 格式的请求,构建 Gemini 格式的 request 对象
|
// 这是 OpenAI 格式的请求,构建 Gemini 格式的 request 对象
|
||||||
actualRequestData = {
|
actualRequestData = {
|
||||||
contents: req.body.messages.map(msg => ({
|
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
|
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