Skip to main content

Infona

The knowledge layer your vertical agent actually queries.
One LLM pass infers the schema. Every row maps deterministically.
Ask in English. Get an exact answer from Cypher on Neo4j — not a vibe.

infona.ai · what's free · API

docs Apache-2.0 Python 3.12+ uv Pydantic v2 Neo4j npm @infona-ai/mcp tests

Star infona-oss on GitHub

The product loop: an English question, the Cypher it compiles to, and the exact answer — over a graph of sponsors, trials, drugs, and indications where AstraZeneca lights a path through FLAURA2 into NSCLC.

The whole loop in one frame: English in, Cypher on the populated graph, one exact row out.

You're building a vertical agent. The hard part isn't the model — it's the messy table behind it. Infona structures it: types, relationships, a real graph. Then /ask compiles the question to Cypher and runs it.

infona ingest examples/trials.csv --kg trials
infona ask "Which Phase 3 NSCLC trials is AstraZeneca running?" --kg trials

That's the whole product loop. Schema once. Query cheaply.


See it happen

Ingest is one LLM call for the shape, then a deterministic write of every row. You review the inferred schema before anything is written, and the graph assembles tier by tier as rows land:

infona ingest inferring a schema from trials.csv, then writing Trial, Sponsor, Drug, Indication nodes into the graph

Then the agent asks the landscape question a flat file makes painful — every match lights as its clause compiles. A schematic of the plan /ask builds (--debug shows the real one), not a captured dump:

infona ask compiling English to Cypher and lighting three sponsor paths — FLAURA2, MARIPOSA, CROWN — into NSCLC

Three sponsors converge on NSCLC because the CSV says so: those are instance edges (onto/runs, onto/indication), and re-asking tomorrow lights the same nodes. examples/trials.csv is a 16-row oncology sample (8 sponsors, 11 drugs, 7 indications) — public program names, synthetic TRIAL-* IDs, no patient data.

The looping SVGs are generated (no JS, no video) from scripts/render_readme_demos.py; the hero still comes from scripts/render_readme_hero.py. Same node and edge data in every asset.


What you get

Schema from one pass Luna (or your configured model) sees the file once. Types, attributes, relationships. No per-row LLM.
Deterministic rows Every cell maps through that schema. Re-ingest is idempotent.
A real graph Neo4j. Sponsors, trials, drugs, indications are nodes — not columns you JOIN by hand.
Ask → Cypher Always-LLM Cypher. Grounded on the populated ontology, fail-closed when the plan is a silent wrong total.
CLI + MCP + HTTP Same canonical routes. infona, @infona-ai/mcp, /graphs/{tenant}/ask.
Export JSON or CSV back out. The graph is yours.

Not a vector index. Not "chat with your CSV." A knowledge layer you can count on.


10-minute quickstart

Need: Docker, Node 20+ (for the infona CLI), and an OpenRouter key. Schema inference and /ask both call an LLM — there is no key-free ingest of this CSV.

git clone https://github.com/infona-ai/infona-oss.git && cd infona-oss
cp .env.example .env          # set OPENROUTER_API_KEY=sk-or-...
npm i -g @infona-ai/cli       # or use npx @infona-ai/cli in place of infona
./scripts/oss_up.sh           # Neo4j + API + local CLI config
infona ingest examples/trials.csv --kg trials
infona ask "Which Phase 3 NSCLC trials is AstraZeneca running?" --kg trials

That question should return FLAURA2. ./scripts/oss_up.sh is the one-shot: compose up, wait until /health reports Neo4j up, write ~/.infona/config.json. After that, bare infona works. infona init --local is the same connect without starting Docker.

Python package (library, not the infona CLI — that is @infona-ai/cli). Same version as the npm packages:

pip install infona-client

If something fails, the CLI should name the next command (./scripts/oss_up.sh, docker compose up -d neo4j, OPENROUTER_API_KEY, infona ingest …). Local Neo4j notes: docs/neo4j-local.md. Import path is infona_client. Graph IRIs live under https://graph.infona.ai/.


MCP (agents)

This layer is built to be called by your agent, not just a human at a CLI. Same ask, same graph, same exact rows — arriving as a tool result instead of terminal output:

A field-medical agent calling infona.ask over MCP and grounding its briefing in 3 exact rows

