mrhan1993 / Fooocus-API

FastAPI powered API for Fooocus
GNU General Public License v3.0
502 stars 131 forks source link

所有接口都调了一下,多数成功,但有 2 个接口是有问题的,麻烦帮忙看看如何解?谢谢! #327

Closed hqsh closed 1 month ago

hqsh commented 1 month ago

部署最新版本跑的,发现有如下两个接口有问题,反复核对接口文档,发现确认是有问题。

【问题1】/v1/tools/describe-image 接口,用如下接口文档中的代码执行 def describe_image(image: bytes, params: dict = {"type": "Photo"}) -> dict: """ describe-image """ response = requests.post(url=f"{base_url}/v1/tools/describe-image", params=params, files={"image": image}, timeout=30) return response.json() with open('image.png', 'rb') as f: image = f.read() describe_image(image)

服务器日志如下: INFO: 172.30.0.5:53108 - "POST /v1/engines/refresh-models HTTP/1.0" 404 Not Found 看代码似乎这个接口只有在 md 文档中,目前是否还没开发出来?

【问题2】/v2/generation/image-upscale-vary 接口 请求参数: {"image_seed": 123, "input_image": "http://10.1.2.32/aigc-s3/FOOOCUS-INPUT-test.png", "async_process": true, "image_number": 2} 服务异常了,报错日志如下,像是字符串没有转成枚举类型的错误?

