Litestar GET function blocks OpenAI

news2024/11/27 8:35:28

题意:Litestar GET 函数阻塞 OpenAI

问题背景:

When I transfer function to litestar, it suddenly stops OpenAI from returning a completion. I can print to console every declared variable except answer:

当我将函数传递给 litestar 时,它突然阻止了 OpenAI 返回完成结果。我可以打印到控制台中声明的每个变量,除了答案之外。

from dotenv import load_dotenv
from litestar import Controller, Litestar, get
from litestar.types import ControllerRouterHandler

import os
import pinecone
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Pinecone
from dotenv import load_dotenv
import openai


__all__ = (
    "index",
    "support",
)

load_dotenv()

embeddings = OpenAIEmbeddings()

@get("/")
async def index() -> str:
    return "Тестовый запрос выполнен. Чтобы получить ответ, воспользуйтесь командой /support/{вопрос%20вопрос}."

@get("/support/{question:str}")
async def get_answer(question: str) -> str:
    
    pinecone.init(
        api_key=os.getenv("PINECONE_API_KEY"),
        environment=os.environ.get('PINECONE_ENVIRONMENT'),
    )

    index_name = os.environ.get('PINECONE_INDEX_NAME')

    k = 2

    docsearch = Pinecone.from_existing_index(index_name, embeddings)
    res = docsearch.similarity_search_with_score(question, k=k)

    prompt = f'''
    Use text below to compile an answer:
    {[x for x in res]}
    '''

    completion = openai.Completion.create(
        model="text-davinci-003",
        prompt=prompt,
        max_tokens = 1000
    )

    answer = completion.choices[0].text
    return {"answer": answer}


routes: list[ControllerRouterHandler] = [
    get_answer
]

app = Litestar([index, get_answer])

Though bare OpenAI script works fine:        尽管纯 OpenAI 脚本工作正常

import os
import pinecone
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Pinecone
from dotenv import load_dotenv
import openai
    
load_dotenv()

# Подготовим эмбеддинги
embeddings = OpenAIEmbeddings()

pinecone.init(
    api_key=os.getenv("PINECONE_API_KEY"),
    environment=os.environ.get('PINECONE_ENVIRONMENT'),
)

index_name = os.environ.get('PINECONE_INDEX_NAME')

query = input("Enter your question: ")
k = 2

docsearch = Pinecone.from_existing_index(index_name, embeddings)
res = docsearch.similarity_search_with_score(query, k=k)

prompt = f'''
Use text below to compile an answer:
{[x for x in res]}
'''


completion = openai.Completion.create(
  model="text-davinci-003",
  prompt=prompt,
  max_tokens = 1000
)

print(completion.choices[0].text)

pip freeze:        pip freeze 命令得到的结果

litestar==2.2.1
openai==0.27.8
pinecone-client==2.2.2

Litestar keeps showing 500 Internal Server Error without details. index() works fine. What can I do to resolve this issue?

Litestar 一直显示 500 内部服务器错误但没有详细信息。index() 函数工作正常。我该如何解决这个问题?

问题解决:

Here is a minimal example using Litestar that has the same problem you would face.

这是一个使用 Litestar 的最小示例,它会遇到与你相同的问题。

from litestar import Litestar, get

@get()
async def get_answer() -> str:
    return {'hello': 'world'}

app = Litestar([get_answer])

Making a GET request to localhost:8000 returns

向 localhost:8000 发送 GET 请求返回...

{"status_code":500,"detail":"Internal Server Error"}

If you turn on debug mode like so app = Litestar([get_answer], debug=True) the following error is shown when you make the same request.

如果你像这样开启调试模式 app = Litestar([get_answer], debug=True),当你发送相同的请求时,会显示以下错误。

500: Unable to serialize response content

This is because you have mentioned the return type as str in async def get_answer(question: str) -> str: but in your actual code you are returning a dict. Litestar uses the return type of the function to serialize the data. Converting a str to dict fails.

这是因为你在 async def get_answer(question: str) -> str: 中将返回类型指定为 str,但在你的实际代码中你却返回了一个 dict。Litestar 使用函数的返回类型来序列化数据。将 str 转换为 dict 失败了。

In your example index works fine because the return type and the actual return value are the same str.

