提问人:chris_conrad 提问时间:11/13/2023 更新时间:11/13/2023 访问量:26
从 Python 路由接收 JavaScript 中的生成器流对象时出现问题(415 不支持的媒体类型错误)
Problem with receiving a generator stream object in JavaScript from Python route (415 unsupported media type error)
问:
我是在 Python?flask 中处理生成器对象的新手,并且在将响应从 Flask 服务器流式传输到 Javascript 前端时遇到了以下问题。
我定义了一个如下所示的 Flask 路由,它从 OpenAI 模型获取响应并以令牌流的形式生成结果。 此路由由按钮单击(POST 请求)触发。这效果很好,我可以看到令牌出现在 Pyhon 控制台中。
@app.route('/send-to-chat', methods=['POST', 'GET'])
def send_chat():
global index
data = request.get_json()
text_input = data['text']
context = data['ctx']
lang = data['lang']
vname = data['vname']
vemail = data['vemail']
words = data['words']
response = get_chat_response(text_input, context, index, lang, vname,vemail, words)
def generate():
responseFull = ''
for word in response:
data = "data:"+word+"\n\n"
#print(data)
yield data
return Response(stream_with_context(generate()),content_type='text/event-stream')
然后我想在 JavaScript 客户端中接收此流数据。为了实现这一点,我使用了以下代码片段:
var eventSource;
function startEventSource(user, code, previousText) {
wordContainer = document.getElementById('chatbox');
eventSource = new EventSource("/send-to-chat");
eventSource.onopen = function(event) {
console.log("Connection established.");
};
eventSource.onerror = function(event) {
if (event.target.readyState === EventSource.CLOSED) {
console.log("Connection closed with error. Attempting to reconnect...", event);
// Attempt to reconnect after a delay.
setTimeout(startEventSource, 5000);
} else {
console.error("Error occurred:", event);
}
};
eventSource.onmessage = function(event) {
console.log(event.data);
wordContainer.innerHTML = previousText+'<br><br>'+event.data;
};
}
但是,我总是收到 415 错误(不支持媒体类型),并且连接会自动关闭。 我怀疑我需要对路由中的 POST(聊天触发器)和 GET 方法(事件流)做出不同的响应,但我就是找不到合适的方法来做到这一点。任何建议将不胜感激!谢谢!
答: 暂无答案
评论