Skip to main content

POMA AI Logo

POMA: Preserving Optimal Markdown Architecture

Quick-Start Guide

Installation

Requires Python 3.10+. Install the core package:

pip install poma

For different integrations:

pip install 'poma[langchain]'
pip install 'poma[llamaindex]'
pip install 'poma[qdrant]'

# Or LangChain/LlamaIndex/Qdrant including example extras:
pip install 'poma[all]'
  • You may also want: pip install python-dotenv to load API keys from a .env file.
  • API keys required (POMA_API_KEY) for the POMA AI client via environment variables.
  • To request a POMA_API_KEY, please contact us at sdk@poma-ai.com

Usage

from poma import PrimeCut, generate_cheatsheets

pc = PrimeCut(api_key="your_key")

# Ingest a document — submits the file, polls, and returns typed results
result = pc.ingest("document.pdf")

print(result.chunksets[0])
print(result.chunks[0].content)

# Eco ingestion uses the same flow against the eco endpoints
eco_result = pc.ingest_eco("document.pdf")

To test this flow from the command line (requires POMA_API_KEY in the environment):

python -m poma document.pdf          # run both ingest and ingest_eco
python -m poma path/to/file.pdf      # custom file
python -m poma document.pdf --no-eco   # standard ingest only
python -m poma document.pdf --eco     # eco ingest only

Generate cheatsheets as a top-level utility:

cheatsheets = generate_cheatsheets(
    relevant_chunksets=result.chunksets,
    all_chunks=result.chunks,
)
print(cheatsheets[0]["content"])

If you already have a .poma archive, unpack it directly:

from poma import unpack

archived_result = unpack("document.poma")
print(archived_result.chunks[0].content)

Async clients use the same API shape:

import asyncio

from poma import AsyncPrimeCut


async def main() -> None:
    async with AsyncPrimeCut(api_key="your_key") as pc:
        result = await pc.ingest("document.pdf")
        print(result.chunksets[0])


asyncio.run(main())

Grill (RAG / hybrid search)

Grill ingests documents into a per-project namespace and serves prompt-ready retrieval context for RAG.

Auth note: Grill endpoints require a project-level key (prefix poma_proj_gr_...), not the account-level POMA_API_KEY. Set POMA_GRILL_API_KEY in your environment. The SDK validates the prefix at construction and raises InvalidGrillApiKeyError if you accidentally use the wrong one.

from poma import Grill

g = Grill()  # reads POMA_GRILL_API_KEY

# 1. Ingest a document. Grill indexes it into your project namespace
#    (no archive download). `result.status == "done"` when ready.
#    Attach up to 64 categorical labels for query-time filtering, and
#    two integer fields (e.g. a timestamp / revision) for range queries.
result = g.ingest(
    "document.pdf",
    labels=["year:1982", "source:treasury"],
    meta_int_1=1672531200,
)
print(result.job_id, result.status, result.usage)

# 1b. Or let Grill fetch the file itself from a public URL — no upload.
#     Optionally POST a webhook when the job finishes; the value is
#     "<url>|<header>:<value>|..." (server caps it at 1024 chars).
result = g.ingest(
    remote_url="https://example.com/document.pdf",
    completion="https://example.com/hook|x-api-key:secret",
)

# 2. Run hybrid search across all documents in the namespace.
#    Returns a prompt-ready XML+Markdown block — drop it into an LLM prompt.
#    Optionally narrow by labels: labels_any (match any) / labels_all (match all).
ctx = g.search(
    "How do I configure retries?",
    target_tokens=2048,
    labels_all=["source:treasury"],
    meta_int_1_gte=1640995200,  # range filter on the integer metadata
)
print(ctx.context)

# 3. List, inspect, and delete documents in the namespace.
#    To find the doc you just ingested, match source_job_id to the job_id.
for doc in g.list_docs():
    print(doc.doc_id, doc.filename, doc.pages)

deleted = g.delete_doc(doc.doc_id)
print(deleted.vectors_deleted, deleted.storage_deleted)

The async client mirrors the same surface:

import asyncio
from poma import AsyncGrill


async def main() -> None:
    async with AsyncGrill() as g:
        ctx = await g.search_in_doc("summarize section 3", "doc_abc123")
        print(ctx.context)


asyncio.run(main())

Example Implementations

All examples, integrations, and additional information can be found in our GitHub repository: poma-ai/poma

We provide example implementations to help you get started with POMA AI:

  • example.py — A standalone implementation for documents, showing the basic POMA AI workflow with simple keyword-based retrieval
  • example_langchain.py — Integration with LangChain, demonstrating how easy it is to use POMA AI with LangChain
  • example_llamaindex.py — Integration with LlamaIndex, showing how simple it is to use POMA AI with LlamaIndex

Note: The integration examples use OpenAI embeddings. Make sure to set your OPENAI_API_KEY environment variable, or replace the embeddings with your preferred ones.

All examples follow the same two-phase process (ingest → retrieve) but demonstrate different integration options for your RAG pipeline.

! Please do NOT send any sensitive and/or personal information to POMA AI endpoints without having a signed contract & DPA !

Download files

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

Source Distribution

poma-0.5.4.tar.gz (60.1 kB view details)

Uploaded Source

Built Distribution

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

poma-0.5.4-py3-none-any.whl (52.5 kB view details)

Uploaded Python 3

File details

Details for the file poma-0.5.4.tar.gz.

File metadata

  • Download URL: poma-0.5.4.tar.gz
  • Upload date:
  • Size: 60.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for poma-0.5.4.tar.gz
Algorithm Hash digest
SHA256 abd13f646039aa6d5f47474579d3e41ec7a644f794952455ac6f5240f8f18c79
MD5 a8e5db45e8812d5a7c6c6688fc4f88c5
BLAKE2b-256 f912f12b1d703559cad36b4f31d670c8917915a944f5111414bf5101a591e858

See more details on using hashes here.

Provenance

The following attestation bundles were made for poma-0.5.4.tar.gz:

Publisher: python-publish.yml on poma-ai/poma-sdk

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

File details

Details for the file poma-0.5.4-py3-none-any.whl.

File metadata

  • Download URL: poma-0.5.4-py3-none-any.whl
  • Upload date:
  • Size: 52.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for poma-0.5.4-py3-none-any.whl
Algorithm Hash digest
SHA256 53976736f14890165803ff8bb0189ae3f8fd6260044a5e84b128896a86aa60b1
MD5 729167ac39aa4eaaaf16ec61793c8e14
BLAKE2b-256 437a76ac59ca4764f54cd94af30cf90c8d46e5b40af122370e9fc7d179d6e6cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for poma-0.5.4-py3-none-any.whl:

Publisher: python-publish.yml on poma-ai/poma-sdk

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

Release history Release notifications | RSS feed

This release

0.5.4 This release

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.4

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.1.4

2 files

0.1.2

2 files

0.1.0

2 files

0.0.0

2 files

Supported by

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