# What Is Hindsight Bank Disposition and How Does It Impact AI Responses?

> Discover Hindsight bank disposition, a tool that tunes LLM prompts for AI responses reflecting specific personality traits like skepticism, literalism, and empathy. Understand its impact on AI.

- Repository: [vectorize-io/hindsight](https://github.com/vectorize-io/hindsight)
- Tags: deep-dive
- Published: 2026-03-13

---

**Hindsight bank disposition is a configurable set of three personality traits—skepticism, literalism, and empathy—that automatically tunes every LLM prompt to generate responses matching the bank's designated "character," from risk-averse analysis to emotionally-aware coaching.**

In the `vectorize-io/hindsight` open-source memory framework, each memory bank carries its own **bank disposition** metadata. According to the Hindsight source code, these numeric traits are not merely stored for reference; they are actively converted into natural-language system instructions that reshape how the AI processes queries during `reflect`, `think`, and other cognitive operations.

## Understanding the Three Disposition Traits

The `DispositionTraits` model in [`hindsight_api/engine/response_models.py`](https://github.com/vectorize-io/hindsight/blob/main/hindsight_api/engine/response_models.py) defines three constrained integer fields, each accepting values from 1 (low) to 5 (high). These values determine the stylistic and analytical posture of the AI when accessing that bank's memories.

### Skepticism

**Skepticism** controls the degree of caution and uncertainty-flagging in AI responses. When set to 5, the system prompt instructs the LLM to aggressively question assumptions, highlight risks, and avoid over-optimistic conclusions. At level 1, the model accepts premises more readily and focuses on constructive expansion rather than critical analysis.

### Literalism

**Literalism** dictates how strictly the AI adheres to the exact wording of stored facts versus inferring broader intent. High literalism (5) produces responses that quote and stick closely to source text, making it ideal for legal or compliance contexts. Lower values allow the model to paraphrase and interpret context more freely.

### Empathy

**Empathy** weights the emotional context of user queries and stored memories. A value of 5 injects instructions to acknowledge feelings, validate user states, and prioritize supportive tone over pure factual accuracy. Low empathy (1) maintains clinical detachment, focusing strictly on informational content.

## How Disposition Data Flows Through the System

The Hindsight engine implements a consistent pipeline that transforms raw numeric traits into dynamic prompt engineering. This architecture ensures that disposition settings instantly affect all subsequent AI interactions without requiring model retraining.

### Storage and Retrieval

Bank disposition persists as JSONB in the `banks` table. The `bank_utils.get_bank_profile()` function in [`hindsight_api/engine/retain/bank_utils.py`](https://github.com/vectorize-io/hindsight/blob/main/hindsight_api/engine/retain/bank_utils.py) handles both retrieval and initialization: if no disposition is specified during bank creation, it defaults to `{"skepticism":3,"literalism":3,"empathy":3}`. The companion function `bank_utils.update_bank_disposition()` executes a direct SQL `UPDATE` statement, allowing real-time personality adjustments without service restarts.

### Prompt Assembly and Injection

When processing a request, the engine loads the bank profile and converts numeric traits into natural-language instructions. The `think_utils.build_disposition_description()` function in [`hindsight_api/engine/search/think_utils.py`](https://github.com/vectorize-io/hindsight/blob/main/hindsight_api/engine/search/think_utils.py) generates a human-readable paragraph describing the trait levels (e.g., "Skepticism (high): be cautious and highlight uncertainties"). Subsequently, `think_utils.get_system_message()` embeds this description as a **disposition-specific instruction block** into the system prompt sent to the LLM.

For reflection operations specifically, [`hindsight_api/engine/reflect/prompts.py`](https://github.com/vectorize-io/hindsight/blob/main/hindsight_api/engine/reflect/prompts.py) appends the raw trait values as tagged context (`skepticism=5`, `literalism=4`, `empathy=2`) to ensure downstream models can factor the bank's character into their synthesis.

## Configuring Bank Disposition in Practice

You define and modify disposition through the Hindsight Python SDK. The `CreateBankRequest` model in [`hindsight_client_api/models/create_bank_request.py`](https://github.com/vectorize-io/hindsight/blob/main/hindsight_client_api/models/create_bank_request.py) serializes the trait dictionary for transmission to the API.

### Creating a Bank with Custom Traits

```python
from hindsight_client import HindsightClient

client = HindsightClient(api_key="YOUR_KEY")

client.create_bank(
    bank_id="cautious_advisor",
    name="Cautious Advisor",
    mission="I provide risk-aware financial advice.",
    disposition={
        "skepticism": 5,    # Maximum caution

        "literalism": 4,    # Precise wording preferred

        "empathy": 2,       # Facts over feelings

    },
)

```

This stores the configuration as JSONB in the database, ready for immediate use in prompt generation.

### Updating Disposition Dynamically

Adjust a bank's personality post-creation using the dedicated update method, which maps directly to `bank_utils.update_bank_disposition()`:

```python
client.update_bank_disposition(
    bank_id="cautious_advisor",
    disposition={
        "skepticism": 3,
        "literalism": 3,
        "empathy": 5,      # Shift to empathetic support

    },
)

```

The change takes effect on the next API call, as the engine reloads the bank profile fresh for each request.

## Impact on AI Response Generation

The disposition system demonstrably alters LLM output tone and content structure. When you invoke `client.reflect()` or `client.think()`, the engine constructs a system prompt that explicitly binds the bank's trait levels to behavioral instructions.

### High-Skepticism Example

A bank configured with `skepticism: 5` generates system prompts containing clauses like "be cautious, highlight uncertainties, and avoid over-optimistic statements." Consequently, a query such as "Should I invest in crypto?" produces risk-averse analysis emphasizing volatility and potential losses rather than opportunity.

```python
resp = client.reflect(
    bank_id="cautious_advisor",
    query="Should I invest in crypto?",
)

# Response: "I would be very cautious... the risks outweigh the potential upside..."

```

### High-Empathy Example

Conversely, a bank with `empathy: 5` and `skepticism: 2` injects instructions to "emphasize emotional context and validate user feelings," yielding gentler, more supportive responses:

```python
client.create_bank(
    bank_id="supportive_coach",
    name="Supportive Coach",
    disposition={"skepticism": 2, "literalism": 2, "empathy": 5},
)

resp = client.reflect(
    bank_id="supportive_coach",
    query="I feel anxious about my upcoming presentation.",
)

# Response: "I totally understand how you feel... let's focus on the strengths you already have..."

```

## Summary

- **Hindsight bank disposition** consists of three numeric traits (skepticism, literalism, empathy) stored per memory bank in the `banks` table as JSONB.
- The `DispositionTraits` model enforces values between 1 and 5, with a default of 3 for all traits if unspecified.
- The engine converts these values into natural-language system instructions via `think_utils.build_disposition_description()` and `get_system_message()`.
- High skepticism produces cautious, uncertainty-flagging responses; high literalism enforces strict adherence to source text; high empathy prioritizes emotional validation.
- You can configure disposition during bank creation or update it dynamically using `update_bank_disposition()`, with changes reflecting immediately in subsequent AI responses.

## Frequently Asked Questions

### What are the valid ranges for Hindsight bank disposition traits?

Each trait—skepticism, literalism, and empathy—accepts integer values from 1 to 5 inclusive. The `DispositionTraits` Pydantic model in [`hindsight_api/engine/response_models.py`](https://github.com/vectorize-io/hindsight/blob/main/hindsight_api/engine/response_models.py) enforces these constraints using `ge=1, le=5` validators. If you attempt to create or update a bank with values outside this range, the API returns a validation error.

### Does changing a bank's disposition affect existing memories?

No. Modifying disposition via `bank_utils.update_bank_disposition()` only affects future AI response generation. The trait values are read at request time and injected into the LLM prompt; they do not alter the stored memory vectors or their embeddings. Existing memories remain intact and retrievable regardless of disposition changes.

### How does bank disposition differ from the bank's mission statement?

While the **mission** defines the bank's functional purpose and domain expertise (e.g., "provide financial advice"), **disposition** controls the stylistic and analytical approach to that advice. According to the source code in [`think_utils.py`](https://github.com/vectorize-io/hindsight/blob/main/think_utils.py), the system prompt contains separate sections for mission context and disposition instructions, allowing orthogonal configuration of *what* the AI knows versus *how* it communicates that knowledge.

### Is there a performance penalty for using custom disposition settings?

No measurable performance overhead exists. The disposition lookup occurs via `bank_utils.get_bank_profile()`, which executes a simple indexed SQL query against the `banks` table, and the prompt generation logic in `think_utils.build_disposition_description()` involves only string concatenation. These operations add negligible latency compared to the LLM inference time itself.