Skip to main content

Private Document AI Platform with AdaptHex compression

Project description

Adaptensor Python SDK

PyPI version Python 3.8+ License: MIT

Private Document AI Platform — Upload, index, and search your documents with AI. 100% self-hosted, no external APIs.

Features

  • 🔒 100% Private — Your data never leaves your infrastructure
  • Fast Search — Sub-150ms semantic queries across thousands of documents
  • 📦 AdaptHex Compression — 4-8x smaller vectors with 99.6% accuracy
  • 🔌 Simple API — Upload, index, search in 3 lines of code
  • 🚀 TPU Accelerated — 25% cheaper than GPU clouds

Installation

pip install adaptensor

Quick Start

from adaptensor import Adaptensor

# Initialize client
client = Adaptensor(api_key="your-api-key")

# Upload documents
client.documents.upload("contract.pdf")
client.documents.upload("report.docx")

# Build search index
result = client.documents.index()
print(f"Indexed {result.total_chunks} chunks")

# Search
results = client.query("liability clauses", top_k=5)

for chunk in results:
    print(f"[{chunk.score:.2f}] {chunk.text[:100]}...")

Authentication

Set your API key via environment variable or pass directly:

# Environment variable
export ADAPTENSOR_API_KEY="your-api-key"
# Or pass directly
client = Adaptensor(api_key="your-api-key")

Upload Documents

Single File

doc = client.documents.upload("report.pdf")
print(f"Uploaded: {doc.doc_id} ({doc.size_bytes:,} bytes)")

Multiple Files

docs = client.documents.upload_many([
    "doc1.pdf",
    "doc2.pdf",
    "doc3.pdf"
], on_progress=lambda c, t, d: print(f"{c}/{t}: {d.filename}"))

Supported Formats

  • PDF (.pdf)
  • Word (.docx)
  • Text (.txt)
  • HTML (.html)
  • Markdown (.md)
  • CSV (.csv)

Build Index

After uploading documents, build the search index:

result = client.documents.index()

print(f"Status: {result.status}")
print(f"Documents: {result.documents_processed}")
print(f"Chunks: {result.total_chunks}")
print(f"Time: {result.elapsed_seconds:.1f}s")

Search

Basic Search

results = client.query("contract termination", top_k=5)

for chunk in results:
    print(f"Score: {chunk.score:.3f}")
    print(f"Text: {chunk.text}")
    print(f"Source: {chunk.metadata.get('filename')}")
    print("---")

Search Result Object

results = client.query("machine learning")

print(f"Query: {results.query}")
print(f"Results: {results.count}")
print(f"Time: {results.elapsed_ms:.1f}ms")

# Iterate through results
for chunk in results:
    print(chunk.text)

Embeddings

Generate embeddings with optional AdaptHex compression:

# With compression (default)
result = client.embed("machine learning algorithms")
print(f"Dimensions: {result.dimensions}")
print(f"Hex: {result.hex_embedding[:50]}...")

# Without compression
result = client.embed("machine learning", quantize=False)
print(f"Vector: {result.embedding[:5]}...")

Compression Modes

Mode Compression Accuracy
hex8 4x 99.6%
hex4 8x 95.8%
binary 32x ~85%
# Use different compression modes
result = client.embed("text", mode="hex4")  # 8x compression

RAG Chat (Coming Soon)

response = client.chat("What are the key terms in the contract?")
print(response)

Error Handling

from adaptensor import (
    Adaptensor,
    AdaptensorError,
    AuthenticationError,
    DocumentNotFoundError,
    APIError
)

try:
    client = Adaptensor(api_key="invalid-key")
    client.query("test")
except AuthenticationError:
    print("Invalid API key")
except APIError as e:
    print(f"API error: {e} (status: {e.status_code})")
except AdaptensorError as e:
    print(f"General error: {e}")

Configuration

client = Adaptensor(
    api_key="your-api-key",
    base_url="https://your-instance.adaptensor.com",  # Custom endpoint
    timeout=600  # Request timeout in seconds
)

Health Check

if client.health():
    print("API is healthy")
else:
    print("API is down")

Usage Statistics

stats = client.stats()
print(f"Documents: {stats['documents']}")
print(f"Chunks: {stats['chunks']}")
print(f"Queries: {stats['queries']}")

Full Example

from adaptensor import Adaptensor

# Initialize
client = Adaptensor()

# Upload a batch of legal documents
docs = client.documents.upload_many([
    "contracts/agreement_2024.pdf",
    "contracts/amendment_1.pdf",
    "contracts/amendment_2.pdf",
])
print(f"Uploaded {len(docs)} documents")

# Index everything
result = client.documents.index()
print(f"Indexed {result.total_chunks} chunks in {result.elapsed_seconds:.1f}s")

# Search for specific clauses
results = client.query("indemnification obligations", top_k=10)

print(f"\nFound {results.count} results in {results.elapsed_ms:.1f}ms:\n")
for i, chunk in enumerate(results, 1):
    print(f"{i}. [{chunk.score:.2f}] {chunk.metadata.get('filename')}")
    print(f"   {chunk.text[:150]}...")
    print()

Requirements

  • Python 3.8+
  • requests >= 2.25.0

Links

License

MIT License - see LICENSE for details.


Adaptensor — Your Data. Your Infrastructure. Your AI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adaptensor-0.2.0.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

adaptensor-0.2.0-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file adaptensor-0.2.0.tar.gz.

File metadata

  • Download URL: adaptensor-0.2.0.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for adaptensor-0.2.0.tar.gz
Algorithm Hash digest
SHA256 97f0542bdc1610613256ccfe6705354511114d2050e981cb887090f0886f79db
MD5 370b9e605eac097d588d7b4f65e3747a
BLAKE2b-256 0a71eb20032459792dad3e71816800298285abbe882709decf48d2fd6173ffd4

See more details on using hashes here.

File details

Details for the file adaptensor-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: adaptensor-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for adaptensor-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 181e03869544b8654bdddd15440e5c61649e64c28a1257d38fefeb26983beec7
MD5 417f5ede215ba4165d03a256b026adea
BLAKE2b-256 d02a639748f50cc309268354f0fac02d9dea61089f21c563fa4d5788d140be62

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page