当前位置: 首页 > news >正文

gradio RuntimeError: async generator raised StopAsyncIteration

主要是return和yield混用导致的,yield是可以流式回复,return一次性回答;需要通义,都改成yield,但不是流式的内容需要最后再加个return

移除了所有的 return 语句,改为 yield 加 return。在生成器函数中,return 用来终止生成器。
简化了代码结构,使每个分支都遵循相同的模式:

生成内容
yield 内容
return 终止生成器

所有返回值都通过 yield 发送,确保了统一的数据流模式。
错误处理也使用相同的模式,确保错误信息也通过 yield 发送。

def process_content(content):"""Helper function to handle both streaming and non-streaming content"""if isinstance(content, str):yield contentelse:yield from contentdef process_query(query):messages = [{"role": "system", "content": prompt}, {"role": "user", "content": "\n"+query}]message = send_messages(messages)print(type(message), message)if "json" in message:match = re.search(r'json(.*?)```', message, re.DOTALL)json_str = match.group(1)data = json.loads(json_str)print(type(data), data)if "response" in data:if data["response"]:print(data["response"])yield data["response"]returnagent_str = data["action"][0]# Free chat handlingif "free_chat" in agent_str:try:content = agent_str.split("'")[1]messages_all.append({"role": "user", "content": content})stream = send_messages_stream(messages_all)contents = ""for chunk in stream:contents += chunk.choices[0].delta.contentyield contentsreturnexcept:pass# Hotel checkingif "check_hotel" in agent_str:try:results = eval(agent_str)if isinstance(results, str):yield resultsreturnresult_lists = []for num, result in enumerate(results):result_lists.append([num+1, result["hotelName"],result["address"],result["minRoomPrice"]])hotels_str = "\n".join([", ".join(map(str, hotel)) for hotel in result_lists])yield hotels_strreturnexcept Exception as e:print(e)yield "没有找到合适酒店,也可以通过下面链接查询:https://ai.118114.cn/h5/subpackage/travel/hotel"return# Flight checkingif "check_flight" in agent_str:try:results = eval(agent_str)if isinstance(results, str):yield resultsreturnresult_lists = []for num, result in enumerate(results):result_lists.append([num+1,result["departureAirportName"],result["arrivalAirportName"],result["disAmt"],result["airlineName"],result["deptm"],result["arrtm"]])flight_str = "\n".join([", ".join(map(str, flight)) for flight in result_lists])yield flight_strreturnexcept Exception as e:print(e)yield "没有找到合适机票,可以通过下面链接查询:https://ai.118114.cn/h5/subpackage/travel/plane"return# Train checkingif "check_train" in agent_str:try:results = eval(agent_str)if isinstance(results, str):yield resultsreturnresult_lists = []for num, result in enumerate(results):result_lists.append([num+1,result["trainCode"],result["startStationName"],result["endStationName"],result["lowestPriceStr"]])train_str = "\n".join([", ".join(map(str, train)) for train in result_lists])yield train_strreturnexcept Exception as e:print(e)yield "没有找到合适火车票,可以通过下面链接查询:https://ai.118114.cn/h5/subpackage/travel/train"returnyield agent_strreturnelse:if "response" in message:data = json.loads(message)if data["response"]:yield data["response"]returnelif "action" in message:data = json.loads(message)agent_str = data["action"][0]# Handle each action type using the same pattern as above# Free chatif "free_chat" in agent_str:try:content = agent_str.split("'")[1]messages_all.append({"role": "user", "content": content})stream = send_messages_stream(messages_all)contents = ""for chunk in stream:contents += chunk.choices[0].delta.contentyield contentsreturnexcept:pass# Rest of the action handlers follow the same pattern...yield agent_strreturnelse:yield messagereturnclient = OpenAI(base_url="https://api.deepseek.com", api_key="sk****")gr.ChatInterface(process_query, title="118114智能体出行查询").launch(server_name="0.0.0.0",server_port=8888,show_error=True,debug=True
)

http://www.mrgr.cn/news/62386.html

相关文章:

  • WPF中设置DataGrid的常用样式
  • 【Unity】鼠标点击获取世界坐标位置:物体移动至鼠标点击的位置
  • 算法笔记day10
  • 哈工大《理论力学》第九版课后答案解析及笔记PDF
  • 手动写一个new
  • 数据源分层开发和连接池
  • 阿里巴巴API返回值全解析:轻松掌握1688店铺商品信息
  • 【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式
  • SAP ABAP开发学习——第一代增强(包含增强演示)
  • BOE(京东方)2024年前三季度净利润三位数增长 “屏之物联”引领企业高质发展
  • java-数据结构
  • C++学习:类和对象(二)
  • AI时代,哪种人更被需要?
  • 【传知代码】自动化细胞核分割与特征分析
  • flowable7.1.0功能
  • 单例 C++ 懒汉+恶汉
  • 前端面试题21 | 了解过媒体查询吗?它有哪些应用场景?
  • 《JVM第4课》程序计数器
  • 注册信息的提交
  • 不适合的学习方法
  • (5)数组
  • 【SAP FICO】八大业务_6货币资金管理
  • 数据采集-Kepware OPCUA 服务器实现
  • CNN在线识别手写中文
  • 返回数组中元素的数据类型numpy.dtype.name
  • 四季皆宜的网球场:气膜网球馆改造方案—轻空间