Metadata-Version: 2.4
Name: pluginfer
Version: 1.10.0
Summary: Python SDK for Pluginfer — distributed AI compute mesh.
Author-email: Pluginfer Team <ops@pluginfer.network>
License: Apache-2.0
Project-URL: Homepage, https://pluginfer.network
Project-URL: Documentation, https://docs.pluginfer.network
Project-URL: Source, https://github.com/pluginfer/pluginfer
Project-URL: Issues, https://github.com/pluginfer/pluginfer/issues
Keywords: pluginfer,distributed,gpu,ai,inference,compute
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
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.10
Description-Content-Type: text/markdown
Requires-Dist: httpx<1,>=0.27
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: fastapi>=0.110; extra == "dev"
Requires-Dist: sse-starlette>=2; extra == "dev"
Requires-Dist: cryptography>=42; extra == "dev"

# pluginfer

Python SDK for [Pluginfer](https://pluginfer.network) — the distributed
AI compute mesh.

## Install

```sh
pip install pluginfer
```

## Quickstart

```python
from pluginfer import Pluginfer

with Pluginfer(api_key="pf_live_...", base_url="https://api.pluginfer.network") as p:
    # Submit a job, then stream events until done.
    job = p.jobs.submit(
        kind="llm.completion",
        payload={"prompt": "Say hi.", "max_tokens": 32},
        cost_ceiling_usd=0.05,
        latency_ceiling_ms=10_000,
    )
    print(job.job_id, job.state.state)

    for event in p.jobs.stream(job.job_id):
        print(event["event"])

    result = p.jobs.result(job.job_id)
    print(p.jobs.decode_result(result))
```

## Wallet-signature auth (no API key)

```python
from pluginfer import Pluginfer
from pluginfer_node_sdk.wallet import Wallet  # any obj with .public_key_pem and .sign(bytes)

p = Pluginfer(base_url="https://api.pluginfer.network")
sid = p.auth.login_with_wallet(Wallet.load_or_create())
# sid is now stashed; subsequent SDK calls are authed.
```

## License

Apache 2.0.
