songquanpeng / one-api

OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用. OpenAI key management & redistribution system, using a single API for all LLMs, and features an English UI.
https://openai.justsong.cn/
MIT License
18.53k stars 4.18k forks source link

为什么/v1/chat/completions使用Transfer-Encoding: chunked #528

Open oldunclez opened 1 year ago

oldunclez commented 1 year ago

fastgpt把/v1/chat/completions发给one-api ,one-api 再分发到下游open-ai compatible api server。

fastgpt的原始http request中是包含了Content-Length header,但是one-api就没有用这个header,使用了Transfer-Encoding: chunked。

text-generation-webui 的open-ai compatible api server的实现中/app/extensions/openai/script.py ,是要依赖这个Content-Length header。所以text-generation-webui收到/v1/chat/completions后会报错。

    def do_POST(self):
        debug_msg(self.requestline)
        debug_msg(self.headers)

        content_length = int(self.headers['Content-Length'])
        body = json.loads(self.rfile.read(content_length).decode('utf-8'))

请问下为什么one-api使用Transfer-Encoding: chunked? 谢谢!

songquanpeng commented 1 year ago

stream 模式下本身就要用 chunked