Metadata-Version: 2.4
Name: getabrain
Version: 0.1.1
Summary: Official Python SDK for GetABrain.ai — real human judgment as an API
Project-URL: Homepage, https://getabrain.ai
Project-URL: Documentation, https://getabrain.ai/docs/api
Project-URL: Source, https://github.com/Guitarmaniac24/Getabrain.ai
Project-URL: Bug Tracker, https://github.com/Guitarmaniac24/Getabrain.ai/issues
Author-email: GetABrain <hello@getabrain.ai>
License-Expression: MIT
Keywords: ai,api,data-labeling,getabrain,human-in-the-loop,rlhf,sdk
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Requires-Dist: httpx>=0.27
Description-Content-Type: text/markdown

# getabrain

Official Python SDK for [GetABrain.ai](https://getabrain.ai) — real human judgment as an API.

## Install

```bash
pip install getabrain
```

## Quickstart

```python
from getabrain import GetABrain, InsufficientBalanceError

gab = GetABrain(api_key="gab_k_...", api_secret="gab_s_...")

# Submit a query (returns immediately)
query = gab.queries.create(
    type="ab_test",
    title="Which headline converts better?",
    content_data={
        "question": "Which is more compelling?",
        "variant_a": {"description": "Save 20% today"},
        "variant_b": {"description": "Your future self will thank you"},
    },
    required_responses=5,
    bid_amount_cents=25,
)

# Wait for humans to answer (polls for you)
try:
    responses = gab.queries.wait_for_responses(query["id"], min_responses=5, timeout_s=600)
    for r in responses:
        print(r["response_data"])
except InsufficientBalanceError:
    print("Top up your balance at https://getabrain.ai")
```

## API

- `gab.queries.create(type=..., title=..., content_data={...}, required_responses=..., bid_amount_cents=...)`
- `gab.queries.get(query_id)` · `gab.queries.list(status=..., limit=...)` · `gab.queries.cancel(query_id)`
- `gab.queries.wait_for_responses(query_id, min_responses=..., timeout_s=600, poll_interval_s=5)`
- `gab.responses.rate(query_id, response_id, score=5, feedback_text="...")` · `gab.responses.get_rating(query_id, response_id)`
- `gab.account.stats()` · `gab.account.balance()`

Query types: `text`, `multiple_choice`, `rating_scale`, `image_comparison`, `ranking`, `yes_no`, `sentiment`, `image_selection`, `free_form_text`, `video_review`, `audio_review`, `image_analysis`, `ab_test`.

## Errors

All errors subclass `GetABrainError`: `ValidationError`, `AuthError`, `InsufficientBalanceError`, `ForbiddenError`, `NotFoundError`, `ConflictError`, `RateLimitError` (`.retry_after_ms`), `ServerError`, `TimeoutError`, `NetworkError`.

Full API docs: https://getabrain.ai/docs/api
