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.1.0.tar.gz (11.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.1.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: adaptensor-0.1.0.tar.gz
  • Upload date:
  • Size: 11.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.1.0.tar.gz
Algorithm Hash digest
SHA256 50e6a3736b80349fb1987b72171f4133947b1423417c61537e2675835ddefcc3
MD5 6657fffef835c1e40f86e62d5d071f42
BLAKE2b-256 8b615995997a673d9d91b9e9f1c5b0e07b3f0300555151adbdb0fa2ce4aaabb8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: adaptensor-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.6 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 24ab5ce57d510b65ea9908a92f3df93d64e3b7b39a7e616f07f2917b4bc757c4
MD5 b89ff614251d5c79fdbf055049ad3a43
BLAKE2b-256 aa749d368e84b60b21caf58b5fcb7862ff75b7d296e5ce774705dcd8b0de49ac

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