Flow with http doesn't support docarray float attribute
ZiniuYu opened this issue · 0 comments
ZiniuYu commented
Describe the bug
The flow will raise an error when sending float in HTTP. GRPC works fine
from typing import Optional
from docarray import BaseDoc, DocList
from jina import Flow, Executor, requests
class DummyDoc(BaseDoc):
number: float
class DummyExecutor(Executor):
@requests
def foo(self, docs: DocList[DummyDoc], **kwargs) -> DocList[DummyDoc]:
result: DocList[DummyDoc] = DocList[DummyDoc]()
for d in docs:
result.append(DummyDoc(number=d.number * 2))
return result
with Flow(protocol='http').add(uses=DummyExecutor) as f:
result = f.post(on='/foo', inputs=DocList([DummyDoc(number=0.5)]))
print(result[0].number)
Throws
Traceback (most recent call last):
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/jina/serve/runtimes/worker/request_handling.py", line 1049, in process_data
result = await self.handle(
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/jina/serve/runtimes/worker/request_handling.py", line 647, in handle
len_docs = len(requests[0].docs) # TODO we can optimize here and access the
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/jina/types/request/data.py", line 278, in docs
return self.data.docs
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/jina/types/request/data.py", line 47, in docs
self._loaded_doc_array = self.document_array_cls.from_protobuf(
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/docarray/array/doc_list/doc_list.py", line 310, in from_protobuf
return super().from_protobuf(pb_msg)
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/docarray/array/doc_list/io.py", line 122, in from_protobuf
return cls(cls.doc_type.from_protobuf(doc_proto) for doc_proto in pb_msg.docs)
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/docarray/array/doc_list/doc_list.py", line 130, in __init__
super().__init__(docs)
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/docarray/array/doc_list/doc_list.py", line 157, in _validate_docs
for doc in docs:
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/docarray/array/doc_list/io.py", line 122, in <genexpr>
return cls(cls.doc_type.from_protobuf(doc_proto) for doc_proto in pb_msg.docs)
File "/opt/anaconda3/envs/py310/lib/python3.10/site-packages/docarray/base_doc/mixins/io.py", line 250, in from_protobuf
return cls(**fields)
File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for DummyDoc
number
none is not an allowed value (type=type_error.none.not_allowed)
Deployment dones't have such issues
with Deployment(protocol='http', uses=DummyExecutor) as f:
result = f.post(on='/foo', inputs=DocList([DummyDoc(number=0.5)]))
Describe how you solve it
Environment
Screenshots