Skip to content

Releases: Query-farm/vgi-python

v0.17.0

Choose a tag to compare

@rustyconover rustyconover released this 21 Jul 19:03

Minor release. Requires vgi-rpc >= 0.26.0, which changes what workers served through this package put on the wire.

Changed

HTTP response-codec negotiation is now client-authoritative. VGI's own X-VGI-Accept-Encoding outranks the generic Accept-Encoding. cpp-httplib (the DuckDB extension's HTTP client) injects Accept-Encoding: deflate, gzip, br, zstd — gzip before zstd — so walking that list first picked gzip and ignored the zstd-first order VGI states. gzip compression dominated large Arrow responses: 432ms vs ~40ms of zstd for 200MB of bodies.

identity is a first-class accept token. A client can now explicitly demand an uncompressed body; previously "no compression" was only reachable by accident, when nothing on offer happened to be producible. Content-Encoding: identity on a request passes through instead of 415ing.

VGI-Supported-Encodings is always advertised, including present-but-empty when compression is disabled. Absent and empty mean different things: absent is a legacy server (clients assume {zstd}), empty is a server positively stating it speaks no compression.

zstd level default drops 3 → 1, compression on by default. On Arrow IPC bodies level 1 measured 4.4x faster and smaller on hex-digest data, 2.7x faster and smaller on mixed numeric, and 1.4x faster for 2% more bytes on compressible text.

Fixed

  • Lint gate: ruff format / import ordering for the compute-ladder fixtures added in 00aad32 (the embedded pytest-ruff plugin only covers tests/, not vgi/).
  • Regenerated the landing-conformance golden for the four new example-worker functions (collatz_steps, hash_rounds, passthru, sha256_hex): 203 → 207 functions.

v0.16.1

Choose a tag to compare

@rustyconover rustyconover released this 20 Jul 17:56

Patch release.

Fixed

filter-pushdown: drop a fully-degraded AND instead of emitting WHERE () (#e3c50a6)

An AND whose children all failed to parse produced AndFilter(children=()), which rendered as (). Callers appending WHERE {clause} when the clause is truthy then built a syntactically invalid statement:

ParserException: syntax error at or near ")"
... "trade_canceled", "_partition_date" FROM src WHERE () LIMIT 50000

_parse_filter returns None for a join-key filter whose keys column cannot be resolved (graceful degradation — DuckDB filters client-side). Dropping such a child from an AND is safe on its own, but when every child dropped the conjunction was left empty. Triggering it required a query joining against a pushdown-enabled table where none of the dynamic join-key columns resolved, so it surfaced intermittently rather than reproducibly.

The OR branch already guarded this case; the AND branch now does too, returning None so the filter is reported unusable.

_filter_to_sql is additionally hardened against any other construction path: an empty AND renders as TRUE, an empty OR as FALSE — the correct identities, notably FALSE for OR so an empty disjunction cannot silently widen the result set.

v0.16.0

Choose a tag to compare

@rustyconover rustyconover released this 15 Jul 19:22

Adds the catalog_schema_contents RPC schema updates the current community vgi extension expects (published 0.15.0 predates them). Unblocks downstream workers (e.g. vgi-adbc) that attach over the latest extension.

v0.15.0

Choose a tag to compare

@rustyconover rustyconover released this 12 Jul 17:22

required_filters (AND-of-ORs)

Replaces the flat, AND-only Table.required_field_filter_paths with a unified
required_filters field in conjunctive normal form: an AND (outer list) of
OR-groups (inner lists) of dotted-path column references. A group is satisfied
when any one of its paths has a WHERE filter; every group must be satisfied.

required_filters=(("accession_number",), ("ticker", "cik"))
# → "accession_number AND one of (ticker, cik)"

This expresses the common "ticker OR cik" requirement the old flat list could
not. Wire type is now list<list<utf8>>, kept as the trailing TableInfo
field so older extensions degrade gracefully to no-enforcement.

Breaking: clean rename, no backward compatibility. Pair with the matching
VGI DuckDB extension build that reads required_filters.

v0.14.0

Choose a tag to compare

@rustyconover rustyconover released this 09 Jul 21:38

HTTP result-cache conditional revalidation

Requires vgi-rpc >= 0.24.0, which surfaces the /init request metadata to a producer's first process() over HTTP. Together with the VGI extension's C++ change (validators on the /init request), result-cache conditional revalidation (304 / not_modified) now works over both transports, not just subprocess.

  • vgi-rpc>=0.24.0; cache/revalidate.test now runs on the http lane too (ci skip removed).
  • No worker code change: TableProducerState.process() already reads the validators.

Verified: revalidate.test passes over HTTP against published vgi-rpc 0.24.0.

v0.13.0

Choose a tag to compare

@rustyconover rustyconover released this 08 Jul 18:40

Per-schema doc in describe.json; refreshed shared landing page v3 (Markdown tables, schema/function descriptions on expand, two-tier green/blue Cupola CTA, INSTALL vgi FROM community line, footer copyright).

v0.12.0

Choose a tag to compare

@rustyconover rustyconover released this 08 Jul 15:19

Catalog macros on the landing page + landing-page fixes

  • describe.json now surfaces catalog macros (scalar + table) in the schema functions list — fixes workers whose callable functions are declared as DuckDB macros (e.g. vgi-volcanos) showing 0 functions. Defaulted macro params render as named args with their default; untyped params show ANY.
  • Landing page: Markdown rendering for catalog/table/view docs; Arrow→DuckDB column/argument type display (int64BIGINT, dictionary<…>VARCHAR); table/view descriptions shown only on expand; footer schema-version line removed.

v0.11.1

Choose a tag to compare

@rustyconover rustyconover released this 08 Jul 00:26

Patch: mypy-clean describe.json producer with deterministic (sorted) output so describe.json and the conformance golden are stable across platforms and Python versions; UTF-8 file reads in the conformance checker; regenerated uv.lock.

v0.11.0

Choose a tag to compare

@rustyconover rustyconover released this 07 Jul 22:34

Standardized VGI worker HTTP landing page: the shared self-contained landing.html served at GET / with content negotiation, plus GET /describe.json and the lazy per-object column endpoint built from live catalog introspection. Requires vgi-rpc>=0.23.0 for the _vgi_identity cookie.

v0.10.0

Choose a tag to compare

@rustyconover rustyconover released this 05 Jul 18:49

Per-argument constraint metadata for agent discovery, surfaced through vgi_function_arguments() (default / choices / range / pattern), plus bind-time enforcement: a const argument that violates a declared choices/ge/le/gt/lt/pattern constraint now fails at bind (scalar + aggregate) instead of silently reaching compute().