Skip to main content

Prava Python SDK for computer-use automation

Project description

Prava SDK

Prava is an API for Labor. We're a ML lab training computer-use models to do digital labor and our Controls API is a way to interact with them.

Installation

pip install prava  # or: npm install prava

Quick Start

from prava import ControlClient

client = ControlClient()

response = client.predict({
    "model": "prava-af-medium",
    "instruction": "Click the submit button",
    "image_url": "data:image/png;base64,..."
})

action = response["action"]
# {"kind": "left_click", "coordinate": {"x": 245, "y": 67}}

How It Works

Similar to Claude CUA and OpenAI's ChatGPT Agent, this API is intended to be used in a loop which starts off with a screenshot provided by the user, we then propose an action, the user executes it, we initiate a screenshot, and then predicts the next action. The loop keeps going until we stop.

Models

Model Use Case
prava-af-medium General automation
prava-quick-click Simple, fast automation

Action Types

Action Example
left_click {"kind": "left_click", "coordinate": {"x": 245, "y": 67}}
type {"kind": "type", "text": "hello@example.com"}
key {"kind": "key", "keys": ["Enter"]}
scroll {"kind": "scroll", "delta_y": -100}
wait {"kind": "wait", "duration_ms": 1000}
stop {"kind": "stop"}

Playwright Example

from playwright.sync_api import sync_playwright
from prava import ControlClient

client = ControlClient()

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://www.google.com")

    previous_actions = []

    for step in range(5):
        screenshot = page.screenshot()
        image_url = client.screenshot_to_data_uri(screenshot)

        response = client.predict({
            "model": "prava-af-medium",
            "instruction": "Search for 'Prava AI'",
            "image_url": image_url,
            "previous_actions": previous_actions
        })

        action = response["action"]
        if action["kind"] == "stop":
            break

        if action["kind"] == "left_click":
            coord = action["coordinate"]
            page.mouse.click(coord["x"], coord["y"])
        elif action["kind"] == "type":
            page.keyboard.type(action["text"])

        previous_actions.append(action)

    browser.close()

PyAutoGUI Example

import pyautogui
from prava import ControlClient

client = ControlClient()

# Take desktop screenshot
screenshot = pyautogui.screenshot()
import io
img_bytes = io.BytesIO()
screenshot.save(img_bytes, format='PNG')
image_url = client.screenshot_to_data_uri(img_bytes.getvalue())

# Get action
response = client.predict({
    "model": "prava-af-medium",
    "instruction": "Open the calculator app",
    "image_url": image_url
})

# Execute action
action = response["action"]
if action["kind"] == "left_click":
    coord = action["coordinate"]
    pyautogui.click(coord["x"], coord["y"])

TypeScript

import { ControlClient } from 'prava';
import { chromium } from 'playwright';

const client = new ControlClient();

const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://www.google.com');

const screenshot = await page.screenshot();
const imageUrl = client.screenshotToDataUri(new Uint8Array(screenshot));

const response = await client.predict({
  model: 'prava-af-medium',
  instruction: 'Search for "Prava AI"',
  image_url: imageUrl
});

const action = response.action;
if (action?.kind === 'left_click' && action.coordinate) {
  await page.mouse.click(action.coordinate.x, action.coordinate.y);
}

await browser.close();

API Keys

from prava import ControlClient

# Pass API key directly
client = ControlClient(api_key="prava_sk_...")

# Or use environment variable
import os
os.environ["PRAVA_API_KEY"] = "prava_sk_..."
client = ControlClient()

Examples

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prava-0.1.30.tar.gz (3.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prava-0.1.30-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file prava-0.1.30.tar.gz.

File metadata

  • Download URL: prava-0.1.30.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for prava-0.1.30.tar.gz
Algorithm Hash digest
SHA256 70e92f9cfc452ee28ead328fffd41530e83cc42ef7f4bd96041079eba008086a
MD5 d50c46d6cd96be46a6c67a8fde9dbee6
BLAKE2b-256 4633cd056ef58bf894dea25cacd66b5ae902812008d58158968b262d85d9f454

See more details on using hashes here.

File details

Details for the file prava-0.1.30-py3-none-any.whl.

File metadata

  • Download URL: prava-0.1.30-py3-none-any.whl
  • Upload date:
  • Size: 4.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for prava-0.1.30-py3-none-any.whl
Algorithm Hash digest
SHA256 68cc1b70c397a80b1f83d1c5da6b03f0ac0164d1a6c7b5af21892b49cbf6e3b8
MD5 ab7443a4b2aed7b545e65cc900b7018a
BLAKE2b-256 d7a121c377e1181713a6bf9ec42a834d408ff6ed7f034b485febd0799800ca90

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page