obteniendo este error al ejecutar el código API rápido 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}De hecho, estaba tratando de replicar el código que escribí para la predicción en el matraz en una API rápida.
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})El error dice que su tipo que pasa para predict debe ser pydantic BaseModel (o clase de datos de la versión 0.67.0 de FastApi). Sin embargo, no funcionará de esa manera (al menos en la solicitud de obtención), si desea pasar parámetros de consulta (solución sugerida), enumérelos en la función:
@app.get('/predict') def predict(solute: str, solvent: str): print(solute, solvent)Y use el modelo para la solicitud posterior (que espera datos en el cuerpo):
from pydantic import BaseModel class SoluteSolvent(BaseModel): solvent: str solute: str @app.post('/predict') def predict(sol:SoluteSolvent): print(sol.solute)O puede usar directamente la solicitud starlette subyacente
from fastapi import Request async def predict(r: Request): print(r.query_params["solute"])