在你的例子中,index 函数工作正常,因为返回类型和实际返回值都是相同的 str(字符串)。

The fix is to use the correct return type for get_answerdict[str, str] or even plain dict is enough.

修复方法是使用正确的返回类型给 get_answer。使用 dict[str, str] 或者简单的 dict 就足够了

from litestar import Litestar, get

@get()
async def get_answer() -> dict[str, str]:
    return {'hello': 'world'}

app = Litestar([get_answer])

If you are on 3.8, you can use typing.Dict instead of dict.

如果你使用的是 Python 3.8 或更高版本,你可以使用 typing.Dict 而不是 dict 来明确指定字典的键和值的类型

from typing import Dict
from litestar import Litestar, get

@get()
async def get_answer() -> Dict:
    return {'hello': 'world'}

app = Litestar([get_answer])

PS:

Though bare OpenAI script works fine:   尽管直接使用 OpenAI 的脚本也能正常工作

This is why I removed the OpenAI parts and only focused on the litestar ones. If you have an error in that you would still get a 500 error, you will have to fix that separately.

这就是为什么我去掉了 OpenAI 的部分,只专注于 litestar 的部分。如果你在那里有错误,你仍然会得到一个 500 错误,你需要单独修复它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解析蚂蚁T21 190T 算力与能效的新突破

蚂蚁T21 190T 的参数如下: ● 产生币种:B & T & C ● 额定算力:190T ● 额定功耗:3610W ● 功耗比:19.0J/T ● 额定电压:380~415V ● 芯片参数:采用全新的5nm芯片技术&#xff08…

Linux笔记 --- Linux内核链表

Linux 内核链表 经过上一小节的分析,我们知道了传统链表的先天缺陷:没有将具体的数据从组织这些数据的逻辑结构中剥离,而Linux内核链表的思路,正是从一方面着手,追根溯源直抵病灶,彻底颠覆了传统链表&…

Linux内网环境部署thingsboard(离线部署)

先说明一下内网部署的环境,我这里是安装的thingsboard3.6.4 下面所有环境包的版本都是基于这个版本 我们需要安装jdk11,postgres数据库,这里注意下jdk必须使用rpm方式安装,要不后面安装Thingsboard会提示你没有检测到jdk. 下面我们就一步一步来 1.先下…

同城货运软件开发货运搬家系统源码基于Java开发的货运平台

一.管理端配置及操作 1.服务配置 添加:服务,给服务添加车型和车厢,以及收费金额 2.用户中心 分为普通用户 师傅用户 和推广员用户; 推广员用户的一二级分佣不为0,可给推广员设置一二级佣金 3.车厢/车型管理 给服务添加车厢 和车型,选择 服务后,只能选择该服务关联的车型和…

Tomato靶机~文件包含日志

寻找网站上传点并把 php 恶意代码文件改成 jpg 上传到网站上在本地包含引入恶意代码,当文件被引入后代码就被执行; 0x01信息收集 # 环境准备: Target IP:192.168.66.143 Attack IP:192.168.66.84 靶机目标&#xff1…

无缝协作的艺术:Codigger 视频会议(Meeting)的用户体验

在当今数字化的时代,远程协作已经成为工作和学习中不可或缺的一部分。然而,远程协作也面临着诸多挑战,如沟通不畅、信息同步不及时、协作工具的复杂性等。而 Codigger 视频会议(Meeting)作为一款创新的工具&#xff0c…

伦敦银和伦敦金的关系是怎么样的?

在贵金属投资市场中,有两个品种是经常被投资者讨论的,一个是伦敦银,而另外一个是伦敦金,他们的名字很相似,那实际上他们有何关系呢?下面我们就来简单地讨论一下。 伦敦银其实也叫国际现货白银,是…

探索3D视觉中的Transformer架构:通用Backbone与自适应采样策略 !

1 Introduction 计算机视觉中的一个基本问题是在三维空间中理解和识别场景与物体。它允许以紧凑的方式表达关系,并提供在现实世界中导航和操作的能力。3D视觉在各个领域都发挥着重要作用,包括自动驾驶、机器人技术、遥感、医疗、增强现实、设计行业等众…

【Nuxt】初识 Nuxt 和目录说明

