jan
jan copied to clipboard
bug: The web return something went wrong when navigating to a remote server's IP
Describe the bug I've started a jan by docker running on-prem on a remote server, but when I connect to the IP, it shows that something went wrong, such as "Loading chunk 345 failed","Loading chunk 786 failed".
Steps to reproduce Steps to reproduce the behavior: I've followed the steps as well as https://jan.ai/docs/server-installation/onprem, and running by "sudo docker compose --profile cpu-fs up -d". I've try both default IP and my public IP address.
Screenshots
Environment details
- Operating System: Ubuntu 22.04
- Jan Version: latest 28/4/2024
@kian-zhao Have you tried the solution in this https://github.com/janhq/jan/issues/2806 Basically, have to update API_BASE_URL in the .yml file.
I have updated API_BASE_URL as my remote server IP in the .yml file like http://xxx.xxx.xx.xx:1337, but it returned the same thing when I open the remote server IP. Can you give me some example that I can't open the link in the #2806 ? Maybe I make something wrong but I don't realize it. @zytoh0
i have setup the application on premise using https://jan.ai/docs/server-installation/onprem Linux Ubuntu 22:04LTS it says: Before installing the Jan server, ensure that you have the following requirements:
NVIDIA GPU with CUDA Toolkit 11.7 or higher NVIDIA driver 470.63.01 or higher NVIDIA Container Toolkit
I am assuming that is a typo and that NVIDIA is only needed if you are using the GPU/NVIDIA options. Please confirm that my assumption about minimum requirements is correct
I am running app_cpu_fs option
I changed API_BASE_URL to http://mypublicaddress:1337 when I goto that I get the Swagger page
However in looking in the Google Chrome console I get several errors af this url: http://mypublicaddress:1337/v1/app/invokeExtensionFunc
curl -v -L http://mypublicaddress:1337 gives me the Swagger page just fine.
I cannot access anything /v1 the js keeps looping and the page size keeps growing.
curl -v -L http://mypublicaddress:1337/v1/app/invokeExtensionFunc is an error.
curl -v -L http://mypublicaddress:1337/v1/app/invokeExtensionFunc
- Trying
- Connected to mypublicaddress port 1337
GET /v1/app/invokeExtensionFunc HTTP/1.1 Host: mypublicaddress:1337 User-Agent: curl/8.4.0 Accept: /
< HTTP/1.1 404 Not Found < vary: Origin < access-control-allow-origin: * < content-type: application/json; charset=utf-8 < content-length: 98 < Date: Sun, 12 May 2024 15:18:23 GMT < Connection: keep-alive < Keep-Alive: timeout=72 <
- Connection #0 to host mypublicaddress left intact {"message":"Route GET:/v1/app/invokeExtensionFunc not found","error":"Not Found","statusCode":404}%
Google console:
Errors are repeated several times: POST http://mypublisaddress:1337/v1/app/invokeExtensionFunc net::ERR_CONNECTION_REFUSED invokeExtensionFunc @ 872-642984574cb5f955.js:2789 executeOnMain @ index.js:506 getResourcesInfo @ index.js:2201 (anonymous) @ page-d93a91fe9b730094.js:11605 (anonymous) @ page-d93a91fe9b730094.js:11636 setInterval (async) watch @ page-d93a91fe9b730094.js:11635 (anonymous) @ page-d93a91fe9b730094.js:1118 ej @ fd9d1056-d6b0199d09dbaec7.js:216 Nj @ fd9d1056-d6b0199d09dbaec7.js:244 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 cf @ fd9d1056-d6b0199d09dbaec7.js:275 bf @ fd9d1056-d6b0199d09dbaec7.js:109 Ok @ fd9d1056-d6b0199d09dbaec7.js:274 jf @ fd9d1056-d6b0199d09dbaec7.js:271 wk @ fd9d1056-d6b0199d09dbaec7.js:259 qf @ fd9d1056-d6b0199d09dbaec7.js:258 P @ 472-62eef4c940f2585e.js:6029 872-642984574cb5f955.js:2789
Uncaught (in promise) TypeError: Failed to fetch
at Object.invokeExtensionFunc (872-642984574cb5f955.js:2789:24)
at executeOnMain (index.js:506:146)
at JanMonitoringExtension.getResourcesInfo (index.js:2201:16)
at page-d93a91fe9b730094.js:11605:105
at page-d93a91fe9b730094.js:11636:13
invokeExtensionFunc @ 872-642984574cb5f955.js:2789 executeOnMain @ index.js:506 getResourcesInfo @ index.js:2201 (anonymous) @ page-d93a91fe9b730094.js:11605 (anonymous) @ page-d93a91fe9b730094.js:11636 await in (anonymous) (async) (anonymous) @ page-d93a91fe9b730094.js:11636 setInterval (async) watch @ page-d93a91fe9b730094.js:11635 (anonymous) @ page-d93a91fe9b730094.js:1118 ej @ fd9d1056-d6b0199d09dbaec7.js:216 Nj @ fd9d1056-d6b0199d09dbaec7.js:244 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:248 Qj @ fd9d1056-d6b0199d09dbaec7.js:246 Rj @ fd9d1056-d6b0199d09dbaec7.js:247 cf @ fd9d1056-d6b0199d09dbaec7.js:275 bf @ fd9d1056-d6b0199d09dbaec7.js:109 Ok @ fd9d1056-d6b0199d09dbaec7.js:274 jf @ fd9d1056-d6b0199d09dbaec7.js:271 wk @ fd9d1056-d6b0199d09dbaec7.js:259 qf @ fd9d1056-d6b0199d09dbaec7.js:258 P @ 472-62eef4c940f2585e.js:6029 872-642984574cb5f955.js:2789
similar to many errors like: https://github.com/janhq/jan/issues/2895
I just deployed the Jan server according to the documentation using Docker. I used Nginx Proxy Manager to forward https://jan.domain.tld to http://ip-of-server:3000. I also set API_BASE_URL
to https://jan.domain.tld. When trying to access it, multiple errors occur in browser console and the site shows "Preparing Update..." with the animation constantly. These are the error messages:
XHRPOST
https://jan.domain.tld/v1/app/getActiveExtensions
[HTTP/2 404 2ms]
XHRPOST
https://jan.domain.tld/v1/app/baseExtensions
[HTTP/2 404 2ms]
XHRPOST
https://jan.domain.tld/v1/app/installExtension
[HTTP/2 404 2ms]
Uncaught (in promise) TypeError: res is undefined
NextJS 34
434-8fe1e28f373efdf4.js:2923:13
setupExtensions NextJS
AsyncFunctionThrow self-hosted:803
(Async: async)
setupExtensions NextJS
InterpretGeneratorResume self-hosted:1412
AsyncFunctionNext self-hosted:799
NextJS 30
https://discord.com/channels/1107178041848909847/1149558035971321886/1229708106825596999
Hey there! Thanks for trying out Jan.
We've actually decided to deprecate Jan On-premise. Sorry for any confusion this might have caused.
We're focusing our efforts on improving the main Jan application to better serve our users. If you're looking for alternative solutions, you might want to check out Cortex (https://github.com/janhq/cortex) for headless AI operations. Appreciate you taking the time to report this. Let us know if you have any other questions!