Skip to main content

Ingestion pipeline for the koji-db database: parsing, chunking, and multi-vector embeddings

Project description

Shikomi

Ingestion pipeline for Kōji — document parsing, chunking, multi-vector embeddings, and VLM enrichment.

Shikomi transforms raw documents (PDF, DOCX, PPTX, audio, images, and more) into ColBERT-style multi-vector embeddings ready for storage and semantic search in Kōji.

Installation

# Core ingestion (parsing, chunking, embeddings)
pip install shikomi

# With document parsing support (Docling, PDF)
pip install "shikomi[document]"

# With LibreOffice-based rendering (DOCX/PPTX page images)
pip install "shikomi[rendering]"

# With MLX VLM enrichment engine (Apple Silicon)
pip install "shikomi[enrichment]"

# With Kōji storage integration (PyArrow)
pip install "shikomi[koji]"

Features

Multi-Vector Embeddings

Shikomi generates ColBERT-style multi-vector embeddings where each document is represented by a set of per-token vectors, enabling MaxSim late-interaction scoring:

from shikomi import MultiVectorEmbedding
import numpy as np

data = np.random.randn(10, 128).astype(np.float32)
emb = MultiVectorEmbedding(num_tokens=10, dim=128, data=data)

blob = emb.to_blob()          # serialize for Lance storage
recovered = MultiVectorEmbedding.from_blob(blob)

Document Parsing and Chunking

Parse and chunk documents in a variety of formats via Docling:

from shikomi import parse, chunk, IngestConfig

config = IngestConfig()
parsed = parse("report.pdf", config=config)
chunks = chunk(parsed, config=config)

Supported formats include PDF, DOCX, PPTX, Markdown, HTML, images, and audio files.

DenseTextEngine (Lightweight Embedding)

For text-only workloads without vision, use DenseTextEngine backed by mlx-embeddings:

from shikomi import DenseTextEngine

engine = DenseTextEngine()
embedding = engine.embed("The quick brown fox")

Gemma 4 E4B VLM Enrichment (Apple Silicon)

Augment parsed documents with VLM-generated descriptions, code analysis, formula interpretations, and document summaries using the Gemma 4 E4B model via mlx-vlm:

from shikomi.enrichment import GemmaEnrichmentEngine

engine = GemmaEnrichmentEngine()
enriched = await engine.enrich(parsed_content)
# enriched.figures now contain model-generated captions
# enriched.summary contains a document-level summary

GPU / Metal Memory Management

Release cached GPU or Metal memory between batch operations to prevent OOM errors:

from shikomi.gpu import release_gpu_memory

for batch in large_corpus:
    process(batch)
    release_gpu_memory()   # returns allocations to OS after each batch

LibreOffice Page Renderer

Convert DOCX and PPTX slides to page images for visual ingestion:

from shikomi.parser import parse

# Renders pages via LibreOffice headless, returns per-page images in ParsedContent
result = parse("slides.pptx", config=config)

Audio Chunking

Ingest long-form audio with automatic chunking:

from shikomi import IngestConfig, AudioConfig

config = IngestConfig(audio=AudioConfig(chunk_duration_secs=30))
result = parse("interview.mp3", config=config)

Full Ingestion Pipeline

from shikomi import Ingester, IngestConfig

ingester = Ingester(config=IngestConfig())
result = await ingester.ingest("document.pdf")

print(result.chunks)       # List[TextChunk]
print(result.embeddings)   # List[MultiVectorEmbedding]

License

Apache-2.0

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

koji_ingest-0.1.0.tar.gz (493.4 kB view details)

Uploaded Source

Built Distribution

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

koji_ingest-0.1.0-py3-none-any.whl (126.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: koji_ingest-0.1.0.tar.gz
  • Upload date:
  • Size: 493.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for koji_ingest-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fa8497ec6a902eeb1348865640c8a1fb6d3b4574ffb4aed5f1158ca18353295f
MD5 8ba818ec608ba25a67c4d6f7ea65c6cd
BLAKE2b-256 a99baea0e21f91424d756bc2f1a859e6ab1265f15158afe851d08003bbbb9457

See more details on using hashes here.

Provenance

The following attestation bundles were made for koji_ingest-0.1.0.tar.gz:

Publisher: koji-ingest-release.yml on TuckerTucker/tkr-koji

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: koji_ingest-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 126.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for koji_ingest-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0c47c1d2a2ec1c82539f434215eb03edb3a760acf095b6ccfd446a54723d837e
MD5 7fc68063ca1cf8f61f33948a6b59c36d
BLAKE2b-256 81c925d303c0c61185080b8fd9f294bf5019edef5c346d414223774127d13485

See more details on using hashes here.

Provenance

The following attestation bundles were made for koji_ingest-0.1.0-py3-none-any.whl:

Publisher: koji-ingest-release.yml on TuckerTucker/tkr-koji

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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