INFO: 172.30.0.5:52470 - "POST /v2/generation/image-upscale-vary HTTP/1.0" 500 Internal Server Error ERROR: Exception in ASGI application

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/opt/conda/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi result = await app( # type: ignore[func-returns-value] File "/opt/conda/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in call return await self.app(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/fastapi/applications.py", line 1054, in call await super().call(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/applications.py", line 123, in call await self.middleware_stack(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/errors.py", line 186, in call raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/errors.py", line 164, in call await self.app(scope, receive, _send) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 189, in call with collapse_excgroups(): File "/opt/conda/lib/python3.10/contextlib.py", line 153, in exit self.gen.throw(typ, value, traceback) File "/opt/conda/lib/python3.10/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 191, in call response = await self.dispatch_func(request, call_next) File "/app/fooocusapi/api.py", line 32, in add_header_to_response response = await call_next(request) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/cors.py", line 85, in call await self.app(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 65, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 756, in call await self.middleware_stack(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 776, in app await route.handle(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 297, in handle await self.app(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 77, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 72, in app response = await func(request) File "/opt/conda/lib/python3.10/site-packages/fastapi/routing.py", line 278, in app raw_response = await run_endpoint_function( File "/opt/conda/lib/python3.10/site-packages/fastapi/routing.py", line 193, in run_endpoint_function return await run_in_threadpool(dependant.call, *values) File "/opt/conda/lib/python3.10/site-packages/starlette/concurrency.py", line 42, in run_in_threadpool return await anyio.to_thread.run_sync(func, args) File "/opt/conda/lib/python3.10/site-packages/anyio/to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( File "/opt/conda/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 2144, in run_sync_in_worker_thread return await future File "/opt/conda/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 851, in run result = context.run(func, *args) File "/app/fooocusapi/routes/generate_v2.py", line 109, in img_upscale_or_vary return call_worker(req, accept) File "/app/fooocusapi/utils/call_worker.py", line 58, in call_worker params = req_to_params(req) File "/app/fooocusapi/utils/api_utils.py", line 114, in req_to_params uov_method = flags.disabled if not isinstance(req, (ImgUpscaleOrVaryRequest, ImgUpscaleOrVaryRequestJson)) else req.uov_method.value AttributeError: 'str' object has no attribute 'value'

hqsh commented 1 month ago

刚刚还漏了提一个接口,如下 【问题3】图像反推接口 代码用的接口文档里面的示例,一开始以为图片上传可能中间节点有问题,但后来直接跑 docker 容器内执行,也是报错。 代码如下:

with open('/app/outputs/files/2024-05-14/112f3599-4fd5-46bd-bacd-bd044bfb35e6-0.png', 'rb') as f: ... image = f.read() ... response = requests.post(url="http://127.0.0.1:8000/v1/tools/describe-image", ... params=params, ... files={ ... "image": image ... }, ... timeout=30) 代码报错信息如下: Traceback (most recent call last): File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 466, in _make_request six.raise_from(e, None) File "", line 3, in raise_from File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 461, in _make_request httplib_response = conn.getresponse() File "/opt/conda/lib/python3.10/http/client.py", line 1375, in getresponse response.begin() File "/opt/conda/lib/python3.10/http/client.py", line 318, in begin version, status, reason = self._read_status() File "/opt/conda/lib/python3.10/http/client.py", line 279, in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") File "/opt/conda/lib/python3.10/socket.py", line 705, in readinto return self._sock.recv_into(b) TimeoutError: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/opt/conda/lib/python3.10/site-packages/requests/adapters.py", line 486, in send resp = conn.urlopen( File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 798, in urlopen retries = retries.increment( File "/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py", line 550, in increment raise six.reraise(type(error), error, _stacktrace) File "/opt/conda/lib/python3.10/site-packages/urllib3/packages/six.py", line 770, in reraise raise value File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 714, in urlopen httplib_response = self._make_request( File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 468, in _make_request self._raise_timeout(err=e, url=url, timeout_value=read_timeout) File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 357, in _raise_timeout raise ReadTimeoutError( urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=30)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "", line 3, in File "/opt/conda/lib/python3.10/site-packages/requests/api.py", line 115, in post return request("post", url, data=data, json=json, kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/api.py", line 59, in request return session.request(method=method, url=url, kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, send_kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/adapters.py", line 532, in send raise ReadTimeout(e, request=request) requests.exceptions.ReadTimeout: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=30)

docker 异常日志如下:

INFO: 172.30.0.5:36378 - "GET /files/2024-05-14/a235e39d-c35e-4c84-bde9-3a467827fc95-0.png HTTP/1.0" 200 OK 13%|█▎ | 4/30 [00:01<00:08, 3.21it/s]ERROR: Exception in ASGI application

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/opt/conda/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi result = await app( # type: ignore[func-returns-value] File "/opt/conda/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in call return await self.app(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/fastapi/applications.py", line 1054, in call await super().call(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/applications.py", line 123, in call await self.middleware_stack(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/errors.py", line 186, in call raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/errors.py", line 164, in call await self.app(scope, receive, _send) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 189, in call with collapse_excgroups(): File "/opt/conda/lib/python3.10/contextlib.py", line 153, in exit self.gen.throw(typ, value, traceback) File "/opt/conda/lib/python3.10/site-packages/starlette/_utils.py", line 93, in collapse_excgroups raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 191, in call response = await self.dispatch_func(request, call_next) File "/app/fooocusapi/api.py", line 32, in add_header_to_response response = await call_next(request) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 165, in call_next raise app_exc File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/base.py", line 151, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/cors.py", line 85, in call await self.app(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 65, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 756, in call await self.middleware_stack(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 776, in app await route.handle(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 297, in handle await self.app(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 77, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app raise exc File "/opt/conda/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "/opt/conda/lib/python3.10/site-packages/starlette/routing.py", line 72, in app response = await func(request) File "/opt/conda/lib/python3.10/site-packages/fastapi/routing.py", line 278, in app raw_response = await run_endpoint_function( File "/opt/conda/lib/python3.10/site-packages/fastapi/routing.py", line 193, in run_endpoint_function return await run_in_threadpool(dependant.call, values) File "/opt/conda/lib/python3.10/site-packages/starlette/concurrency.py", line 42, in run_in_threadpool return await anyio.to_thread.run_sync(func, args) File "/opt/conda/lib/python3.10/site-packages/anyio/to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( File "/opt/conda/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 2144, in run_sync_in_worker_thread return await future File "/opt/conda/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 851, in run result = context.run(func, args) File "/app/fooocusapi/routes/generate_v1.py", line 174, in describe_image result = interrogator(img) File "/opt/conda/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context return func(*args, *kwargs) File "/opt/conda/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context return func(args, kwargs) File "/app/repositories/Fooocus/extras/interrogate.py", line 28, in interrogate filename = load_file_from_url( File "/app/repositories/Fooocus/modules/model_loader.py", line 25, in load_file_from_url download_url_to_file(url, cached_file, progress=progress) File "/opt/conda/lib/python3.10/site-packages/torch/hub.py", line 620, in download_url_to_file u = urlopen(req) File "/opt/conda/lib/python3.10/urllib/request.py", line 216, in urlopen return opener.open(url, data, timeout) File "/opt/conda/lib/python3.10/urllib/request.py", line 519, in open response = self._open(req, data) File "/opt/conda/lib/python3.10/urllib/request.py", line 536, in _open result = self._call_chain(self.handle_open, protocol, protocol + File "/opt/conda/lib/python3.10/urllib/request.py", line 496, in _call_chain result = func(*args) File "/opt/conda/lib/python3.10/urllib/request.py", line 1391, in https_open return self.do_open(http.client.HTTPSConnection, req, File "/opt/conda/lib/python3.10/urllib/request.py", line 1351, in do_open raise URLError(err) urllib.error.URLError: <urlopen error [Errno 97] Address family not supported by protocol>

mrhan1993 commented 1 month ago

第一个问题是因为那个接口废弃了,因为和 all_models 重复 第二个,默认值给错了,很快修复 第三个,你要不确认下是不是地址端口错了?

hqsh commented 1 month ago

第一个问题是因为那个接口废弃了,因为和 all_models 重复 第二个,默认值给错了,很快修复 第三个,你要不确认下是不是地址端口错了?

端口地址没错,python 命令行如下的输入输出,我刚刚再次进入容器内,用同样的 ip、端口(http://127.0.0.1:8000),请求 all_models 接口正常的,图像反推不正常。

r=requests.get(url="http://127.0.0.1:8000/v1/engines/all-models",timeout=30) r.json() {'model_filenames': ['juggernautXL_v8Rundiffusion.safetensors', 'realisticStockPhoto_v10.safetensors', 'sd_xl_base_1.0_0.9vae.safetensors', 'sd_xl_refiner_1.0_0.9vae.safetensors'], 'lora_filenames': ['lqjty.safetensors', 'real_jty.safetensors', 'real_jty_v3.safetensors', 'sd_xl_offset_example-lora_1.0.safetensors', 'SDXL_FILM_PHOTOGRAPHY_STYLE_BetaV0.4.safetensors', 'sdxl_lcm_lora.safetensors', 'xxmix_ai_beauty.safetensors']} params = {"type": "Photo"} with open('/app/outputs/files/2024-05-15/b934fb14-4ef8-4076-b16b-7eebf61919b7-0.png', 'rb') as f: ... image = f.read() ... r=requests.post(url="http://127.0.0.1:8000/v1/tools/describe-image", params=params,files={"image": image},timeout=30) Traceback (most recent call last): File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 466, in _make_request six.raise_from(e, None) File "", line 3, in raise_from File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 461, in _make_request httplib_response = conn.getresponse() File "/opt/conda/lib/python3.10/http/client.py", line 1375, in getresponse response.begin() File "/opt/conda/lib/python3.10/http/client.py", line 318, in begin version, status, reason = self._read_status() File "/opt/conda/lib/python3.10/http/client.py", line 279, in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") File "/opt/conda/lib/python3.10/socket.py", line 705, in readinto return self._sock.recv_into(b) TimeoutError: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/opt/conda/lib/python3.10/site-packages/requests/adapters.py", line 486, in send resp = conn.urlopen( File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 798, in urlopen retries = retries.increment( File "/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py", line 550, in increment raise six.reraise(type(error), error, _stacktrace) File "/opt/conda/lib/python3.10/site-packages/urllib3/packages/six.py", line 770, in reraise raise value File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 714, in urlopen httplib_response = self._make_request( File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 468, in _make_request self._raise_timeout(err=e, url=url, timeout_value=read_timeout) File "/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py", line 357, in _raise_timeout raise ReadTimeoutError( urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=30)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "", line 1, in File "/opt/conda/lib/python3.10/site-packages/requests/api.py", line 115, in post return request("post", url, data=data, json=json, kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/api.py", line 59, in request return session.request(method=method, url=url, kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, send_kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, kwargs) File "/opt/conda/lib/python3.10/site-packages/requests/adapters.py", line 532, in send raise ReadTimeout(e, request=request) requests.exceptions.ReadTimeout: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=30)

并且我试了 8888 端口,两个接口都不通:requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8888): Max retries exceeded with url: /v1/engines/all-models (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f6926813040>: Failed to establish a new connection: [Errno 111] Connection refused'))

hqsh commented 1 month ago

没有用 8888 端口是因为我们这边部署的时候有冲突,所以用 8000 端口了。

mrhan1993 commented 1 month ago

你把timeout给成300再试试,手动下载 https://huggingface.co/lllyasviel/misc/resolve/main/model_base_caption_capfilt_large.pth 放到 repositories/Fooocus/models/ 下边再试试

hqsh commented 1 month ago

你把timeout给成300再试试,手动下载 https://huggingface.co/lllyasviel/misc/resolve/main/model_base_caption_capfilt_large.pth 放到 repositories/Fooocus/models/ 下边再试试

是模型文件没下载成功导致,需要翻墙。解决了谢谢