Skip to content

添加大量新功能#2

Open
nsuanningmeng wants to merge 1 commit intolza6:mainfrom
nsuanningmeng:pr/worker-update
Open

添加大量新功能#2
nsuanningmeng wants to merge 1 commit intolza6:mainfrom
nsuanningmeng:pr/worker-update

Conversation

@nsuanningmeng
Copy link

typli-2api 改动说明

基于原项目 v2.2.0 版本进行的修改,当前版本 v2.4.1。


一、新增功能

1. Gemini API 兼容

新增路由:

  • /v1beta/models/{model}:generateContent - 内容生成
  • /v1beta/models/{model}:streamGenerateContent - 流式内容生成
  • /v1beta/models/{model}:predict - 图片生成(Imagen 格式)

新增函数:

  • handleGeminiApi() - Gemini API 路由分发
  • handleGeminiGenerateContent() - 处理 Gemini 聊天请求
  • handleGeminiImageFromChat() - 处理 Gemini 图片模型的 generateContent 请求
  • handleGeminiPredict() - 处理 Gemini Imagen 格式图片生成
  • handleGeminiNonStreamResponse() - Gemini 非流式响应处理
  • createGeminiErrorResponse() - Gemini 格式错误响应
  • createGeminiStreamChunk() - Gemini 流式响应块

新增配置:

GEMINI_CHAT_MODELS: ["google/gemini-2.5-flash"],
GEMINI_IMAGE_MODELS: ["fal-ai/nano-banana", "fal-ai/nano-banana-pro"],

2. 双重鉴权方式

修改 verifyAuth() 函数:

原代码仅支持 Authorization: Bearer xxx 头部鉴权。

修改后同时支持:

  • Authorization: Bearer xxx 头部
  • ?key=xxx URL 参数(Gemini 风格)
function verifyAuth(request) {
  const masterKey = request.ctx.apiKey;
  if (!masterKey || masterKey === '') return true;

  // 方式1: Authorization 头
  const authHeader = request.headers.get('Authorization');
  if (authHeader) {
    const token = authHeader.replace(/^Bearer\s+/i, '');
    if (token === masterKey) return true;
  }

  // 方式2: URL key 参数 (Gemini 风格)
  const url = new URL(request.url);
  const keyParam = url.searchParams.get('key');
  if (keyParam === masterKey) return true;

  return false;
}

3. 非流式响应支持

问题: 原代码所有响应均为流式 SSE 格式,导致 new-api 等项目解析失败。

修改:

  1. 修改 isStream 判断逻辑,默认非流式:
// 原代码
const isStream = streamParam !== false;

// 修改后
const isStream = streamParam === true || streamParam === "true";
  1. 新增 handleNonStreamChatCompletions() 函数处理非流式请求,返回标准 JSON 格式。

4. 模型名称映射

新增配置 MODEL_DISPLAY_MAP

MODEL_DISPLAY_MAP: {
  // 聊天模型
  "grok-4-fast": "xai/grok-4-fast",
  "gpt-5.2": "openai/gpt-5.2",
  "gpt-5": "openai/gpt-5",
  "deepseek-r1": "deepseek/deepseek-reasoner",
  // ... 更多映射
  // 图片模型
  "flux-2": "fal-ai/flux-2",
  "gemini-2.5-flash-image": "fal-ai/nano-banana",
  // ... 更多映射
}

新增 resolveModelName() 函数:

function resolveModelName(displayName) {
  return CONFIG.MODEL_DISPLAY_MAP[displayName] || displayName;
}

修改 handleModelsRequest() 返回显示名而非原始模型名。


5. 会话持久化(Cloudflare KV)

新增配置:

SESSION_ENABLED: true,
SESSION_TTL: 86400,
SESSION_MAX_MESSAGES: 50,

修改 Worker 入口,注入 KV 绑定:

request.ctx = {
  apiKey,
  kv: env.SESSIONS
};

