Skip to main content

Agentic data consultant that runs on your own hardware

Project description

insightsmith

Forging insight from raw data.

An agentic data consultant that runs on your own machine.


0.1.0 is the foundation, not the whole thing

This release ships the parts that need no LLM: format detection, loading and profiling, behind ismith look. It is useful on its own — point it at a file and it tells you what the file really is and what's wrong with the data.

The agentic half — proposing analyses, writing and sandbox-executing code, critiquing the statistics, writing a report — arrives across 0.4.0–0.8.0. Nothing in this release talks to a model or the network.


What it does today

pip install insightsmith
ismith look data/sales.csv
╭──────────────── source ─────────────────╮
│ format    csv                           │
│ encoding  cp1252                        │
│ dialect   delimiter=';' decimal=','     │
│ confidence 95%                          │
│ assumed   read as cp1252; charset-      │
│           normalizer suggested cp775    │
╰─────────────────────────────────────────╯
umsatz.csv: 5 rows x 3 columns
        columns
┏━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ column ┃ dtype   ┃ semantic    ┃ nulls ┃ unique ┃ detail                ┃
┡━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│ region │ String  │ categorical │     - │      4 │ Nord (2) · Süd (1)    │
│ menge  │ Int64   │ numeric     │     - │      5 │ min 4 · med 12 · max… │
│ umsatz │ Float64 │ numeric     │     - │      5 │ min 40.75 · med 120.5 │
└────────┴─────────┴─────────────┴───────┴────────┴───────────────────────┘
candidate keys: menge

Add --json for the same profile as machine-readable output.

Format detection doesn't trust the extension. A three-stage cascade — extension hint, then magic bytes, then a text-dialect probe — where each stage can veto the one before it. A Parquet file named .csv is loaded as Parquet, and you're told the extension lied. Every result carries a confidence score and the list of assumptions behind it; below 80% those assumptions are printed rather than hidden.

It is built for the files that actually turn up: semicolon-delimited cp1252 CSVs with decimal commas and thousands separators, BOMs, comment preambles, quoted fields containing the delimiter, gzip and single-member zip wrappers.

Profiling reports per-column dtype and semantic type, null rates, cardinality, numeric summaries with outlier counts by two different methods, temporal ranges, text lengths, category frequencies, candidate keys, and quality notes: duplicate and near-duplicate rows, constant and near-constant columns, runaway cardinality, class imbalance.

As a library

from insightsmith import load, profile, sniff

spec = sniff("data/sales.csv")
print(spec.format, spec.encoding, spec.confidence, spec.warnings)

frame = load(spec)  # a Polars LazyFrame — nothing read yet
result = profile(spec)
print(result.summary())
for issue in result.issues:
    print(issue.severity.value, issue.column, issue.message)

Polars LazyFrame is the internal representation throughout, so Parquet, Arrow, NDJSON and UTF-8 CSV are scanned rather than loaded.

Formats loadable in 0.1.0: csv, tsv, xlsx/xlsm (with [excel]), xls, parquet, feather/arrow, json, jsonl/ndjson. Detected-but-not-yet-loadable formats — sqlite, duckdb, xml, html, ods, orc, hdf5, spss, stata, sas — say so, and name the release that will handle them.

Install

pip install insightsmith            # csv, tsv, parquet, arrow, json, jsonl
pip install insightsmith[excel]     # + xlsx / xls
pip install insightsmith[pandas]    # + a .to_pandas() escape hatch

The base install is four dependencies — polars, typer, rich, charset-normalizer. No torch, no pandas, no agent framework. Extras stay optional on purpose.

What it won't do

Worth stating plainly, in advance:

  • Large files are profiled on a sample. Above a size threshold the profile is built from a strided sample of the rows, and every affected statistic is marked estimated. Row counts remain exact; distributions are approximate.
  • Encoding detection is a guess on small files. Single-byte codepages are genuinely ambiguous in a few hundred bytes. Sparse non-ASCII text is read as cp1252 and the substitution is reported, but it can still be wrong.
  • Statistics have edges. The IQR fence is degenerate when the middle 50% of a column is a single value, so outliers are counted by a MAD-based modified z-score as well, and both numbers are shown. They disagree usefully.
  • "Near-duplicate" means one specific thing — identical once string columns are trimmed and case-folded. It is not fuzzy matching.
  • Thousands separators are detected but not stripped. polars has no option for them, so such columns may load as strings.
  • No XML row-unit discovery, and zstd payloads aren't inspected (no stdlib decompressor before Python 3.14).

And for the releases still to come: LLMs write wrong code confidently, the sandbox will be defense-in-depth rather than a security boundary, and a statistical critic reduces but does not remove statistical nonsense.

License

Apache-2.0. See LICENSE.

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

insightsmith-0.1.0.tar.gz (35.2 kB view details)

Uploaded Source

Built Distribution

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

insightsmith-0.1.0-py3-none-any.whl (29.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for insightsmith-0.1.0.tar.gz
Algorithm Hash digest
SHA256 73bb081f4b6a9bf9eefa6ac7789305bc382adcd0297be8206a9235ed9a58d34d
MD5 1643281295c525542c078ef60aba2263
BLAKE2b-256 d85660ff8e07f98c6b0af6d8029473f2ab67ea94e6df636fb404558b1762141b

See more details on using hashes here.

Provenance

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

Publisher: release.yml on SofianeOuaari/insightsmith

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

File details

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

File metadata

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

File hashes

Hashes for insightsmith-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9f8e704db546fb3320d2f03d13490507d7de86bb4cd702db7ac9f515e482e10c
MD5 00933c512e8aded98dd015a98208e6e2
BLAKE2b-256 770377bf7462034b8cc4724936124ee0cb3050e868be597d1db3b1c532e06a46

See more details on using hashes here.

Provenance

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

Publisher: release.yml on SofianeOuaari/insightsmith

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