> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To build and serve your own model, start at /deploy/development/quickstart and /deploy/development/overview. Deploying is the default path: reactor init scaffolds a workspace, reactor auth login authenticates, and reactor model deploy registers the model, publishes the release with the weights/ folder, and activates it on Reactor's GPUs, in one command from that workspace. Docker must be running, because the publish step builds the image locally. Bump model.version in reactor.yaml before redeploying a change, because a release that already has an image is reactivated as it is. Deployment access is granted per account, so contact team@reactor.inc if a deploy is refused. Every key in reactor.yaml is documented at /deploy/platform/reactor-yaml. Model code imports reactor_runtime; Python client code imports reactor_sdk. The runtime overview explains the model interface. Running the model on your own machine with reactor run is optional and needs a GPU you attach with --gpus; /deploy/development/local-testing covers that loop and pairs a complete brightness model with a Python client test in a separate brightness-test workspace.
> Reactor hosts multiple models, each with its own connect slug (modelName) and command/event schema. The catalog of every model — slug, typed SDK package, and links to its schema — is at /model-api-reference/overview. Some models expose one slug per experience (e.g. HappyOyster); always take the slug from the model's own pages, never guess it.
> Fastest path to a working app: `npx create-reactor-app my-app --model=<slug>` scaffolds a complete app with secure auth wired up. Typed TypeScript SDKs are published as @reactor-models/<model>; Python uses the base reactor-sdk package.
> Auth: exchange an API key (rk_...) for a JWT via POST https://api.reactor.inc/tokens from your server. Never put the API key in client-side code.
> Append .md to any docs URL for clean Markdown. Search these docs via the MCP server at https://docs.reactor.inc/mcp.

# InputField

> Declare a field's default and the constraints the runtime enforces.

Declare a field's default and the constraints the runtime enforces before a value reaches your
model. Use it as the default of an `InputState` field or of an `@event` handler parameter.

```python Signature theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
InputField(
    default: Any = ...,
    *,
    description: str | None = None,
    ge: int | float | None = None,
    le: int | float | None = None,
    min_length: int | None = None,
    max_length: int | None = None,
    choices: list[Any] | None = None,
    moderate: bool = False,
) -> Any
```

<ResponseField name="default" type="Any">
  The value a new session starts from. Omit it and the field is required: a client has to set it
  before its value is read. A mutable default is rejected when the class is declared.
</ResponseField>

<ResponseField name="description" type="str | None">
  What the client sees for the generated command, in the published schema.
</ResponseField>

<ResponseField name="ge / le" type="int | float | None">
  Inclusive lower and upper bounds on a number.
</ResponseField>

<ResponseField name="min_length / max_length" type="int | None">
  Bounds on the length of a string or sequence.
</ResponseField>

<ResponseField name="choices" type="list | None">
  The exhaustive set of accepted values.
</ResponseField>

<ResponseField name="moderate" type="bool" default="False">
  Marks free text a deployment should moderate. The runtime moderates nothing itself; the mark is
  a preference read off the published schema.
</ResponseField>

A value that violates a constraint is refused with `invalid_command`, the field keeps its old
value, and your code is never called.
