执行快速 API 代码时出现此错误fastapi.exceptions.FastAPIError: Invalid args for response field! Hint: check that <class 'main.SoluteSolvent'> is a valid pydantic field type
class SoluteSolvent():
solvent: Text
solute: Text
response = {}
@app.get('/predict')
def predict(sol:SoluteSolvent):
data = sol.dict()
solute = data['solute']
solvent = data['solvent']
results = predictions(solute, solvent)
print(results)
response["predictions"] = results[0].item()
response["interaction_map"] = (results[1].detach().numpy()).tolist()
return {'result':response}
Run Code Online (Sandbox Code Playgroud)
我实际上试图在快速 API 中复制我为 Flask 中的预测编写的代码。
response = {}
@app.route('/predict', methods=["POST", "GET"])
def predict():
if request.method=='POST':
solute = request.form["solute"]
solvent = request.form["solvent"]
else:
solute = request.args.get("solute")
solvent = request.args.get("solvent")
results = predictions(solute, solvent)
response["predictions"] = results[0].item()
response["interaction_map"] = (results[1].detach().numpy()).tolist()
return flask.jsonify({'result': response})
Run Code Online (Sandbox Code Playgroud)
use*_*462 13
该错误表明您传递给的类型predict必须是 pydantic BaseModel(或来自 FastApi 0.67.0 版本的数据类)。但是,它不会以这种方式工作(至少在获取请求时),如果您想传递查询参数(建议的解决方案),请在函数中列出它们:
@app.get('/predict')
def predict(solute: str, solvent: str):
print(solute, solvent)
Run Code Online (Sandbox Code Playgroud)
并使用模型进行发布请求(需要正文中的数据):
from pydantic import BaseModel
class SoluteSolvent(BaseModel):
solvent: str
solute: str
@app.post('/predict')
def predict(sol:SoluteSolvent):
print(sol.solute)
Run Code Online (Sandbox Code Playgroud)
或者可以直接使用底层starlette Request
from fastapi import Request
async def predict(r: Request):
print(r.query_params["solute"])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36156 次 |
| 最近记录: |