91e75e620b
CI: cua-driver distro-compat matrix / Resolve release version (push) Waiting to run
CI: cua-driver distro-compat matrix / debian:12 (glibc 2.36) (push) Blocked by required conditions
CI: cua-driver distro-compat matrix / fedora:41 (glibc 2.40) (push) Blocked by required conditions
CI: cua-driver distro-compat matrix / rockylinux:9 (glibc 2.34) (push) Blocked by required conditions
CI: cua-driver distro-compat matrix / ubuntu:22.04 (glibc 2.35) (push) Blocked by required conditions
CI: cua-driver distro-compat matrix / ubuntu:24.04 (glibc 2.39) (push) Blocked by required conditions
CI: cua-driver distro-compat matrix / Distro compat summary (push) Blocked by required conditions
CI: Nix Linux Rust source / Nix / compositor build (push) Waiting to run
CI: Nix Linux Rust source / Nix / driver package (push) Waiting to run
CI: Nix Linux Rust source / Nix / Rust unit tests (push) Waiting to run
CI: Rust Linux unit / Rust Linux unit and compile (push) Waiting to run
CI: Rust Windows unit / Rust Windows unit and compile (push) Waiting to run
CI: SPDX Headers / Check SPDX headers (warn-only) (push) Waiting to run
CD: Docs MCP Server / build (linux/amd64) (push) Waiting to run
CD: Docs MCP Server / build (linux/arm64) (push) Waiting to run
CD: Docs MCP Server / merge (push) Blocked by required conditions
62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
"""
|
|
Computer handler factory and interface definitions.
|
|
|
|
This module provides a factory function to create computer handlers from different
|
|
computer interface types, supporting both the ComputerHandler protocol and the
|
|
Computer library interface.
|
|
"""
|
|
|
|
try:
|
|
from computer import Computer as cuaComputer
|
|
|
|
from .cua import cuaComputerHandler
|
|
except ImportError:
|
|
cuaComputer = None # type: ignore[assignment,misc]
|
|
cuaComputerHandler = None # type: ignore[assignment]
|
|
|
|
try:
|
|
from cua_sandbox import Sandbox as cuaSandbox
|
|
except ImportError:
|
|
cuaSandbox = None # type: ignore[assignment,misc]
|
|
|
|
from .base import AsyncComputerHandler
|
|
from .custom import CustomComputerHandler
|
|
from .sandbox import SandboxComputerHandler
|
|
|
|
|
|
def is_agent_computer(computer):
|
|
"""Check if the given computer is a ComputerHandler or Cua Computer."""
|
|
return (
|
|
isinstance(computer, AsyncComputerHandler)
|
|
or (cuaComputer is not None and isinstance(computer, cuaComputer))
|
|
or (cuaSandbox is not None and isinstance(computer, cuaSandbox))
|
|
or (isinstance(computer, dict))
|
|
) # and "screenshot" in computer)
|
|
|
|
|
|
async def make_computer_handler(computer):
|
|
"""
|
|
Create a computer handler from a computer interface.
|
|
|
|
Args:
|
|
computer: Either a ComputerHandler instance, Computer instance,
|
|
Sandbox instance, or dict of functions
|
|
|
|
Returns:
|
|
ComputerHandler: A computer handler instance
|
|
|
|
Raises:
|
|
ValueError: If the computer type is not supported
|
|
"""
|
|
if isinstance(computer, AsyncComputerHandler):
|
|
return computer
|
|
if cuaComputer is not None and isinstance(computer, cuaComputer):
|
|
computer_handler = cuaComputerHandler(computer)
|
|
await computer_handler._initialize()
|
|
return computer_handler
|
|
if cuaSandbox is not None and isinstance(computer, cuaSandbox):
|
|
return SandboxComputerHandler(computer)
|
|
if isinstance(computer, dict):
|
|
return CustomComputerHandler(computer)
|
|
raise ValueError(f"Unsupported computer type: {type(computer)}")
|