初识 Nuxt Nuxt3 支持 Vue3 及其周边生态,提供前后端功能,支持 CSR(SPA),SSR,SSG 渲染模式的应用。 Nuxt3 特点: Vue技术栈 Nuxt3是基于Vue3Vue RouterVite等技术栈,全程Vue3Vite开发体验(Fast)。 自动导…

6大类果蔬食物百科大全ACCESS数据库

其实今天这个数据库早些时候就已经搞到了,但是鉴于它的多表结构不太喜欢就一直没有整理,然而现在仔细看起来,又觉得这种安排好处还是很好的,清晰明了。发上来看看有没有朋友喜欢,包含了水果类、蔬菜类、坚果类、肉类、…

xss漏洞(二,xss靶场搭建以及简单利用)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 一,环境搭建。 使用工具:PHP study,dvwa靶场。 1,GitHub上下载dvwa到PHP study的WWW文件夹内,并解压。 dvwa下载地址 …

3D Web轻量引擎HOOPS Communicator处理大模型时有哪些优化技巧?

在当今的工程设计和可视化领域,大型3D模型变得越来越普遍。然而,这些模型的复杂性和体量给传统的渲染技术带来了挑战。HOOPS Communicator,作为一个高性能的3D可视化工具,提供了一系列的优化技巧,以提高大型模型的渲染…

ARMxy工业计算机支持BACnet推动智能楼宇能源管控升级

城市化进程的加速,智能楼宇成为了未来建筑的发展趋势。而能源管控作为智能楼宇的重要组成部分,对于实现节能减排、提高能源利用效率具有至关重要的意义。ARMxy 工业计算机作为一种高性能、低功耗的计算平台,为智能楼宇能源管控提供了全新的解…

【砖墙】python刷题记录

R4-哈希表 这题不就是射箭那道题?! 很类似好吧 【用最少数量的箭引爆气球】python刷题记录 哈希表前缀和秒杀! class Solution:def leastBricks(self, wall: List[List[int]]) -> int:dictdefaultdict(int)nlen(wall)for i in range(n)…

酒店民宿小程序搭建,用户在线一键预订!

近几年,我国旅游业发展非常迅速,同时也带动了酒店民宿的发展。因此,为了提升游客的住宿体验,各大酒店民宿也纷纷开始发展专属的预约小程序,让用户可以在小程序上更加快速便利的查看酒店信息,预订心仪的房间…

中小微企业必看:税贷票贷融资策略与实战技巧

各位中小微企业的老板们,今天咱们来聊聊个实用话题——税贷和票贷,少部分朋友可能还觉得挺新鲜。别看它们听起来有点专业,其实搞懂了,融资就能变得简单又高效。 一、啥是税贷票贷? 税贷票贷,说白了&#x…

服务治理-Nacos

介绍 思考 什么是服务治理 常见的注册中心 Zonnkeeper Eureka Consull Nacos(服务治理 配置中心) Nacos实战入门 修改bin–>startup.smd 把集群模式改为单列模式 问题:如果出现一闪而过,要看jdk环境变量有没有配置,jdk是不是8以上 …

信息采集器pda手持机二维码扫描手持终端

随着物联网技术不断发展,在信息技术日新月异的今天,信息采集器PDA(Personal Digital Assistant)手持机,特别是具备二维码扫描功能的手持终端,已经成为众多行业不可或缺的智能化工具。它们不仅极大地提升了数据收集的效率与准确性&…

飞机机翼弹性、桥梁晃动频率,重要的流固耦合FSI如何用技术解决

背景介绍 最初的流固耦合FSI(Fluid-Solid Interaction)专指研究流体载荷对弹性结构的影响,例如飞机机翼气动弹性问题,船舶螺旋桨的水弹性问题,核反应堆燃料棒的涡激振动问题等等。在数值仿真领域FSI概念扩展到一般性的CFD模型和FEA模型的数据…

OB08/FAGL_FCV--维护汇率/外币重估

OB08:汇率维护 一般使用M类型。 重估汇率维护为PND。(每个月底都维护最新的汇率) FAGL_FCV:外币余额重估(使用刚刚维护的最新的汇率对系统内外汇余额进行重估) 关键日期是以哪一天的汇率来进行重估 下面…