新增函数:

  • generateSessionId(identifier) - 生成会话 ID
  • extractSessionIdentifier(request, body) - 从请求中提取会话标识
  • getSession(kv, sessionId) - 获取会话历史
  • saveSession(kv, sessionId, messages) - 保存会话
  • appendToSession(kv, sessionId, userMessage, assistantMessage) - 追加消息

新增端点 /v1/sessions

  • GET /v1/sessions?session_id=xxx - 获取会话历史
  • DELETE /v1/sessions?session_id=xxx - 清除会话

修改 handleChatCompletions()handleNonStreamChatCompletions()

  • 加载历史消息并合并到请求中
  • 响应完成后保存新消息到会话

6. 图片生成高级参数

新增配置:

IMAGE_DEFAULTS: {
  n: 1,
  size: "1024x1024",
  quality: "standard",
  style: "vivid",
  response_format: "url"
},

SIZE_MAP: {
  "256x256": { width: 256, height: 256, aspectRatio: "1:1" },
  "1024x1024": { width: 1024, height: 1024, aspectRatio: "1:1" },
  "1792x1024": { width: 1792, height: 1024, aspectRatio: "16:9" },
  "16:9": { width: 1792, height: 1024, aspectRatio: "16:9" },
  // ... 更多尺寸
},

BASIC_ONLY_IMAGE_MODELS: [
  "fal-ai/nano-banana",
  "fal-ai/nano-banana-pro"
],

新增函数:

  • parseImageParams(body) - 解析图片参数(兼容 OpenAI 和 Gemini 格式)
  • buildImagePayload(prompt, model, imageParams) - 构建上游请求载荷
  • buildOpenAIImageResponse(imageUrls, imageParams, requestId) - 构建 OpenAI 格式响应

新增端点 handleImageGenerations()
/v1/images/generations 返回标准 OpenAI 图片生成格式:

{
  "created": 1234567890,
  "data": [
    { "url": "https://..." },
    { "b64_json": "..." }
  ]
}

修改图片生成逻辑:

  • 支持多图生成(n 参数,1-4 张)
  • 支持尺寸、质量、风格等参数
  • BASIC_ONLY_IMAGE_MODELS 中的模型跳过额外参数

7. 图片限流绕过增强

增强 generateRandomUserOrigin() 函数:

  • 增加国家/城市数量(25 个)
  • 增加 referer 来源
  • 添加随机时间戳(过去 24 小时内)
  • 添加 sessionId 字段
  • 添加额外 cookie:visitor_idsession_token_ga

8. 新增模型

CHAT_MODELSMODEL_DISPLAY_MAP 中添加:

  • openai/gpt-5.2(显示名:gpt-5.2

二、文件变更汇总

worker.js 修改点

区域 修改内容
CONFIG 新增 SESSION_*IMAGE_DEFAULTSSIZE_MAPBASIC_ONLY_IMAGE_MODELSGEMINI_*_MODELSMODEL_DISPLAY_MAP
Worker 入口 注入 KV 绑定,新增 /v1beta/ 路由
verifyAuth() 支持 URL key 参数
handleApi() 新增 /v1/images/generations/v1/sessions 路由
handleModelsRequest() 返回显示名
handleChatCompletions() 支持会话持久化、图片参数、非流式响应
新增函数 约 15 个新函数(Gemini 相关、会话相关、图片参数相关)

新增文件

  • README.md - 更新文档(可选合并)
  • post.md - 宣传帖(不需要合并)

三、兼容性说明

  • 所有改动向后兼容原有 API 调用方式
  • 不影响原有功能的正常使用
  • 新功能均为可选(如会话持久化需要配置 KV 才生效)

四、部署说明变更

新增可选步骤:

  1. 创建 KV 命名空间 SESSIONS
  2. 绑定 KV 到 Worker(变量名:SESSIONS

改动作者: nsuanningmeng
基于版本: v2.2.0
当前版本: v2.4.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant