The security surface you now own
Self-hosting removes a third party from the data path and adds an attack surface you are responsible for. Both halves are real.
The inference endpoint is the obvious one. It accepts arbitrary text, is expensive to serve, and is frequently deployed inside a network perimeter with weak authentication because it is treated as internal infrastructure. An unauthenticated endpoint is available to anything that can reach it, including a compromised internal service.
Model supply chain. Weights downloaded from a public hub are executable content in a meaningful sense, and older serialisation formats could execute code on load. Prefer safetensors, verify checksums, and pin versions rather than pulling latest, for the same reasons you would with any dependency.
Resource exhaustion. A model server is trivially expensive to attack: long prompts and long generations consume capacity, so an attacker who can reach the endpoint can deny service to everyone else cheaply. Rate limits and token caps are not optional.
Log exposure. Prompt and completion logs are frequently the most sensitive data store in the deployment, and they are usually created by default without anyone deciding to.
And the guardrail layer is now yours too. An API provider applies safety filtering you inherit; a raw open model applies none, so everything in the guardrails cursus becomes your build rather than your configuration.

