tinyhumansai (Python SDK)
Python SDK for TinyHumans Neocortex memory APIs (core memory, documents, mirrored routes, ingestion jobs).
Requirements
- Python 3.9+
Install
pip install tinyhumansai
For local development from this repo:
cd packages/sdk-python
uv sync --group dev
Get an API key
Export credentials before running examples:
export TINYHUMANS_TOKEN="your_api_key"
# Optional overrides:
export TINYHUMANS_MODEL_ID="neocortex-mk1"
export TINYHUMANS_BASE_URL="https://api.tinyhumans.ai"
Quick start
import time
import tinyhumansai as api
client = api.TinyHumansMemoryClient(token="YOUR_API_KEY")
# Insert (documents API) - document_id is required
namespace = "preferences"
document_id = f"pref-{int(time.time())}"
client.insert_document(
title="User preference",
content="User prefers dark mode",
namespace=namespace,
document_id=document_id,
)
# Recall context for an LLM prompt
ctx = client.recall_memory(
namespace=namespace,
prompt="What does the user prefer?",
num_chunks=10,
)
print(ctx.context)
Notes:
- The legacy
ingest_memoryroute mapskeyto the backenddocumentId.
Full route example
example.py exercises core + documents + mirrored routes + ingestion job polling + cleanup.
cd packages/sdk-python
python3 example.py
API reference
TinyHumansMemoryClient(token, model_id="neocortex-mk1", base_url=None)
| Param | Type | Required | Description |
|---|---|---|---|
token |
str |
✓ | API key or JWT |
model_id |
str |
Sent as X-Model-Id |
|
base_url |
str | None |
Override API URL. If not set, uses TINYHUMANS_BASE_URL env or SDK default |
client.ingest_memory(item={...})
Legacy ingest route. POST /v1/memory/insert
The SDK maps:
key→ backenddocumentId(andtitle)
| Field | Type | Required | Description |
|---|---|---|---|
key |
str |
✓ | Unique key within the namespace |
content |
str |
✓ | Memory content |
namespace |
str |
✓ | Namespace |
metadata |
dict |
Optional metadata | |
created_at |
float | int |
Unix timestamp (seconds) | |
updated_at |
float | int |
Unix timestamp (seconds) |
Returns IngestMemoryResponse (ingested, updated, errors).
client.recall_memory(namespace, prompt, num_chunks=10, key=None, keys=None)
Query memory and return an LLM-friendly context string. POST /v1/memory/query
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
str |
✓ | Namespace |
prompt |
str |
✓ | Query prompt |
num_chunks |
int |
Max chunks to retrieve | |
key |
str | None |
Optional single document id filter | |
keys |
list[str] | None |
Optional document id filters |
Returns GetContextResponse (context, items, count).
client.delete_memory(namespace, delete_all=True)
Delete memory (namespace-scoped). POST /v1/memory/admin/delete
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
str |
✓ | Namespace |
delete_all |
bool |
✓ | Must be True to confirm deletion |
Returns DeleteMemoryResponse (deleted).
client.insert_document(...)
Insert a single document. POST /v1/memory/documents
| Field | Type | Required | Description |
|---|---|---|---|
title |
str |
✓ | Document title |
content |
str |
✓ | Document content |
namespace |
str |
✓ | Namespace |
document_id |
str |
✓ | Unique document ID |
source_type |
str | None |
e.g. "doc" |
|
metadata |
dict | None |
Optional metadata | |
priority |
str | None |
Optional priority | |
created_at |
float | None |
Unix timestamp (seconds) | |
updated_at |
float | None |
Unix timestamp (seconds) |
Returns the backend data dict.
client.insert_documents_batch(items=[...])
Insert multiple documents in one call. POST /v1/memory/documents/batch
| Field | Type | Required | Description |
|---|---|---|---|
items |
list[dict] |
✓ | Each item must include title, content, namespace, and documentId (or document_id) |
Returns the backend data dict.
client.list_documents(namespace=None, limit=None, offset=None)
List documents. GET /v1/memory/documents
| Field | Type | Description |
|---|---|---|
namespace |
str | None |
Optional namespace |
limit |
int | None |
Optional page size |
offset |
int | None |
Optional page offset |
Returns the backend data dict.
client.get_document(document_id, namespace=None)
Get document details. GET /v1/memory/documents/:documentId
| Field | Type | Required | Description |
|---|---|---|---|
document_id |
str |
✓ | Document ID |
namespace |
str | None |
Optional namespace |
Returns the backend data dict.
client.delete_document(document_id, namespace)
Delete a document. DELETE /v1/memory/documents/:documentId
| Field | Type | Required | Description |
|---|---|---|---|
document_id |
str |
✓ | Document ID |
namespace |
str |
✓ | Namespace |
Returns the backend data dict.
client.query_memory_context(...)
Query memory context. POST /v1/memory/queries
| Field | Type | Required | Description |
|---|---|---|---|
query |
str |
✓ | Query string |
namespace |
str | None |
Optional namespace | |
include_references |
bool | None |
Include references | |
max_chunks |
int | None |
Optional chunk limit | |
document_ids |
list[str] | None |
Optional document filters | |
recall_only |
bool | None |
Recall-only mode | |
llm_query |
str | None |
Optional LLM query override |
Returns the backend data dict.
client.chat_memory_context(messages=[...], temperature=None, max_tokens=None)
Chat with memory context. POST /v1/memory/conversations
| Field | Type | Required | Description |
|---|---|---|---|
messages |
list[dict] |
✓ | Conversation messages [{role, content}] |
temperature |
float | None |
Optional temperature | |
max_tokens |
int | None |
Optional token limit |
Returns the backend data dict.
client.record_interactions(...)
Record interaction signals. POST /v1/memory/interactions
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
str |
✓ | Namespace |
entity_names |
list[str] |
✓ | Entity names |
description |
str | None |
Optional description | |
interaction_level |
str | None |
Optional interaction level | |
interaction_levels |
list[str] | None |
Optional multiple interaction levels | |
timestamp |
float | None |
Optional Unix timestamp (seconds) |
Returns the backend data dict.
client.get_ingestion_job(job_id)
Get ingestion job status. GET /v1/memory/ingestion/jobs/:jobId
client.wait_for_ingestion_job(job_id, timeout_seconds=30, poll_interval_seconds=1)
Poll an ingestion job until it reaches a terminal state.
Implemented methods
Core methods:
ingest_memoryingest_memoriesrecall_memorydelete_memoryrecall_with_llm
Mirrored routes:
chat_memoryinteract_memoryrecall_memory_masterrecall_memoriesquery_memory_contextchat_memory_contextrecord_interactionsrecall_thoughtsget_graph_snapshot
Documents:
insert_document(requiresdocument_id)insert_documents_batch(each item requiresdocumentId/document_id)list_documentsget_documentdelete_document
Ingestion jobs:
get_ingestion_jobwait_for_ingestion_job
Error handling
API errors raise TinyHumansError with message, status, and body.
import tinyhumansai as api
from tinyhumansai import TinyHumansError
client = api.TinyHumansMemoryClient(token="YOUR_API_KEY")
try:
client.list_documents(namespace="ns", limit=1, offset=0)
except TinyHumansError as err:
print(err.status, err, err.body)
Tests
cd packages/sdk-python
python3 scripts/test_routes.py
Metadata
Release files for tinyhumansai 0.5.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tinyhumansai-0.5.6.tar.gz | 20.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tinyhumansai-0.5.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.0 kB
Release files / tinyhumansai-0.5.6.tar.gz
| Download URL | tinyhumansai-0.5.6.tar.gz |
|---|---|
| Size | 20.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
91619fea31544dfc6ecd62474106bb4e0a599cfe9df52eda8241ccdde8575bab
|
|
BLAKE2b-256 checksum How to use checksums |
57d42471f603a79bb8f9834ab17b320d416d1bc41801e09ce2a10aa4303e5544
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tinyhumansai-0.5.6-py3-none-any.whl
| Download URL | tinyhumansai-0.5.6-py3-none-any.whl |
|---|---|
| Size | 20.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d6a022f312a0ca7d5ee162cc35380c3acabf30d575547e517de811f34cebe874
|
|
BLAKE2b-256 checksum How to use checksums |
0187a6870b094389ae34c2d42e9093240cd7b946f1f44ae256a2386017c99221
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|