Metadata-Version: 2.4
Name: bicardinal
Version: 0.0.2
Summary: Multimodal retrieval engine
Project-URL: Homepage, https://github.com/bicardinal/bicardinal
Project-URL: Issues, https://github.com/bicardinal/bicardinal/issues
Author-email: bicardinal <support@bicardinal.com>
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: AI,bicardinal,cloud,database,document,vector
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.12
Requires-Dist: brinicle==0.1.0
Requires-Dist: mistralai>=1.0
Requires-Dist: numpy>=1.26
Requires-Dist: openai>=1.40
Requires-Dist: pypdf>=4.0
Requires-Dist: python-docx>=1.1
Requires-Dist: python-magic>=0.4.27
Requires-Dist: sentence-transformers>=3.0
Requires-Dist: voyageai>=0.3
Provides-Extra: audio
Requires-Dist: pydub>=0.25; extra == 'audio'
Provides-Extra: dev
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Description-Content-Type: text/markdown


# bicardinal

**Multimodal retrieval engine.** Drop in PDFs, Word docs, images, audio, or
plain text, bicardinal extracts, summarizes, embeds, and indexes them so you
can search across everything with one call.

## Install

```bash
pip install bicardinal
```

Set your provider keys (used for OCR, vision, transcription, and summaries):

```bash
export OPENAI_API_KEY=sk-...
export MISTRAL_API_KEY=...
```

## Deadly simple

```python
from pathlib import Path
from bicardinal import Bicardinal

store = Bicardinal("./data")          # a home for your collections
col = store.create("docs")            # make a collection
col.init("build")                     # open it for ingestion

# Throw any file at it, pdf, docx, png, mp3, txt...
for path in Path("./my_files").glob("*"):
    col.ingest(path.name, path.read_bytes())

col.finalize() # build the index

# Search across everything
for hit in col.search("quarterly revenue growth", k=5):
    print(f"{hit.score:.3f}  {hit.filename}#{hit.chunk_index}  {hit.raw_text[:80]}")

col.close()
```

That's it. No pipelines to wire, no embedding code to write.

## A little more

```python
# Rank whole files by relevance
for f in col.most_similar_files("budget forecast", k=3):
    print(f.score, f.filename)

# Search within a single document
col.search_in_file("conclusion", "report.pdf", k=5)

# Reopen later, it's all on disk
col = store.open("docs")
```

See [`examples/quickstart.py`](examples/quickstart.py) for a fuller tour.

## License

Apache-2.0
