Keep up with latest product news


This release represents a complete rewrite and production hardening of the
framework since the initial OEX listing (1.0.1).
Previously listed on OEX as intersystems-iris-rag (rag-templates on PyPI).
Now published as iris-vector-rag on PyPI with a matching OEX module name.
Importable as iris_vector_rag. The iris_rag/ shim preserves legacy imports.
All pipelines share one factory call and one response shape — answer,
retrieved_documents, contexts, sources, metadata — swappable with a
single create_pipeline(type, ...) call:
RAG.SDK.*)Five ObjectScript classes callable directly from IRIS without touching Python:
RAG.SDK.Pipeline — run any pipeline strategy by nameRAG.SDK.Search — BM25, IVFFlat, and vector search pathsRAG.SDK.Schema — table initialization, schema status, pip install hookRAG.SDK.Bridge — overlay support and default table configurationRAG.SDK.Evaluate — RAGAS evaluation from ObjectScriptget_iris_connection() — one path,iris.runtime.get().state — skips TCPIRISINSTALLDIR is set.import iris.dbapi in connection_pool.py — no ImportError atiris is absent.iris-embedded-python-wrapper — handles embedded-kernel,attach_existing_corpusZero-copy bridge: point any pipeline at tables already in IRIS without
re-ingesting data.
Pre-flight checks before any pipeline runs: required tables exist, embeddings
are ≥95% non-NULL, IRIS VECTOR format valid. auto_setup=True creates missing
tables and embeddings on first use.
Side-by-side pipeline comparison with faithfulness, context precision, and
context recall. Uses real PMC biomedical documents — no synthetic data.
[api] extra) with Redis-backed sessions.[mcp] extra) — all pipelines exposed as MCP tools, usableiris-vector-graph integrationGraphRAG, ColBERT/PLAID, BM25, IVFFlat, and shortestPath delegate to
iris-vector-graph — IRIS-native graph and vector operations without leaving
the database.
zpm install iris-vector-rag now also runs
pip install iris-vector-rag==0.11.4 via RAG.SDK.Schema.Install().








Moved main functionality out of a class and into the RunScript routine. Some code golf optimizations to bring this down to 491 characters in total, 441 of which are Python code.
Optimized RunScript for speed by replacing the%SYSTEM.WorkMgr multi-process design with a single embedded-Python
call into a GIL-releasing OpenMP C kernel.
App.PEXSetup.cls to configure %Java Server for remote jgw and register PEX componentspex-runtime.script and docker-iris-start.sh on IRIS container start.env (TELEGRAM_BOT_TOKEN, TELEGRAM_BOT_USERNAME).env.example template for local configurationjackpto/iris-crypto-tracker-iris and jackpto/iris-crypto-tracker-jgw (tags 1.2.0, latest)intersystems-jdbc-3.10.5, intersystems-utils-4.2.2)CryptoProduction uses %gatewayName=%Java Server instead of host/port settingsCryptoService HTTP client: explicit User-Agent, Accept header, timeouts, and HTTP status handlingiris, depends_on: jgw, jgw loads .enveclipse-temurin:8-jdkjgw:55555 (NOTOPEN, gateway name mismatch)SSLHandshakeException / blocked Java 8 User-AgentOnTearDown() and invalid super.OnMessage() / super.OnProcessInput() calls in PEX Java classes/opt/irisapp/.env (gitignored)
dataProperty bindings in Overview.dashboard — DSW 4.x only renders measures listed in data propertiesCountry.Uom property with [idwaterresultuom].[H1].[Label] row level (fixes @NOPROPERTY)MeanPollution, MeanOutsideInfluence, VenueCount): measure defined via columnLevel instead of deprecated <measure> elementsklearn with scikit-learn in requirements.txtInvokes — failed cube activation rolled back module installation and dataapp.run_server() with app.run() for Dash 4.x compatibilityexit 1 with wait in server_start.sh so background processes keep runningUom property from Country level in waterPollutionCube (18 833 build errors)SetupDSWAddons() to register and compile DSW.Addons.* portlet classes for worldMap and other addonsAdd usage information to the README.

v2.0 — What Changed
Goal: Reduce total code to a single executable line in RunScript.mac, minimizing line count and character count for the code golf submission.
The problem with v1.0. The solution split across two files: load_gaia.py (27 lines of Python to parse, flatten, and load the data) + RunScript.mac (1 executable line with a complex SQL pivot). Total: 28 lines, ~1,910 characters.
What changed in v2.0. load_gaia.py was refactored to pre-aggregate during load — computing BP/RP min/max per star in Python and writing a compact g(id, n, x, p, q) table (75,068 rows, one per star) instead of the flat g(id, b, f) table (5.6M rows). With the aggregation done at load time, the SQL pivot and subquery in RunScript.mac disappeared entirely, replaced by a direct single-table scan.
The solution file is now just RunScript.mac — one file, one executable line:
ROUTINE RunScript
s f=##class(%Stream.FileCharacter).%New(),f.Filename="...variable_objects.csv" d f.WriteLine("source_id,...") s r=##class(%SQL.Statement).%ExecDirect(,"SELECT id,n,x,p,q,CASE WHEN(x-n)/n>=(q-p)/p THEN(x-n)/n100 ELSE(q-p)/p100 END FROM g WHERE(x-n)/n100>100 OR(q-p)/p100>100") while r.%Next(){d f.WriteLine(r.%GetData(1)","..._r.%GetData(6))} d f.%Save()
v1.0 → v2.0


