---
sidebar_position: 1
---
# Python Client
Official Python client for the Hindsight API.
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
## Installation
The `hindsight-all` package includes embedded PostgreSQL, HTTP API server, and client:
```bash
pip install hindsight-all
```
If you already have a Hindsight server running:
```bash
pip install hindsight-client
```
## Quick Start
```python
import os
from hindsight import HindsightServer, HindsightClient
with HindsightServer(
llm_provider="openai",
llm_model="gpt-4.1-mini",
llm_api_key=os.environ["OPENAI_API_KEY"]
) as server:
client = HindsightClient(base_url=server.url)
# Store a memory
client.put(agent_id="my-agent", content="Alice works at Google")
# Search memories
results = client.search(agent_id="my-agent", query="What does Alice do?")
for r in results:
print(r["text"], r["weight"])
# Generate response with personality
answer = client.think(agent_id="my-agent", query="Tell me about Alice")
print(answer["text"])
```
```python
from hindsight_client import Hindsight
client = Hindsight(base_url="http://localhost:8888")
# Store a memory
client.put(agent_id="my-agent", content="Alice works at Google")
# Search memories
results = client.search(agent_id="my-agent", query="What does Alice do?")
for r in results:
print(r["text"], r["weight"])
# Generate response with personality
answer = client.think(agent_id="my-agent", query="Tell me about Alice")
print(answer["text"])
```
## Client Initialization
```python
from hindsight_client import Hindsight
client = Hindsight(
base_url="http://localhost:8888", # Hindsight API URL
timeout=30.0, # Request timeout in seconds
)
```
## Memory Operations
### Store Single Memory
```python
client.store(
agent_id="my-agent",
content="Alice works at Google as a software engineer",
context="career discussion", # Optional context
event_date="2024-01-15T10:00:00Z", # Optional event date
)
```
### Store Batch
```python
client.store_batch(
agent_id="my-agent",
items=[
{"content": "Alice works at Google", "context": "career"},
{"content": "Bob is a data scientist", "context": "career"},
],
document_id="conversation_001", # Optional grouping
)
```
## Search Operations
### Basic Search
```python
results = client.search(
agent_id="my-agent",
query="What does Alice do?",
)
for r in results:
print(f"{r['text']} (weight: {r['weight']})")
```
### Advanced Search
```python
results = client.search_memories(
agent_id="my-agent",
query="What does Alice do?",
fact_type=["world", "agent"], # Filter by type
max_tokens=4096, # Token budget for results
top_k=10, # Max results
)
```
### Search by Fact Type
```python
# Search only world facts
world_facts = client.search_memories(
agent_id="my-agent",
query="Who works at Google?",
fact_type=["world"],
)
# Search only opinions
opinions = client.search_memories(
agent_id="my-agent",
query="What do I think about Python?",
fact_type=["opinion"],
)
```
## Think (Generate Response)
Generate personality-aware responses using retrieved memories:
```python
answer = client.think(
agent_id="my-agent",
query="What should I know about Alice?",
thinking_budget=100, # Tokens for query understanding
)
print(answer["text"]) # Generated response
print(answer["based_on"]) # Memories used
print(answer["new_opinions"]) # New opinions formed
```
## Agent Management
### Create Agent
```python
client.create_agent(
agent_id="my-agent",
name="Assistant",
background="I am a helpful AI assistant",
personality={
"openness": 0.7,
"conscientiousness": 0.8,
"extraversion": 0.5,
"agreeableness": 0.6,
"neuroticism": 0.3,
"bias_strength": 0.5,
},
)
```
### Get Profile
```python
profile = client.get_profile(agent_id="my-agent")
print(profile["personality"])
print(profile["background"])
```
### List Agents
```python
agents = client.list_agents()
for agent in agents:
print(agent["agent_id"])
```
### Update Personality
```python
client.update_personality(
agent_id="my-agent",
openness=0.9,
conscientiousness=0.7,
)
```
### Update Background
```python
client.update_background(
agent_id="my-agent",
background="Additional context to merge with existing background",
)
```
## Error Handling
```python
from hindsight_client import Hindsight, HindsightError
client = Hindsight(base_url="http://localhost:8888")
try:
results = client.search(agent_id="unknown", query="test")
except HindsightError as e:
print(f"Error: {e.message}")
print(f"Status: {e.status}")
```
## Async Support
```python
import asyncio
from hindsight_client import AsyncHindsight
async def main():
client = AsyncHindsight(base_url="http://localhost:8888")
# All methods have async versions
await client.store(agent_id="my-agent", content="Hello world")
results = await client.search(agent_id="my-agent", query="Hello")
print(results)
asyncio.run(main())
```