总算也让我的OpenWebUI 用上Gemini联网了

参考我的worker.js:

/**
 * Welcome to Cloudflare Workers! This is your first worker.
 *
 * - Run "npm run dev" in your terminal to start a development server
 * - Open a browser tab at http://localhost:8787/ to see your worker in action
 * - Run "npm run deploy" to publish your worker
 *
 * Learn more at https://developers.cloudflare.com/workers/
 */


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();

        originalBody.safetySettings = [
          {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
          {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
          {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"},
          {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE"},
          {"category": "HARM_CATEGORY_CIVIC_INTEGRITY", "threshold": "BLOCK_NONE"}
        ];

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

        // 将修改后的 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);
  }
}
2 个赞

厉害呀!

太强了佬! :tieba_013:

不存在。

那佬放在cherry需要加什么后缀嘛

cloudflare worker添加自定义域名。

佬 我测试了在cherry有时候能连有时候不能连 不知道为啥,但curl中都是可以联网

我都是后面接new-api,以免IP受阻。cloudflare里有些地区的ip可能不在google服务区。

谢谢佬,不过配置了之后,在Cherry Studio还是不行 :lark_046:。估计是Cherry Studio不支持吧。

不要在google里选模型,在openai里选择gemini模型。接new-api后,里面的模型应该是统一OpenAI格式。

佬是直接cf转发嘛 还是又通过new-api转发了一下,我直接cf转发还是无法联网 :sob:

1、在cloudflare里创建worker,粘贴上述代码,自定义域名。
2、在new-api里新建渠道,选gemini,代理为你的worker域名,添加模型gemini-2.0-flash-exp
3、客户端添加OpenAI的链接为你的new-api域名和令牌,openai模型里选择gemini-2.0-flash-exp就行了。

我悟了佬 谢谢佬

学习了!

有用的知识又增加了,感谢佬友分享!:+1:

感谢分享

怎么有时候会回答英文??