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
examples/playwright_example.py- Browser automationexamples/pyautogui_example.py- Desktop automation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file prava-0.1.29.tar.gz.
File metadata
- Download URL: prava-0.1.29.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6788eee788c211c96a18fb46d7e910367a434e9e77c04b5657add337a2feb628
|
|
| MD5 |
2fea2d10172670dadd40420d914d4193
|
|
| BLAKE2b-256 |
d4699ef73265e86223d5003d39dc6bb1ec8b23099cfb79f29ce607d1b16dda91
|
File details
Details for the file prava-0.1.29-py3-none-any.whl.
File metadata
- Download URL: prava-0.1.29-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24badd91aa747cf1aaa4cdbae20d50d0121968162a11211e7e7c82b099c5045d
|
|
| MD5 |
3875e795e4ba79388e26c1acae804487
|
|
| BLAKE2b-256 |
89f2eaeafb750ec41b5fddaf00b3b88bdc10679f8b467aa23aa3a1378f537e5a
|