Skip to content

Your own model

By default, memory formation runs on the model Jennah provides, and its cost is counted in formation units. An organization on the Pro, Scale, Team, or Enterprise plan can run formation on its own model on Amazon Bedrock (for example Claude Sonnet 5.5) in an AWS account instead.

With a formation model set, every formation for your organization runs on that model, across every location, and consumes no formation units: you pay AWS for the inference.

Only the organization's root or an administrator can configure it, signed in as themselves. API keys cannot.

How Jennah reaches your model

You give Jennah no keys or credentials. Jennah assumes an IAM role you create in your AWS account using AWS STS, and the role's trust policy requires an external ID issued to your organization, so that no one else can assume the role.

Setting up Bedrock

  1. Read the values to trust:

    jnh formation-model prepare --provider bedrock
    

    This prints the broker principal ARN to trust, the external ID issued to your organization, and the STS session name. Calling it again prints the same values.

  2. Create the IAM role. The easiest way is the Jennah CloudFormation template: prepare also prints a Launch stack link (the console's Formation model settings have the same link as a button). Following it opens the AWS CloudFormation console with the template, your external ID, and the broker principal already filled in. Review the stack, check the IAM acknowledgment, and create it. The stack's RoleArn output is the role you register in step 4.

    The stack creates a role that trusts only the broker principal, and only with your external ID. The role is granted only bedrock:InvokeModel on the model named by the ModelId parameter (default anthropic.claude-sonnet-5-5), invoked directly or through any inference profile for it. Delete the stack to revoke access. While the model is still set, formations then fail at the access step and never fall back to Jennah's model; remove the model to return to Jennah's model, or recreate the stack with the same external ID.

    To create the role manually instead, for example with your own infrastructure tooling, use the following trust policy:

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {"AWS": "<principal from prepare>"},
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {"sts:ExternalId": "<external ID>"}
        }
      }]
    }
    
  3. If you created the role by hand, attach an IAM policy that allows bedrock:InvokeModel on the foundation model and on any inference profile for it. The CloudFormation template includes this already:

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Action": "bedrock:InvokeModel",
        "Resource": [
          "arn:aws:bedrock:*::foundation-model/<model>",
          "arn:aws:bedrock:*:<account>:inference-profile/<profile>"
        ]
      }]
    }
    

    For Claude Sonnet 5.5, <model> is anthropic.claude-sonnet-5-5 and <profile> is global.anthropic.claude-sonnet-5-5. Enable the model in the Bedrock console for your account, in the region you will name.

  4. Set the model:

    jnh formation-model set --provider bedrock \
      --role-arn arn:aws:iam::<account>:role/<role> \
      --region ap-northeast-1 \
      --model global.anthropic.claude-sonnet-5-5
    

    Some models are offered only through an inference profile (with a global. or regional prefix) rather than a bare model ID. AWS lists the inference profile IDs, with the models and regions each one covers, in Supported Regions and models for inference profiles. The CloudFormation template's ModelId parameter takes the model ID without the prefix (anthropic.claude-sonnet-5-5); --model takes the profile ID (global.anthropic.claude-sonnet-5-5).

Setting checks the model first

set makes one real formation call against your model, through the same access path and with the same settings formations use, before anything is saved. If that call fails, nothing changes: any model you had set stays set. The error says which step failed:

Step Meaning Usual fix
access The role could not be assumed Check the trust policy and external ID
model The model is not enabled, not found, or refused a setting Enable the model in that region, check the ID, or lower --max-output-tokens
answer The model answered, but not with usable structured output Choose a model that supports structured output

The check costs your provider one model call.

To run the same check later without changing anything, use jnh formation-model check or Check now in the console's Formation model settings. It reports whether the model works or which step failed, so it is the quickest way to find out why formations are failing, or to confirm they work again after you fix the cause (for example, after recreating a deleted CloudFormation stack).

Settings

Flag Default Meaning
--thinking provider default low, medium, or high: how much the model reasons before answering
--max-output-tokens 32,000 Bound on one call's output tokens, reasoning included (up to 65,536)

Every formation makes two model calls (extraction, then reconciliation), and reasoning is billed by your provider as output. On Claude Sonnet 5.5, the provider default thinking level is high.

On Claude, medium has been seen to occasionally return an empty extraction. Jennah reports that as a failed formation you can retry, rather than as a formation that found nothing.

No fallback

With a formation model set, formation never runs on Jennah's model, even when yours cannot be reached. A formation that cannot reach your model fails, writes nothing, and names your model in the error:

Situation Status
Role cannot be assumed FAILED_PRECONDITION (identifies the access step)
Model not found, not enabled, or refused parameters FAILED_PRECONDITION (identifies the model and region)
Provider throttled or failed after retry UNAVAILABLE (identifies the model)
Call took too long DEADLINE_EXCEEDED (as on Jennah's model)
Call reached its output bound ABORTED (as on Jennah's model)
Your plan no longer includes a formation model FAILED_PRECONDITION (remove the model or upgrade)

Removing the formation model is the only way back to Jennah's model:

jnh formation-model remove

Billing

  • A formation on your model consumes 0 formation units, and its receipt reports formationUnits: 0. It does not count toward your allowance or overage.
  • Its token usage is still recorded. In token usage grouped by model, it appears under a name like bedrock:ap-northeast-1/global.anthropic.claude-sonnet-5-5, so you can reconcile it against your provider's bill.
  • The billing page shows how many formations were sent to your model this period, including any that failed there.
  • Formations on your model still count toward your plan's limit on formations in progress, and the submission size limit still applies.

Where inference runs

Formation inference runs wherever your model runs. A Bedrock inference profile with the global. prefix may run inference outside the region you name; a regional model or profile keeps it in that region. Choose accordingly if your conversations must stay in one region.

Quality

Jennah's formation is measured and tuned on the model Jennah provides. Another model may extract and reconcile differently: for example, it may combine several facts about one person into one fact. Check formed memory on a sample of your own conversations before relying on it.

Reading and auditing

jnh formation-model get

get shows the active model, its settings, who set it and when, and the setup values issued to your organization. It never shows a credential, because none is stored. Every set and remove is recorded with the administrator who made it.