Metadata-Version: 2.4
Name: impera
Version: 0.1.0
Summary: Universal vector database client — query across multiple vector databases with different embedding models
Project-URL: Homepage, https://gitlab.com/causum/impera
Project-URL: Repository, https://gitlab.com/causum/impera.git
Project-URL: Issues, https://gitlab.com/causum/impera/-/issues
Project-URL: Documentation, https://gitlab.com/causum/impera/-/blob/main/spec/SPEC.md
Author-email: "Causum, Inc." <oss@causum.io>
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: client,database,embeddings,search,vector
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Database
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: httpx<1,>=0.27
Requires-Dist: pydantic<3,>=2.7
Provides-Extra: all
Requires-Dist: chromadb<1,>=0.5; extra == 'all'
Requires-Dist: cohere<6,>=5; extra == 'all'
Requires-Dist: fastembed<1,>=0.3; extra == 'all'
Requires-Dist: ollama<2,>=0.3; extra == 'all'
Requires-Dist: openai<3,>=1.30; extra == 'all'
Requires-Dist: pgvector<1,>=0.3; extra == 'all'
Requires-Dist: pinecone<7,>=5; extra == 'all'
Requires-Dist: psycopg[binary]<4,>=3; extra == 'all'
Requires-Dist: pymilvus<3,>=2.4; extra == 'all'
Requires-Dist: qdrant-client<3,>=1.9; extra == 'all'
Requires-Dist: voyageai<2,>=0.3; extra == 'all'
Requires-Dist: weaviate-client<5,>=4; extra == 'all'
Provides-Extra: all-drivers
Requires-Dist: chromadb<1,>=0.5; extra == 'all-drivers'
Requires-Dist: pgvector<1,>=0.3; extra == 'all-drivers'
Requires-Dist: pinecone<7,>=5; extra == 'all-drivers'
Requires-Dist: psycopg[binary]<4,>=3; extra == 'all-drivers'
Requires-Dist: pymilvus<3,>=2.4; extra == 'all-drivers'
Requires-Dist: qdrant-client<3,>=1.9; extra == 'all-drivers'
Requires-Dist: weaviate-client<5,>=4; extra == 'all-drivers'
Provides-Extra: all-embedders
Requires-Dist: cohere<6,>=5; extra == 'all-embedders'
Requires-Dist: fastembed<1,>=0.3; extra == 'all-embedders'
Requires-Dist: ollama<2,>=0.3; extra == 'all-embedders'
Requires-Dist: openai<3,>=1.30; extra == 'all-embedders'
Requires-Dist: voyageai<2,>=0.3; extra == 'all-embedders'
Provides-Extra: chroma
Requires-Dist: chromadb<1,>=0.5; extra == 'chroma'
Provides-Extra: cohere
Requires-Dist: cohere<6,>=5; extra == 'cohere'
Provides-Extra: dev
Requires-Dist: jsonschema[format]<5,>=4.22; extra == 'dev'
Requires-Dist: pytest-asyncio<1,>=0.24; extra == 'dev'
Requires-Dist: pytest<9,>=8; extra == 'dev'
Requires-Dist: ruff<1,>=0.4; extra == 'dev'
Provides-Extra: elasticsearch
Requires-Dist: elasticsearch<9,>=8; extra == 'elasticsearch'
Provides-Extra: faiss-cpu
Requires-Dist: faiss-cpu<2,>=1.7; extra == 'faiss-cpu'
Provides-Extra: fastembed
Requires-Dist: fastembed<1,>=0.3; extra == 'fastembed'
Provides-Extra: google
Requires-Dist: google-genai<2,>=1; extra == 'google'
Provides-Extra: milvus
Requires-Dist: pymilvus<3,>=2.4; extra == 'milvus'
Provides-Extra: mistral
Requires-Dist: mistralai<2,>=1; extra == 'mistral'
Provides-Extra: mongodb
Requires-Dist: pymongo<5,>=4.7; extra == 'mongodb'
Provides-Extra: ollama
Requires-Dist: ollama<2,>=0.3; extra == 'ollama'
Provides-Extra: openai
Requires-Dist: openai<3,>=1.30; extra == 'openai'
Provides-Extra: pgvector
Requires-Dist: pgvector<1,>=0.3; extra == 'pgvector'
Requires-Dist: psycopg[binary]<4,>=3; extra == 'pgvector'
Provides-Extra: pinecone
Requires-Dist: pinecone<7,>=5; extra == 'pinecone'
Provides-Extra: qdrant
Requires-Dist: qdrant-client<3,>=1.9; extra == 'qdrant'
Provides-Extra: voyageai
Requires-Dist: voyageai<2,>=0.3; extra == 'voyageai'
Provides-Extra: weaviate
Requires-Dist: weaviate-client<5,>=4; extra == 'weaviate'
Description-Content-Type: text/markdown

# Impera: Universal Vector Database Client

A universal client for querying across multiple vector databases that use different embedding models, returning a unified result to the caller.

## The Problem

Vector databases are built around a single embedding model. When an application spans multiple vector databases — whether by design or circumstance — there is no standard way to query across them. Each database lives in an incompatible vector space, requiring the caller to manage embedding, querying, and result merging manually.

## What This Is

A universal client that, given an intention as input:

1. Identifies which embedding model each target database uses
2. Embeds the input accordingly, once per model
3. Queries each database in its own embedding space
4. Returns a normalized, reconcilable result set to the caller

The loop, analysis, and reconciliation logic belong to the calling application. This client handles the embedding and search layer only.

## What This Is Not

- A vector database
- A reconciliation or ranking engine
- An agent or reasoning system
- A wrapper around any single vector database or embedding provider

## Specifications

This project is specification-first. The client behavior is defined by a set of open, versioned, machine-readable specs before any implementation. See [`spec/SPEC.md`](spec/SPEC.md) for how specs are written and governed.

The v1 spec set covers:

| Spec | Purpose |
|------|---------|
| Registry | Maps each source to its embedding model and access method |
| Query | Format for an intention passed to the client |
| Result | Normalized schema returned to the caller |
| Auth | Credentials and access configuration per source |
| Error | Error types and fallback behavior |
| Versioning | How embedding model version changes are declared and handled |

## Status

Specification in progress. No implementation yet.

## Contributing

Contributions to the specs are welcome via PR. See [`spec/SPEC.md`](spec/SPEC.md) for the process.

## License

Apache 2.0