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.19.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.19-py3-none-any.whl (3.6 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: infona_client-0.1.19.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.19.tar.gz
Algorithm Hash digest
SHA256 8046a4e74e9c29a84a32144dcedc3921732ea7eca88adff20dc493a080f7437c
MD5 30e7bbddc1c1f5a7cdbeddebe88124a5
BLAKE2b-256 00cece1447ca4ce7b15622eb1d23ffa3ff140b11edba52e852bd74cc6aa8ba27

See more details on using hashes here.

File details

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

File metadata

  • Download URL: infona_client-0.1.19-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.19-py3-none-any.whl
Algorithm Hash digest
SHA256 2fe260c92b1c68d91252b82dc4b9deb968637e0ab9383d1b862f499da0b1e278
MD5 f5dd0b564b8cadaa8a2aa58bc3c62ad6
BLAKE2b-256 85fef7b94895453e80069113f2b1d2a79ba3a490551677ec4e5fa313a5db0bfd

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

0.1.20

2 files

This release

0.1.19 This release

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