diff --git a/notebooks/agent_nb.ipynb b/notebooks/agent_nb.ipynb index a01dbf33..34b2a56a 100644 --- a/notebooks/agent_nb.ipynb +++ b/notebooks/agent_nb.ipynb @@ -31,13 +31,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install \"cua-agent[all]\"\n", - "\n", - "# Or install individual agent loops:\n", - "# !pip install cua-agent[openai]\n", - "# !pip install cua-agent[anthropic]\n", - "# !pip install cua-agent[uitars]\n", - "# !pip install cua-agent[omni]" + "!pip install \"cua-agent[all]\"" ] }, { @@ -223,7 +217,38 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Option 2: Agent with Local VMs (Lume daemon)\n", + "## Option 2: KASM Local Docker Containers (cross-platform)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we can create an agent, we need to initialize a local computer with Docker provider." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "from pathlib import Path\n", + "\n", + "computer = Computer(\n", + " os_type=\"linux\",\n", + " provider_type=\"docker\",\n", + " image=\"trycua/cua-ubuntu:latest\",\n", + " name=\"my-cua-container\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Option 3: Agent with Local VMs (Lume daemon)\n", "\n", "For Apple Silicon Macs, run agents on local VMs with near-native performance." ] @@ -259,7 +284,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create an agent with local VM" + "## Create an agent" ] }, { @@ -289,7 +314,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Run tasks on a local Lume VM" + "Run tasks on a computer:" ] }, { @@ -424,7 +449,7 @@ " model=\"openai/computer-use-preview\",\n", " trajectory_dir=str(Path(\"trajectories\")),\n", " verbosity=logging.INFO\n", - ")\n" + ")" ] }, { @@ -521,7 +546,7 @@ ], "metadata": { "kernelspec": { - "display_name": "cua312", + "display_name": "cua", "language": "python", "name": "python3" }, @@ -535,7 +560,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.9" + "version": "3.13.5" } }, "nbformat": 4, diff --git a/notebooks/computer_nb.ipynb b/notebooks/computer_nb.ipynb index 698db37c..0cf35175 100644 --- a/notebooks/computer_nb.ipynb +++ b/notebooks/computer_nb.ipynb @@ -18,9 +18,470 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Skipping cua-computer as it is not installed.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting cua-computer[all]\n", + " Downloading cua_computer-0.4.4-py3-none-any.whl.metadata (5.8 kB)\n", + "Collecting pillow>=10.0.0 (from cua-computer[all])\n", + " Downloading pillow-11.3.0-cp313-cp313-win_amd64.whl.metadata (9.2 kB)\n", + "Collecting websocket-client>=1.8.0 (from cua-computer[all])\n", + " Downloading websocket_client-1.8.0-py3-none-any.whl.metadata (8.0 kB)\n", + "Collecting websockets>=12.0 (from cua-computer[all])\n", + " Downloading websockets-15.0.1-cp313-cp313-win_amd64.whl.metadata (7.0 kB)\n", + "Collecting aiohttp>=3.9.0 (from cua-computer[all])\n", + " Downloading aiohttp-3.12.15-cp313-cp313-win_amd64.whl.metadata (7.9 kB)\n", + "Collecting cua-core<0.2.0,>=0.1.0 (from cua-computer[all])\n", + " Downloading cua_core-0.1.9-py3-none-any.whl.metadata (1.6 kB)\n", + "Collecting pydantic>=2.11.1 (from cua-computer[all])\n", + " Downloading pydantic-2.11.7-py3-none-any.whl.metadata (67 kB)\n", + "Collecting gradio>=5.23.3 (from cua-computer[all])\n", + " Downloading gradio-5.43.1-py3-none-any.whl.metadata (16 kB)\n", + "Collecting python-dotenv>=1.0.1 (from cua-computer[all])\n", + " Downloading python_dotenv-1.1.1-py3-none-any.whl.metadata (24 kB)\n", + "Collecting datasets>=3.6.0 (from cua-computer[all])\n", + " Downloading datasets-4.0.0-py3-none-any.whl.metadata (19 kB)\n", + "Collecting httpx>=0.24.0 (from cua-core<0.2.0,>=0.1.0->cua-computer[all])\n", + " Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)\n", + "Collecting posthog>=3.20.0 (from cua-core<0.2.0,>=0.1.0->cua-computer[all])\n", + " Downloading posthog-6.6.1-py3-none-any.whl.metadata (6.0 kB)\n", + "Collecting aiohappyeyeballs>=2.5.0 (from aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", + "Collecting aiosignal>=1.4.0 (from aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB)\n", + "Collecting attrs>=17.3.0 (from aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", + "Collecting frozenlist>=1.1.1 (from aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading frozenlist-1.7.0-cp313-cp313-win_amd64.whl.metadata (19 kB)\n", + "Collecting multidict<7.0,>=4.5 (from aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading multidict-6.6.4-cp313-cp313-win_amd64.whl.metadata (5.4 kB)\n", + "Collecting propcache>=0.2.0 (from aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading propcache-0.3.2-cp313-cp313-win_amd64.whl.metadata (12 kB)\n", + "Collecting yarl<2.0,>=1.17.0 (from aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading yarl-1.20.1-cp313-cp313-win_amd64.whl.metadata (76 kB)\n", + "Collecting idna>=2.0 (from yarl<2.0,>=1.17.0->aiohttp>=3.9.0->cua-computer[all])\n", + " Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "Collecting filelock (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading filelock-3.19.1-py3-none-any.whl.metadata (2.1 kB)\n", + "Collecting numpy>=1.17 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading numpy-2.3.2-cp313-cp313-win_amd64.whl.metadata (60 kB)\n", + "Collecting pyarrow>=15.0.0 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading pyarrow-21.0.0-cp313-cp313-win_amd64.whl.metadata (3.4 kB)\n", + "Collecting dill<0.3.9,>=0.3.0 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading dill-0.3.8-py3-none-any.whl.metadata (10 kB)\n", + "Collecting pandas (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading pandas-2.3.2-cp313-cp313-win_amd64.whl.metadata (19 kB)\n", + "Collecting requests>=2.32.2 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading requests-2.32.5-py3-none-any.whl.metadata (4.9 kB)\n", + "Collecting tqdm>=4.66.3 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "Collecting xxhash (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading xxhash-3.5.0-cp313-cp313-win_amd64.whl.metadata (13 kB)\n", + "Collecting multiprocess<0.70.17 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading multiprocess-0.70.16-py312-none-any.whl.metadata (7.2 kB)\n", + "Collecting fsspec<=2025.3.0,>=2023.1.0 (from fsspec[http]<=2025.3.0,>=2023.1.0->datasets>=3.6.0->cua-computer[all])\n", + " Downloading fsspec-2025.3.0-py3-none-any.whl.metadata (11 kB)\n", + "Collecting huggingface-hub>=0.24.0 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading huggingface_hub-0.34.4-py3-none-any.whl.metadata (14 kB)\n", + "Requirement already satisfied: packaging in c:\\programdata\\anaconda3\\envs\\cua\\lib\\site-packages (from datasets>=3.6.0->cua-computer[all]) (25.0)\n", + "Collecting pyyaml>=5.1 (from datasets>=3.6.0->cua-computer[all])\n", + " Downloading PyYAML-6.0.2-cp313-cp313-win_amd64.whl.metadata (2.1 kB)\n", + "Collecting aiofiles<25.0,>=22.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading aiofiles-24.1.0-py3-none-any.whl.metadata (10 kB)\n", + "Collecting anyio<5.0,>=3.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading anyio-4.10.0-py3-none-any.whl.metadata (4.0 kB)\n", + "Collecting audioop-lts<1.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading audioop_lts-0.2.2-cp313-abi3-win_amd64.whl.metadata (2.0 kB)\n", + "Collecting brotli>=1.1.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading Brotli-1.1.0-cp313-cp313-win_amd64.whl.metadata (5.6 kB)\n", + "Collecting fastapi<1.0,>=0.115.2 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading fastapi-0.116.1-py3-none-any.whl.metadata (28 kB)\n", + "Collecting ffmpy (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading ffmpy-0.6.1-py3-none-any.whl.metadata (2.9 kB)\n", + "Collecting gradio-client==1.12.1 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading gradio_client-1.12.1-py3-none-any.whl.metadata (7.1 kB)\n", + "Collecting groovy~=0.1 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading groovy-0.1.2-py3-none-any.whl.metadata (6.1 kB)\n", + "Collecting jinja2<4.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "Collecting markupsafe<4.0,>=2.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl.metadata (4.1 kB)\n", + "Collecting orjson~=3.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading orjson-3.11.2-cp313-cp313-win_amd64.whl.metadata (1.2 kB)\n", + "Collecting pydub (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading pydub-0.25.1-py2.py3-none-any.whl.metadata (1.4 kB)\n", + "Collecting python-multipart>=0.0.18 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading python_multipart-0.0.20-py3-none-any.whl.metadata (1.8 kB)\n", + "Collecting ruff>=0.9.3 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading ruff-0.12.10-py3-none-win_amd64.whl.metadata (26 kB)\n", + "Collecting safehttpx<0.2.0,>=0.1.6 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading safehttpx-0.1.6-py3-none-any.whl.metadata (4.2 kB)\n", + "Collecting semantic-version~=2.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading semantic_version-2.10.0-py2.py3-none-any.whl.metadata (9.7 kB)\n", + "Collecting starlette<1.0,>=0.40.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading starlette-0.47.3-py3-none-any.whl.metadata (6.2 kB)\n", + "Collecting tomlkit<0.14.0,>=0.12.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading tomlkit-0.13.3-py3-none-any.whl.metadata (2.8 kB)\n", + "Collecting typer<1.0,>=0.12 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading typer-0.16.1-py3-none-any.whl.metadata (15 kB)\n", + "Requirement already satisfied: typing-extensions~=4.0 in c:\\programdata\\anaconda3\\envs\\cua\\lib\\site-packages (from gradio>=5.23.3->cua-computer[all]) (4.14.1)\n", + "Collecting uvicorn>=0.14.0 (from gradio>=5.23.3->cua-computer[all])\n", + " Downloading uvicorn-0.35.0-py3-none-any.whl.metadata (6.5 kB)\n", + "Collecting sniffio>=1.1 (from anyio<5.0,>=3.0->gradio>=5.23.3->cua-computer[all])\n", + " Downloading sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)\n", + "Collecting certifi (from httpx>=0.24.0->cua-core<0.2.0,>=0.1.0->cua-computer[all])\n", + " Downloading certifi-2025.8.3-py3-none-any.whl.metadata (2.4 kB)\n", + "Collecting httpcore==1.* (from httpx>=0.24.0->cua-core<0.2.0,>=0.1.0->cua-computer[all])\n", + " Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)\n", + "Collecting h11>=0.16 (from httpcore==1.*->httpx>=0.24.0->cua-core<0.2.0,>=0.1.0->cua-computer[all])\n", + " Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\programdata\\anaconda3\\envs\\cua\\lib\\site-packages (from pandas->datasets>=3.6.0->cua-computer[all]) (2.9.0.post0)\n", + "Collecting pytz>=2020.1 (from pandas->datasets>=3.6.0->cua-computer[all])\n", + " Downloading pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)\n", + "Collecting tzdata>=2022.7 (from pandas->datasets>=3.6.0->cua-computer[all])\n", + " Downloading tzdata-2025.2-py2.py3-none-any.whl.metadata (1.4 kB)\n", + "Collecting annotated-types>=0.6.0 (from pydantic>=2.11.1->cua-computer[all])\n", + " Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", + "Collecting pydantic-core==2.33.2 (from pydantic>=2.11.1->cua-computer[all])\n", + " Downloading pydantic_core-2.33.2-cp313-cp313-win_amd64.whl.metadata (6.9 kB)\n", + "Collecting typing-inspection>=0.4.0 (from pydantic>=2.11.1->cua-computer[all])\n", + " Downloading typing_inspection-0.4.1-py3-none-any.whl.metadata (2.6 kB)\n", + "Collecting click>=8.0.0 (from typer<1.0,>=0.12->gradio>=5.23.3->cua-computer[all])\n", + " Downloading click-8.2.1-py3-none-any.whl.metadata (2.5 kB)\n", + "Collecting shellingham>=1.3.0 (from typer<1.0,>=0.12->gradio>=5.23.3->cua-computer[all])\n", + " Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "Collecting rich>=10.11.0 (from typer<1.0,>=0.12->gradio>=5.23.3->cua-computer[all])\n", + " Downloading rich-14.1.0-py3-none-any.whl.metadata (18 kB)\n", + "Requirement already satisfied: colorama in c:\\programdata\\anaconda3\\envs\\cua\\lib\\site-packages (from click>=8.0.0->typer<1.0,>=0.12->gradio>=5.23.3->cua-computer[all]) (0.4.6)\n", + "Requirement already satisfied: six>=1.5 in c:\\programdata\\anaconda3\\envs\\cua\\lib\\site-packages (from posthog>=3.20.0->cua-core<0.2.0,>=0.1.0->cua-computer[all]) (1.17.0)\n", + "Collecting backoff>=1.10.0 (from posthog>=3.20.0->cua-core<0.2.0,>=0.1.0->cua-computer[all])\n", + " Downloading backoff-2.2.1-py3-none-any.whl.metadata (14 kB)\n", + "Collecting distro>=1.5.0 (from posthog>=3.20.0->cua-core<0.2.0,>=0.1.0->cua-computer[all])\n", + " Downloading distro-1.9.0-py3-none-any.whl.metadata (6.8 kB)\n", + "Collecting charset_normalizer<4,>=2 (from requests>=2.32.2->datasets>=3.6.0->cua-computer[all])\n", + " Downloading charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl.metadata (37 kB)\n", + "Collecting urllib3<3,>=1.21.1 (from requests>=2.32.2->datasets>=3.6.0->cua-computer[all])\n", + " Downloading urllib3-2.5.0-py3-none-any.whl.metadata (6.5 kB)\n", + "Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer<1.0,>=0.12->gradio>=5.23.3->cua-computer[all])\n", + " Downloading markdown_it_py-4.0.0-py3-none-any.whl.metadata (7.3 kB)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\programdata\\anaconda3\\envs\\cua\\lib\\site-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio>=5.23.3->cua-computer[all]) (2.19.2)\n", + "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0,>=0.12->gradio>=5.23.3->cua-computer[all])\n", + " Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "Downloading cua_computer-0.4.4-py3-none-any.whl (87 kB)\n", + "Downloading cua_core-0.1.9-py3-none-any.whl (5.2 kB)\n", + "Downloading aiohttp-3.12.15-cp313-cp313-win_amd64.whl (449 kB)\n", + "Downloading multidict-6.6.4-cp313-cp313-win_amd64.whl (45 kB)\n", + "Downloading yarl-1.20.1-cp313-cp313-win_amd64.whl (86 kB)\n", + "Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", + "Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB)\n", + "Downloading attrs-25.3.0-py3-none-any.whl (63 kB)\n", + "Downloading datasets-4.0.0-py3-none-any.whl (494 kB)\n", + "Downloading dill-0.3.8-py3-none-any.whl (116 kB)\n", + "Downloading fsspec-2025.3.0-py3-none-any.whl (193 kB)\n", + "Downloading multiprocess-0.70.16-py312-none-any.whl (146 kB)\n", + "Downloading frozenlist-1.7.0-cp313-cp313-win_amd64.whl (43 kB)\n", + "Downloading gradio-5.43.1-py3-none-any.whl (59.6 MB)\n", + " ---------------------------------------- 0.0/59.6 MB ? eta -:--:--\n", + " -------------------------------------- - 57.4/59.6 MB 278.0 MB/s eta 0:00:01\n", + " --------------------------------------- 59.5/59.6 MB 277.3 MB/s eta 0:00:01\n", + " ---------------------------------------- 59.6/59.6 MB 138.5 MB/s eta 0:00:00\n", + "Downloading gradio_client-1.12.1-py3-none-any.whl (324 kB)\n", + "Downloading aiofiles-24.1.0-py3-none-any.whl (15 kB)\n", + "Downloading anyio-4.10.0-py3-none-any.whl (107 kB)\n", + "Downloading audioop_lts-0.2.2-cp313-abi3-win_amd64.whl (30 kB)\n", + "Downloading fastapi-0.116.1-py3-none-any.whl (95 kB)\n", + "Downloading groovy-0.1.2-py3-none-any.whl (14 kB)\n", + "Downloading httpx-0.28.1-py3-none-any.whl (73 kB)\n", + "Downloading httpcore-1.0.9-py3-none-any.whl (78 kB)\n", + "Downloading huggingface_hub-0.34.4-py3-none-any.whl (561 kB)\n", + " ---------------------------------------- 0.0/561.5 kB ? eta -:--:--\n", + " --------------------------------------- 561.5/561.5 kB 18.0 MB/s eta 0:00:00\n", + "Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "Downloading MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl (15 kB)\n", + "Downloading numpy-2.3.2-cp313-cp313-win_amd64.whl (12.8 MB)\n", + " ---------------------------------------- 0.0/12.8 MB ? eta -:--:--\n", + " ---------------------------------------- 12.8/12.8 MB 129.9 MB/s eta 0:00:00\n", + "Downloading orjson-3.11.2-cp313-cp313-win_amd64.whl (119 kB)\n", + "Downloading pandas-2.3.2-cp313-cp313-win_amd64.whl (11.0 MB)\n", + " ---------------------------------------- 0.0/11.0 MB ? eta -:--:--\n", + " ---------------------------------------- 11.0/11.0 MB 84.1 MB/s eta 0:00:00\n", + "Downloading pillow-11.3.0-cp313-cp313-win_amd64.whl (7.0 MB)\n", + " ---------------------------------------- 0.0/7.0 MB ? eta -:--:--\n", + " ---------------------------------------- 7.0/7.0 MB 107.0 MB/s eta 0:00:00\n", + "Downloading pydantic-2.11.7-py3-none-any.whl (444 kB)\n", + "Downloading pydantic_core-2.33.2-cp313-cp313-win_amd64.whl (2.0 MB)\n", + " ---------------------------------------- 0.0/2.0 MB ? eta -:--:--\n", + " ---------------- ----------------------- 0.8/2.0 MB 6.0 MB/s eta 0:00:01\n", + " ---------------------------------------- 2.0/2.0 MB 13.6 MB/s eta 0:00:00\n", + "Downloading PyYAML-6.0.2-cp313-cp313-win_amd64.whl (156 kB)\n", + "Downloading safehttpx-0.1.6-py3-none-any.whl (8.7 kB)\n", + "Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n", + "Downloading starlette-0.47.3-py3-none-any.whl (72 kB)\n", + "Downloading tomlkit-0.13.3-py3-none-any.whl (38 kB)\n", + "Downloading typer-0.16.1-py3-none-any.whl (46 kB)\n", + "Downloading websockets-15.0.1-cp313-cp313-win_amd64.whl (176 kB)\n", + "Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", + "Downloading Brotli-1.1.0-cp313-cp313-win_amd64.whl (358 kB)\n", + "Downloading click-8.2.1-py3-none-any.whl (102 kB)\n", + "Downloading h11-0.16.0-py3-none-any.whl (37 kB)\n", + "Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "Downloading posthog-6.6.1-py3-none-any.whl (119 kB)\n", + "Downloading requests-2.32.5-py3-none-any.whl (64 kB)\n", + "Downloading charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl (107 kB)\n", + "Downloading urllib3-2.5.0-py3-none-any.whl (129 kB)\n", + "Downloading backoff-2.2.1-py3-none-any.whl (15 kB)\n", + "Downloading certifi-2025.8.3-py3-none-any.whl (161 kB)\n", + "Downloading distro-1.9.0-py3-none-any.whl (20 kB)\n", + "Downloading propcache-0.3.2-cp313-cp313-win_amd64.whl (40 kB)\n", + "Downloading pyarrow-21.0.0-cp313-cp313-win_amd64.whl (26.1 MB)\n", + " ---------------------------------------- 0.0/26.1 MB ? eta -:--:--\n", + " -------------------------------- ------- 21.0/26.1 MB 151.4 MB/s eta 0:00:01\n", + " --------------------------------------- 26.0/26.1 MB 63.3 MB/s eta 0:00:01\n", + " ---------------------------------------- 26.1/26.1 MB 50.1 MB/s eta 0:00:00\n", + "Downloading python_dotenv-1.1.1-py3-none-any.whl (20 kB)\n", + "Downloading python_multipart-0.0.20-py3-none-any.whl (24 kB)\n", + "Downloading pytz-2025.2-py2.py3-none-any.whl (509 kB)\n", + "Downloading rich-14.1.0-py3-none-any.whl (243 kB)\n", + "Downloading markdown_it_py-4.0.0-py3-none-any.whl (87 kB)\n", + "Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "Downloading ruff-0.12.10-py3-none-win_amd64.whl (13.0 MB)\n", + " ---------------------------------------- 0.0/13.0 MB ? eta -:--:--\n", + " ---------------------------------------- 13.0/13.0 MB 143.1 MB/s eta 0:00:00\n", + "Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)\n", + "Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "Downloading typing_inspection-0.4.1-py3-none-any.whl (14 kB)\n", + "Downloading tzdata-2025.2-py2.py3-none-any.whl (347 kB)\n", + "Downloading uvicorn-0.35.0-py3-none-any.whl (66 kB)\n", + "Downloading websocket_client-1.8.0-py3-none-any.whl (58 kB)\n", + "Downloading ffmpy-0.6.1-py3-none-any.whl (5.5 kB)\n", + "Downloading filelock-3.19.1-py3-none-any.whl (15 kB)\n", + "Downloading pydub-0.25.1-py2.py3-none-any.whl (32 kB)\n", + "Downloading xxhash-3.5.0-cp313-cp313-win_amd64.whl (30 kB)\n", + "Installing collected packages: pytz, pydub, brotli, xxhash, websockets, websocket-client, urllib3, tzdata, typing-inspection, tqdm, tomlkit, sniffio, shellingham, semantic-version, ruff, pyyaml, python-multipart, python-dotenv, pydantic-core, pyarrow, propcache, pillow, orjson, numpy, multidict, mdurl, markupsafe, idna, h11, groovy, fsspec, frozenlist, filelock, ffmpy, distro, dill, click, charset_normalizer, certifi, backoff, audioop-lts, attrs, annotated-types, aiohappyeyeballs, aiofiles, yarl, uvicorn, requests, pydantic, pandas, multiprocess, markdown-it-py, jinja2, httpcore, anyio, aiosignal, starlette, rich, posthog, huggingface-hub, httpx, aiohttp, typer, safehttpx, gradio-client, fastapi, cua-core, gradio, datasets, cua-computer\n", + "\n", + " ---------------------------------------- 0/70 [pytz]\n", + " ---------------------------------------- 0/70 [pytz]\n", + " ---------------------------------------- 0/70 [pytz]\n", + " --------------------------------------- 1/70 [pydub]\n", + " -- ------------------------------------- 4/70 [websockets]\n", + " -- ------------------------------------- 4/70 [websockets]\n", + " --- ------------------------------------ 6/70 [urllib3]\n", + " --- ------------------------------------ 6/70 [urllib3]\n", + " ---- ----------------------------------- 7/70 [tzdata]\n", + " ---- ----------------------------------- 7/70 [tzdata]\n", + " ---- ----------------------------------- 7/70 [tzdata]\n", + " ----- ---------------------------------- 9/70 [tqdm]\n", + " ----- ---------------------------------- 10/70 [tomlkit]\n", + " ------- -------------------------------- 13/70 [semantic-version]\n", + " -------- ------------------------------- 14/70 [ruff]\n", + " -------- ------------------------------- 14/70 [ruff]\n", + " --------- ------------------------------ 16/70 [python-multipart]\n", + " ---------- ----------------------------- 18/70 [pydantic-core]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ---------- ----------------------------- 19/70 [pyarrow]\n", + " ------------ --------------------------- 21/70 [pillow]\n", + " ------------ --------------------------- 21/70 [pillow]\n", + " ------------ --------------------------- 21/70 [pillow]\n", + " ------------ --------------------------- 21/70 [pillow]\n", + " ------------ --------------------------- 21/70 [pillow]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " ------------- -------------------------- 23/70 [numpy]\n", + " -------------- ------------------------- 26/70 [markupsafe]\n", + " --------------- ------------------------ 27/70 [idna]\n", + " ----------------- ---------------------- 30/70 [fsspec]\n", + " ----------------- ---------------------- 30/70 [fsspec]\n", + " ----------------- ---------------------- 30/70 [fsspec]\n", + " ------------------- -------------------- 34/70 [distro]\n", + " -------------------- ------------------- 35/70 [dill]\n", + " -------------------- ------------------- 36/70 [click]\n", + " --------------------- ------------------ 37/70 [charset_normalizer]\n", + " ---------------------- ----------------- 40/70 [audioop-lts]\n", + " ------------------------ --------------- 43/70 [aiohappyeyeballs]\n", + " -------------------------- ------------- 46/70 [uvicorn]\n", + " -------------------------- ------------- 46/70 [uvicorn]\n", + " --------------------------- ------------ 48/70 [pydantic]\n", + " --------------------------- ------------ 48/70 [pydantic]\n", + " --------------------------- ------------ 48/70 [pydantic]\n", + " --------------------------- ------------ 48/70 [pydantic]\n", + " --------------------------- ------------ 48/70 [pydantic]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 49/70 [pandas]\n", + " ---------------------------- ----------- 50/70 [multiprocess]\n", + " ---------------------------- ----------- 50/70 [multiprocess]\n", + " ----------------------------- ---------- 51/70 [markdown-it-py]\n", + " ----------------------------- ---------- 52/70 [jinja2]\n", + " ----------------------------- ---------- 52/70 [jinja2]\n", + " ------------------------------ --------- 53/70 [httpcore]\n", + " ------------------------------ --------- 54/70 [anyio]\n", + " -------------------------------- ------- 56/70 [starlette]\n", + " -------------------------------- ------- 56/70 [starlette]\n", + " -------------------------------- ------- 57/70 [rich]\n", + " -------------------------------- ------- 57/70 [rich]\n", + " -------------------------------- ------- 57/70 [rich]\n", + " --------------------------------- ------ 58/70 [posthog]\n", + " --------------------------------- ------ 59/70 [huggingface-hub]\n", + " --------------------------------- ------ 59/70 [huggingface-hub]\n", + " --------------------------------- ------ 59/70 [huggingface-hub]\n", + " --------------------------------- ------ 59/70 [huggingface-hub]\n", + " --------------------------------- ------ 59/70 [huggingface-hub]\n", + " ---------------------------------- ----- 60/70 [httpx]\n", + " ---------------------------------- ----- 61/70 [aiohttp]\n", + " ---------------------------------- ----- 61/70 [aiohttp]\n", + " ---------------------------------- ----- 61/70 [aiohttp]\n", + " ----------------------------------- ---- 62/70 [typer]\n", + " ------------------------------------ --- 64/70 [gradio-client]\n", + " ------------------------------------- -- 65/70 [fastapi]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 67/70 [gradio]\n", + " -------------------------------------- - 68/70 [datasets]\n", + " -------------------------------------- - 68/70 [datasets]\n", + " -------------------------------------- - 68/70 [datasets]\n", + " -------------------------------------- - 68/70 [datasets]\n", + " -------------------------------------- - 68/70 [datasets]\n", + " --------------------------------------- 69/70 [cua-computer]\n", + " --------------------------------------- 69/70 [cua-computer]\n", + " ---------------------------------------- 70/70 [cua-computer]\n", + "\n", + "Successfully installed aiofiles-24.1.0 aiohappyeyeballs-2.6.1 aiohttp-3.12.15 aiosignal-1.4.0 annotated-types-0.7.0 anyio-4.10.0 attrs-25.3.0 audioop-lts-0.2.2 backoff-2.2.1 brotli-1.1.0 certifi-2025.8.3 charset_normalizer-3.4.3 click-8.2.1 cua-computer-0.4.4 cua-core-0.1.9 datasets-4.0.0 dill-0.3.8 distro-1.9.0 fastapi-0.116.1 ffmpy-0.6.1 filelock-3.19.1 frozenlist-1.7.0 fsspec-2025.3.0 gradio-5.43.1 gradio-client-1.12.1 groovy-0.1.2 h11-0.16.0 httpcore-1.0.9 httpx-0.28.1 huggingface-hub-0.34.4 idna-3.10 jinja2-3.1.6 markdown-it-py-4.0.0 markupsafe-3.0.2 mdurl-0.1.2 multidict-6.6.4 multiprocess-0.70.16 numpy-2.3.2 orjson-3.11.2 pandas-2.3.2 pillow-11.3.0 posthog-6.6.1 propcache-0.3.2 pyarrow-21.0.0 pydantic-2.11.7 pydantic-core-2.33.2 pydub-0.25.1 python-dotenv-1.1.1 python-multipart-0.0.20 pytz-2025.2 pyyaml-6.0.2 requests-2.32.5 rich-14.1.0 ruff-0.12.10 safehttpx-0.1.6 semantic-version-2.10.0 shellingham-1.5.4 sniffio-1.3.1 starlette-0.47.3 tomlkit-0.13.3 tqdm-4.67.1 typer-0.16.1 typing-inspection-0.4.1 tzdata-2025.2 urllib3-2.5.0 uvicorn-0.35.0 websocket-client-1.8.0 websockets-15.0.1 xxhash-3.5.0 yarl-1.20.1\n" + ] + } + ], "source": [ "!pip uninstall -y cua-computer\n", "!pip install \"cua-computer[all]\"" @@ -165,7 +626,43 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Option 2: Local VMs (Lume daemon)\n", + "## Option 2: KASM Local Docker Containers (cross-platform)\n", + "\n", + "### Pull from Docker Hub\n", + "```bash\n", + "docker pull --platform=linux/amd64 trycua/cua-ubuntu:latest\n", + "```\n", + "\n", + "### Or build locally\n", + "```bash\n", + "cd libs/kasm\n", + "docker build -t cua-ubuntu:latest .\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from computer import Computer\n", + "\n", + "computer = Computer(\n", + " os_type=\"linux\",\n", + " provider_type=\"docker\",\n", + " image=\"trycua/cua-ubuntu:latest\",\n", + " name=\"my-cua-container\"\n", + ")\n", + "\n", + "await computer.run() # Launch & connect to Docker container" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Option 3: Local VMs (Lume daemon)\n", "\n", "For Apple Silicon Macs, you can run VMs locally using the Lume daemon." ] @@ -590,7 +1087,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "cua", "language": "python", "name": "python3" },