Closed
Description
Hi,
I'm developing a cog model that requires a dependeny, which needs pydantic >2.
Now, I'm noticing an issue with optional image inputs. The model returns an error in that case. I'll provide a minimal working example:
from cog import BasePredictor, Path, Input
class Predictor(BasePredictor):
def predict(
self,
test_image: Path = Input(description="Test image", default=None),
) -> Path:
"""Run a single prediction on the model"""
return Path("./hello.webp")
build:
python_version: "3.11"
python_packages:
- "pydantic==2.1.0"
predict: "predict.py:Predictor"
Runs perfectly fine with cog predict -i test_image=@...; however with no input it gives this error:
{"logger": "uvicorn.error", "timestamp": "2025-03-17T11:30:06.489188Z", "exception": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py\", line 401, in run_asgi\n result = await app( # type: ignore[func-returns-value]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py\", line 70, in __call__\n return await self.app(scope, receive, send)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/fastapi/applications.py\", line 1054, in __call__\n await super().__call__(scope, receive, send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/applications.py\", line 112, in __call__\n await self.middleware_stack(scope, receive, send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py\", line 187, in __call__\n raise exc\n File \"/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py\", line 165, in __call__\n await self.app(scope, receive, _send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py\", line 62, in __call__\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py\", line 53, in wrapped_app\n raise exc\n File \"/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py\", line 42, in wrapped_app\n await app(scope, receive, sender)\n File \"/usr/local/lib/python3.11/site-packages/starlette/routing.py\", line 714, in __call__\n await self.middleware_stack(scope, receive, send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/routing.py\", line 734, in app\n await route.handle(scope, receive, send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/routing.py\", line 288, in handle\n await self.app(scope, receive, send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/routing.py\", line 76, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File \"/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py\", line 53, in wrapped_app\n raise exc\n File \"/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py\", line 42, in wrapped_app\n await app(scope, receive, sender)\n File \"/usr/local/lib/python3.11/site-packages/starlette/routing.py\", line 73, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/fastapi/routing.py\", line 301, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/fastapi/routing.py\", line 212, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/cog/server/http.py\", line 364, in predict\n return await _predict(\n ^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/cog/server/http.py\", line 470, in _predict\n _ = response_type(**response_object)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/pydantic/main.py\", line 159, in __init__\n __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)\n File \"/usr/local/lib/python3.11/site-packages/cog/types.py\", line 205, in validate\n filename=get_filename(value),\n ^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/site-packages/cog/types.py\", line 405, in get_filename\n basename = urllib.parse.unquote_plus(basename)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/urllib/parse.py\", line 808, in unquote_plus\n string = string.replace('+', ' ')\n ^^^^^^^^^^^^^^^^^^^^^^^^\nTypeError: a bytes-like object is required, not 'str'", "severity": "ERROR", "message": "Exception in ASGI application\n"}
I'm on cog version 0.14.1
Thanks!!
Metadata
Metadata
Assignees
Labels
No labels