Fresh heartbeat
A worker reports on a fixed interval. A snapshot older than the freshness window is not eligible for new work.
How it works
Two paths share one scheduler: one sends a request, the other supplies the machine that runs it. Access is invite-only for both.
Inference is the work of turning a prompt into output one token at a time. A worker is a contributor’s PC running the worker app and a local model backend. The scheduler matches each request to a worker that has the model loaded, enough capacity, and a fresh heartbeat.
Two paths
Contribute capacity, or call the API. The same placement rules apply either way.
Both paths meet at the scheduler.
Run the local check in your browser. It reads your graphics adapter or CPU, memory estimate, OS, and browser.
Access is invite-only. If the hardware fits, you receive an invite and a one-time enrollment token by email.
Install the Windows worker app, enroll with the token, and confirm the model and backend it will serve.
Choose the enable switch, VRAM budget, model-cache quota, idle-only wait, and active hours. The worker enforces them locally; CPU, power, thermal, and network ceilings are planned.
The worker registers its model and sends heartbeats. It accepts jobs only while every limit allows it.
Access is invite-only while the network grows. Request a key; it arrives when a slot opens.
POST /v1/chat/completions with an OpenAI-compatible body. The live model key is lfm3.
The scheduler filters candidates by model, heartbeat freshness, VRAM and RAM margin, and network limits.
Tokens stream back as server-sent events until [DONE]. Usage is accounted per request.
curl https://<your-domain>/v1/chat/completions \
-H "Authorization: Bearer $EASYAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "lfm3",
"messages": [
{ "role": "user", "content": "Summarize the lease rules." }
],
"stream": true
}' import os
from openai import OpenAI
client = OpenAI(
base_url="https://<your-domain>/v1",
api_key=os.environ["EASYAI_API_KEY"],
)
stream = client.chat.completions.create(
model="lfm3",
messages=[{"role": "user", "content": "Summarize the lease rules."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="") Placement
Every placement is a filter, not a guess. A worker stays eligible only while all four checks pass.
A worker reports on a fixed interval. A snapshot older than the freshness window is not eligible for new work.
The worker declares the model revision and backend it has ready. A request for a different model is not placed there.
Placement keeps headroom so the model and context do not push the machine into swap or an out-of-memory stop.
Worker network limits and schedule windows are checked before a job is assigned.
Failure handling
A dropped worker is treated as a failed placement, not a failed request, until the bounded retry gives up.
Heartbeat
The worker misses its report window and becomes ineligible for new placements.
Lease
The in-flight request keeps its lease while the scheduler checks whether the worker is still responding.
Replan
If the lease fails, the scheduler retries on other eligible workers, with at most two attempts.
Outcome
If no attempt succeeds, the request fails with an error. A partial stream is never presented as complete.
Current limits
The network is small and deliberately limited. These are current constraints, not future promises.
The worker app runs on Windows 10/11 64-bit. macOS and Linux workers are not supported.
LFM3-1.7B is the only model supported by the current worker build. Qwen3 models are planned, not callable.
There is no public signup. API keys and contributor invites are reviewed manually.
Phones and tablets cannot contribute capacity, and there is no mobile app.
A request runs on one worker. Pipeline parallelism across machines is in progress and not available.
Contributor credits are not live yet. Terms are set per invite while the network grows.
Next step
Check what your PC can host, or request API access and we will email a key when a slot opens.