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.28.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.28-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: prava-0.1.28.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.28.tar.gz
Algorithm Hash digest
SHA256 3593e02e41442d79b3d96487085b5134aa0cc1665d5557b2e61a61a39bff4c30
MD5 f0f9f4ba91fe15ea8f106cec03a258d3
BLAKE2b-256 985a89dc3502d7e40bf41079d4c5ece04645d5352a92c053dd58d61e87b150ce

See more details on using hashes here.

File details

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

File metadata

  • Download URL: prava-0.1.28-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.28-py3-none-any.whl
Algorithm Hash digest
SHA256 1f517fa68585da1be74ba303fe814fa452f7ce4ef6b9b3677c02601a88771e02
MD5 9aa1e3aaa90a08849a01002f60e7e38a
BLAKE2b-256 c8507ca561c45fd5ef0ddba483c239d34d12ddff93750c340f0e5f44a7dd98d7

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