gpuosBeta

Docs · data flow

What the gateway sees

gpuOS is a hosted service. Models run on your machine, but your app's requests and the model's responses travel through our gateway at https://gpuos.si/v1. This page lists what the gateway and the agent see, what is stored, and how to cut access. It describes the code that runs today. The privacy policy is the legal reference.

A request, step by step

  1. Your app calls https://gpuos.si/v1 over HTTPS with a gpuos_key_… API key. TLS ends at our servers.
  2. The gateway checks the key, the plan, the key's requests-per-minute limit and its monthly token quota. It reads the JSON body (up to 16 MiB) into memory, replaces the model id with its Ollama tag and, for streams, asks Ollama for a usage report.
  3. It picks the least busy online node that has the model ready and queues the request in memory. The agent on that node, which holds an outbound connection open, picks it up and sends it to Ollama on the same machine.
  4. The agent posts Ollama's response back in pieces, and the gateway relays them to your app as they arrive, with the model id you asked for.
  5. The gateway writes one usage record, described below. Then the request is gone from memory.

What passes through and is not stored

The request body (messages, prompt or input, and parameters) and the response body pass through the gateway. They are held in memory while the request runs and are not written to the database, except the optional user field, kept as the end user of the usage record. The gateway's code does not log them either.

  • The gateway reads the body to validate it, to pick the model and to estimate token counts when Ollama sends none.
  • Traffic is not end-to-end encrypted: TLS ends at our servers, so we could technically read a request while it passes through. The service is not air-gapped.
  • Like any website, our servers see the IP address that calls them. The gateway does not store it with usage records.
  • Ollama runs on your machine. What it logs or keeps there is under your control.

Do not send data through the gateway that you are not allowed to process on a hosted service.

What is stored for each request

One usage record per request, used for the Usage page and the monthly token quotas. It holds counts, timings and the labels you choose to attach, not content:

  • Time of the request
  • Workspace
  • API key (its id, never the secret)
  • Node that served it
  • Model
  • Endpoint: chat, completions or embeddings
  • Route (always local: your own node)
  • Prompt token count
  • Completion token count
  • Total time in milliseconds
  • HTTP status
  • End user, if you send the OpenAI `user` field (cut to 256 characters)
  • Tags, if you send the `x-gpuos-tags` header

The key's last-used time is updated too, at most once a minute. Usage records are kept while the workspace exists and deleted with it. Daily database backups can hold them for up to 30 days more.

What the agent sends

The agent only opens outbound HTTPS connections to https://gpuos.si. Nothing on your machine listens for gpuOS, so no inbound port, port forwarding or public IP is needed. These are the only calls it makes:

CallWhenCarries
POST /api/agent/heartbeatEvery 10 secondsThe inventory above. The reply lists the models this node should have.
GET /api/agent/jobsHeld open for up to 25 seconds, then repeatedNothing. The reply is the next request for this node, if any.
POST /api/agent/jobs/<id>While a request is answeredPieces of Ollama's response, in order.

Each heartbeat reports:

FieldWhatWhat gpuOS keeps
Agent versionThe gpuos-agent release.Stored on the node, overwritten each time.
HostnameThe machine's hostname.Stored on the node, overwritten each time.
Operating systemIts name and version (PRETTY_NAME from /etc/os-release on Linux) and the CPU architecture.Stored on the node, overwritten each time.
OllamaIts version, and whether it answers on the machine.Stored on the node, overwritten each time.
GPUsFor each GPU, from nvidia-smi: index, name, UUID, total and used memory, utilization, temperature and power draw. On a Mac: the chip name and its GPU memory budget.Stored on the node, overwritten each time. No history is kept.
Installed modelsThe tags of every model present in Ollama, including models you pulled yourself.Compared with what the node should run, then dropped. Not stored.
DeploymentsFor each model gpuOS deploys: status, download progress and the error message if a pull failed.Stored on that deployment, overwritten each time.
  • The agent passes a request only to the Ollama API it is set up with, 127.0.0.1:11434 on the same machine by default. The gateway sends it chat, completions and embeddings requests.
  • Model weights are downloaded by Ollama from the Ollama registry, not through gpuOS.
  • The node token is stored on the machine in an environment file that only root can read on Linux and macOS. gpuOS keeps a hash of it. An encrypted copy is kept only until the first heartbeat, so the dashboard can show the install command again.
  • On Linux, the agent runs as a systemd service with a dynamic unprivileged user, NoNewPrivileges, ProtectSystem=strict and ProtectHome.

How to revoke access

  • An app or a person: revoke their key in API keys. The gateway refuses it at once. A key that also works on cpuOS and is revoked from cpuOS stops working on gpuOS within 5 seconds.
  • A machine: in Nodes, rotate its token or delete the node. The old token is refused at once, so the agent receives no more requests. Deleting a node keeps its usage records, without the node.
  • Everything: delete your account in Settings > Your account. Workspaces where you are the only member go with it, including their nodes, keys and usage.

A refused agent keeps retrying until you remove it. To uninstall it:

Linux
sudo systemctl disable --now gpuos-agent
sudo rm /etc/systemd/system/gpuos-agent.service /usr/local/bin/gpuos-agent
sudo rm -r /etc/gpuos
sudo systemctl daemon-reload
macOS
sudo launchctl bootout system/si.gpuos.agent
sudo rm /Library/LaunchDaemons/si.gpuos.agent.plist /usr/local/bin/gpuos-agent
sudo rm -r /usr/local/etc/gpuos
Windows (PowerShell as administrator)
Stop-ScheduledTask -TaskName gpuos-agent
Unregister-ScheduledTask -TaskName gpuos-agent -Confirm:$false
Remove-Item -Recurse "$env:ProgramFiles\gpuos", "$env:ProgramData\gpuos"

Ollama and the models it downloaded stay on the machine.

Related

  • Quickstart: connect a machine and make a first request.
  • Privacy policy: personal data, legal bases, recipients and your rights.

Connect your first GPU

Free for one GPU, no card needed. Inference runs on your hardware.