Gemini v1 路由转 v1beta 路由 cfWorkers 部署

使用类似one-api进行转发Gemini api的时候,没办法设置v1beta路由,所以使用cf Workers转发一遍,以非标准路由。

支持 gemini-2.0-flash-exp 模型进行联网

export default {
  async fetch(request, env) {
    // 将传入的请求 URL 转换为一个 URL 对象
    const url = new URL(request.url);
    
    // 从路径中查找和替换 `v1` 为 `v1beta`
    url.pathname = url.pathname.replace(/^\/v1\//, '/v1beta/');

    // 更改 URL 的主机部分(域名)为 'generativelanguage.googleapis.com'
    url.host = 'generativelanguage.googleapis.com';

    let newRequestInit = {
      method: request.method,
      headers: new Headers(request.headers),
      // 保持请求的其他属性,例如 credentials, cache 等(如果需要)
      // 可以根据具体需求添加
    };

    // 检查请求路径中是否包含 'gemini-2.0-flash-exp'
    if (url.pathname.includes('gemini-2.0-flash-exp')) {
      try {
        // 解析原始请求的 JSON body
        const originalBody = await request.json();

        // 添加 "tools": [{"googleSearch": {}}] 到请求体
        const modifiedBody = {
          ...originalBody,
          tools: [
            {
              googleSearch: {}
            }
          ]
        };

        // 将修改后的 JSON 重新序列化为字符串
        const bodyString = JSON.stringify(modifiedBody);

        // 设置新的请求体和相应的头部
        newRequestInit.body = bodyString;

        // 确保 'Content-Type' 是 'application/json'
        newRequestInit.headers.set('Content-Type', 'application/json');
      } catch (error) {
        // 如果解析失败或其他错误,您可以选择如何处理
        // 例如,返回错误响应或继续不修改请求
        return new Response('Invalid JSON body', { status: 400 });
      }
    } else {
      // 如果不需要修改 body,可以直接使用原始请求的 body
      newRequestInit.body = request.body;
    }

    // 创建一个新的请求对象,并使用更新后的 URL 以及新的请求初始化选项
    const newRequest = new Request(url, newRequestInit);

    // 使用 fetch 函数发送新的请求,等同于将请求代理到了新的主机
    return fetch(newRequest);
  }
}
6 个赞

oneapi 支持 v1beta 的:

环境变量可以直接换的tieba_001

2 个赞

淦 还要切换主题才能设置 有点迷惑

刚知道 :melting_face:

gemini-1.5-flash-8b-exp-0827:v1beta,gemini-1.5-flash-exp-0827:v1beta,gemini-1.5-flash-latest:v1beta,gemini-1.5-pro-exp-0801:v1beta,gemini-1.5-pro-exp-0827:v1beta,gemini-exp-1114:v1beta,gemini-exp-1121:v1beta,gemini-exp-1206:v1beta,gemini-2.0-flash-exp:v1beta 这么配置丢进去就行

1 个赞

环境变量也可以的,二选一

1 个赞

oneapi,openwebui好像都支持

等等更新吧,newapi/oneapi后面应该会对新模型默认指定v1beta

你都转了 为啥不把 /v1/models转一下 :rofl:

难道要我又来水一帖吗? :yum:

1 个赞

还能用不, 我请求 2.0 现在直接 429了

注释掉联网的 tool, 就能正常使用了. 应该是联网搜索 炸锅勒

大佬,newapi如何配置呢,没看懂


看你有没有弄portainer 没有就改部署得yml
GEMINI_MODEL_MAP = 上面那串就行

我用的1panel,也可以在线编辑环境变量,意思加这个变量就可以了吗,需要设置里面配置什么吗

加上这个环境变量就行

好像没啥变化QAQ,我是今早才弄好newpi,接了两个github上公益的key,这个google的没有试过,一直不成功。。。

你这感觉都不是环境变量问题啊 最新得newapi?
我用的这位佬得
https://linux.do/t/topic/118684/48

好象没这问题了吧,newapi应该已经支持了,因为我直接添加就能用。那个搜索参数要能打开就好了,newapi不懂怎样设置

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。