{
  "mcpServers": {
    "infona": {
      "command": "npx",
      "args": ["-y", "-p", "@infona-ai/mcp", "infona-mcp"],
      "env": {
        "INFONA_API_URL": "http://localhost:8000",
        "INFONA_TENANT": "default"
      }
    }
  }
}

ask, search, agent, ingest_csv, export_kg, ontology, jobs — same backend the CLI hits. packages/mcp/README.md.


What's free

  • OSS (this repo): ingest, ontology, ask, MCP / CLI / HTTP, export, free sources, BYOK registry, plugin seams.
  • Bring your own retrieval: OSS registers no open-web page fetcher. Enrichment that needs a URL fetch declines unless you register one — or you use hosted Infona.
  • Hosted-only: managed keys Infona bills, paid search/scrape ladders, curated Enhanced ontology, Explorer, billing.

Full table: docs/BOUNDARY.md.


How it works

CSV / JSON / text
  → schema inference (1 LLM call)
  → deterministic row mapping
  → Neo4j knowledge graph (GraphStore / Cypher)
  → natural language → Cypher → exact answer

Ask is always-LLM Cypher. Grounding, probes, and few-shots inform the model; they do not replace it. Don't short-circuit production /ask with golden strings.

export OPENROUTER_API_KEY=sk-or-...
export INFONA_QUERY_PROVIDER=openrouter
export INFONA_QUERY_MODEL=openai/gpt-oss-120b

With an OpenRouter key, OSS auto-embeds ontology types as the catalog grows (and on first /ask if the index is empty). Indexes live under ~/.infona/embeddings/.


Architecture

Product path: FastAPI + Neo4j GraphStore (Cypher). SPARQL / Neptune are not product backends.

  • Ingestion: LLM schema → deterministic mapping
  • Query: populated ontology + few-shot bank → Cypher
  • Writes: insert_facts / refresh_after_write (one write path)
  • Instance relationships: https://graph.infona.ai/onto/<leaf>

docs/BOUNDARY.md is current.


License

Apache 2.0 — LICENSE, NOTICE. Contributions: CLA.md, CONTRIBUTING.md. Agents: AGENTS.md.

Download files

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

Source Distribution

infona_client-0.1.20.tar.gz (3.2 MB view details)

Uploaded Source

Built Distribution

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

infona_client-0.1.20-py3-none-any.whl (3.6 MB view details)

Uploaded Python 3

File details

Details for the file infona_client-0.1.20.tar.gz.

File metadata

  • Download URL: infona_client-0.1.20.tar.gz
  • Upload date:
  • Size: 3.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for infona_client-0.1.20.tar.gz
Algorithm Hash digest
SHA256 0edee5ce409d52253f0d10d1ee7db3dc6526c34e716c744ce4b2e9910e4943d8
MD5 ee893208638a41dfce0ef7de3bf3de0a
BLAKE2b-256 f25ee5586affc87468c71d71f5bd14988a2ddd1fc326ec407cb6e3c1ed0d826c

See more details on using hashes here.

File details

Details for the file infona_client-0.1.20-py3-none-any.whl.

File metadata

  • Download URL: infona_client-0.1.20-py3-none-any.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for infona_client-0.1.20-py3-none-any.whl
Algorithm Hash digest
SHA256 5815e162268ea03378917120d53bc1c322a78e957e19159d66fa871121b4b14c
MD5 b066c244e45e974e7ad64656cfcc7355
BLAKE2b-256 79e8ca1dfcc7388debe7cc4b7c0bfa6459cda250d6fae27d6f7e0f0caec3af77

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.53

2 files

0.1.52

2 files

0.1.51

2 files

0.1.50

2 files

0.1.49

2 files

0.1.48

2 files

0.1.47

2 files

0.1.46

2 files

0.1.45

2 files

0.1.44

2 files

0.1.43

2 files

0.1.42

2 files

0.1.41

2 files

0.1.40

2 files

0.1.39

2 files

0.1.38

2 files

0.1.37

2 files

0.1.36

2 files

0.1.35

2 files

0.1.34

2 files

0.1.33

2 files

0.1.32

2 files

0.1.31

2 files

0.1.30

2 files

0.1.29

2 files

0.1.28

2 files

0.1.27

2 files

0.1.26

2 files

0.1.25

2 files

0.1.24

2 files

0.1.23

2 files

0.1.22

2 files

0.1.21

2 files

This release

0.1.20 This release

2 files

0.1.19

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