{"ref":"artifact:saptarishi-cds-plugin-vector-hana","page":"/artifacts/saptarishi-cds-plugin-vector-hana","json":"/artifacts/saptarishi-cds-plugin-vector-hana.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"saptarishi-cds-plugin-vector-hana","name":"@saptarishi/cds-plugin-vector-hana","artifact_type":"cds-plugin","ecosystem":"cap","domain":"ai-and-agents","origin_ring":"independent","description":{"one_line":"Vector storage and similarity search on SAP HANA from CAP, packaged as a plugin so the embedding column and the query are modelled rather than hand-written.","short":"Vector storage and similarity search on SAP HANA from CAP","what_it_solves":"Keeps an embedding beside each row and searches it by cosine similarity, through two backends with one API: a column table using REAL_VECTOR and COSINE_SIMILARITY in [SAP HANA Cloud](artifact:btp-hana-cloud), or a JSON column in a local SQLite file with the cosine computed in JavaScript, so the same code runs on a laptop and against a subscribed database. The modelled route is a @rag annotation on a CDS entity naming the fields to embed and the vector size: the plugin builds the vector table, embeds and upserts the row's projected text after every CREATE and UPDATE, removes the vector before DELETE, and declares two collection-bound OData actions on the entity — searchByMeaning for ranked rows, askAbout for an answer together with the rows it was drawn from. What gets embedded is one row's projected fields as one vector, and the embedding and chat calls are not its own: it takes any object with an embed() method, and the README composes it with the same author's [@saptarishi/cds-plugin-llm](https://www.npmjs.com/package/@saptarishi/cds-plugin-llm), a required peer dependency and where the model provider is chosen. @sap/cds is an optional peer dependency, so the two stores and the RAG helper can also be constructed in plain Node."},"links":{"repo":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/tree/main/cds-plugin-vector-hana","npm":"https://www.npmjs.com/package/@saptarishi/cds-plugin-vector-hana"},"identity":{"license":"Apache-2.0"},"compat":{"runtimes":["node"],"cds_range":">=7","typed":true},"source_available":true,"provides":[{"capability":"capability:retrieval-augmented-generation","what_it_does":"Answers the storage and retrieval half inside a CAP project: a vector table per @rag-annotated entity kept in sync by the plugin's own CRUD handlers, top-K cosine search with an optional metadata filter, hybrid vector-and-keyword retrieval fused by reciprocal rank, and a RAG helper that assembles the hits into a citation-tagged prompt and calls a chat provider, with a streaming variant that returns the hits before the first token. The embedding and chat models come from a separate provider plugin, and the embedded unit is one row's projected fields.","sources":[{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"The plugin registers `after CREATE|UPDATE` handlers so every save embeds + upserts the row's projected text into the vector table, and a `before DELETE` handler so the vector goes when the row does."},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"Every `@rag`-annotated entity gets **two** collection-bound OData actions out of the box — zero handler code:"},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"fields:    ['name', 'description'],  // projected + embedded per row"},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"Compose the store with any `@saptarishi/cds-plugin-llm` provider to get retrieval + citation-tagged prompt + chat generation in a single call:"},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"Streaming variant — hits available before the first token"},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/CHANGELOG.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana CHANGELOG","checked":"2026-09-17","quote":"- **Hybrid retrieval via Reciprocal Rank Fusion (RRF)**"},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/CHANGELOG.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana CHANGELOG","checked":"2026-09-17","quote":"**`@rag.metadataFields`** — array of row fields to copy into the vector-store metadata dict on every upsert, so `filter: { region: 'EMEA' }` on `searchByMeaning` / `askAbout` actually filters."}]}],"requires":[{"ref":"artifact:btp-hana-cloud","requirement":"conditional","role":"vector-store","condition":"The HanaVectorStore backend is used; the SQLite backend runs without it.","sources":[{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"Vector store for SAP CAP that speaks HANA Cloud's native `REAL_VECTOR` + `COSINE_SIMILARITY`."},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"No. The SQLite backend has the identical API and works out of the box."}]}],"changed_in":[{"version":"0.5.0","date":"2026-08-03","what_changed":"Until 0.4.0 the package was two store classes and a RAG helper that a handler constructed and called itself. 0.5.0 added the @rag annotation: the plugin derives the vector table from the annotated CDS entity, registers the CRUD handlers that keep it in sync, and exposes searchByMeaning and askAbout on cds.vectorHana. 0.6.0 and 0.7.0 then declared the same two operations as OData actions on the entity, and 0.8.1 made them collection-bound. npm published 0.5.0 on 2026-08-03.","invalidates":"A description of this package as a library you wire into your own handler, with the embedding on write written by the reader. That was the only route through 0.4.0; it still works, and since 0.5.0 the annotated route is the one the README leads with.","source":{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-vector-hana/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-vector-hana README","checked":"2026-09-17","quote":"### `@rag` annotation — auto-indexed entities (new in v0.5.0)"}}],"provenance":{"discovered_via":[{"source":"source:npm"},{"source":"source:discover"}],"first_seen":"2026-09-02"},"maintainers":["actor:kalyanjanumpally"],"contributors":["actor:janumpallykalyan"],"history":[{"date":"2026-09-08","field":"description.one_line","from":"Vector store for SAP CAP with HANA Cloud's native REAL_VECTOR + COSINE_SIMILARITY. Includes a SQLite fallback for local development so you can build semantic-search features without paying for HANA. Composes with @saptarishi/cds-plugin-llm for embeddings.","to":"Vector storage and similarity search on SAP HANA from CAP, packaged as a plugin so the embedding column and the query are modelled rather than hand-written.","reason":"Placement copied the package's own npm description. Replaced with a line written for this graph — what it does and where it sits — because an unattributed sentence is an unattributed claim."},{"date":"2026-09-17","field":"links.repo","from":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin","to":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/tree/main/cds-plugin-vector-hana","reason":"The repository root is a Joule copilot monorepo whose README describes five Joule skills, an agent and a pitch site; this package is one subdirectory of it. npm added beside it."},{"date":"2026-09-17","field":"description.what_it_solves","from":null,"to":"Two backends behind one API, the @rag annotation and the OData actions it declares, and the separate provider plugin the embeddings come from.","reason":"The entry carried one line and no paragraph. Written from the package's README and manifest in the monorepo subdirectory, both read on 2026-09-17."},{"date":"2026-09-17","field":"compat","from":null,"to":"runtimes: node; cds_range: >=7; typed: true","reason":"Read from the package's own manifest: engines node >=18, @sap/cds >=7 declared as an optional peer dependency, and lib/index.d.ts declared as types. Deployment targets and multitenancy behaviour are not stated anywhere in the package, so both stay absent."},{"date":"2026-09-17","field":"provides","from":"capability:retrieval-augmented-generation","to":"capability:retrieval-augmented-generation, with what_it_does and seven quoted sources","reason":"The edge carried no statement of what this contributes. Filled from the README and the changelog, including the hybrid retrieval and metadata-filter additions the README on main does not yet document."}],"drafted_with_ai":true},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-2-cap","relation":"use-constrained-by","sections":["1","2","3"],"applies_when":"A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.","note":"This is inherited applicability, not a licence verdict about the artifact itself. Review the agreement for the actual materials and use; an explicit artifact relationship to another revision takes precedence.","scope":{"kind":"artifact"},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"documentation, plug-ins, templates, scripts and sample code, libraries, software development kits"}],"inherited_from":"cap-plugins-and-applications","relevant_capabilities":["agent-systems-access","async-processing","data-import-export","database-connectors","deployment","destinations","llm-integration","mcp-servers","plugin-authoring","replication","retrieval-augmented-generation","rfc-connectivity"]}],"readings":{"liveness":[{"label":"Maintenance","tier":"good","evidence":"2 months since release"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-08, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=7 — includes cds 10 and 9"},{"label":"Survived majors","tier":"unknown","evidence":"first released after @sap/cds 10 shipped"},{"label":"Maintainer's CI","tier":"good","evidence":"CI green, 2026-08-17"}],"practice":[{"label":"Tests","tier":"good","evidence":"152 test files, npm test"},{"label":"Docs","tier":"good","evidence":"docs/ with 7 pages, README 13 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":16,"unit":"installs/week"},{"value":2,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"0.13.0","majors":{"0.1":{"version":"0.1.0","date":"2026-07-29"},"0.2":{"version":"0.2.0","date":"2026-07-29"},"0.3":{"version":"0.3.0","date":"2026-07-29"},"0.4":{"version":"0.4.0","date":"2026-08-03"},"0.5":{"version":"0.5.0","date":"2026-08-03"},"0.6":{"version":"0.6.0","date":"2026-08-03"},"0.7":{"version":"0.7.0","date":"2026-08-03"},"0.8":{"version":"0.8.0","date":"2026-08-05"},"0.9":{"version":"0.9.0","date":"2026-08-05"},"0.10":{"version":"0.10.0","date":"2026-08-05"},"0.11":{"version":"0.11.0","date":"2026-08-06"},"0.12":{"version":"0.12.0","date":"2026-08-06"},"0.13":{"version":"0.13.0","date":"2026-08-14"}},"license":"Apache-2.0","first_release":"2026-07-29","last_release":"2026-08-14","releases":18,"cadence_days":0,"maintainers":1,"repository":"git+https://github.com/kalyanjanumpally/sap-joule-ai-plugin.git","peer_cds":">=7","test_script":true,"types":true,"downloads_weekly":16,"stars":2,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-08-17","license_spdx":null,"org_owned":false,"default_branch":"main","contributors":1,"tree_truncated":false,"test_files":152,"workflows":1,"other_ci":false,"readme_bytes":13346,"docs_files":7,"changelog":false,"license_file":false,"dts_files":2,"ci_status":"success","ci_run_at":"2026-08-17","ci_workflow":"CI","ci_event":"push","readme_path":"cds-plugin-vector-hana/README.md","readme_sha":"4d61184aea8c7020894fe8fa33c19df64f50c85d","months_since_release":2,"dormant":false,"repository_directory":"cds-plugin-vector-hana","first_commit":"2026-07-29","last_commit":"2026-08-14","commits":18,"dependencies":0,"node_engine":">=18","downloads_monthly":128,"created_at":"2026-07-15T04:54:01Z","open_prs":0,"repo_read":"2026-10-26"},"release_notes":{"license":"Apache-2.0","quotable":true,"source":{"kind":"npm","path":"CHANGELOG.md","version":"0.13.0","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md"},"format":"keep-a-changelog","releases":[{"version":"0.13.0","date":"2026-08-14","date_source":"heading","heading":"[0.13.0] — 2026-08-14","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#0130--2026-08-14","sections":[{"kind":"change","heading":"Changed","items":1},{"kind":"other","heading":"Notes","items":1}],"hash":"8dcf65531ef6e574"},{"version":"0.12.0","date":"2026-08-06","date_source":"heading","heading":"[0.12.0] — 2026-08-06","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#0120--2026-08-06","sections":[{"kind":"feature","heading":"Added","items":3},{"kind":"other","heading":"Notes","items":4}],"hash":"ab8b99ebc8bb5d72"},{"version":"0.11.0","date":"2026-08-06","date_source":"heading","heading":"[0.11.0] — 2026-08-06","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#0110--2026-08-06","sections":[{"kind":"feature","heading":"Added","items":4},{"kind":"change","heading":"Changed","items":1},{"kind":"other","heading":"Notes","items":3}],"hash":"6db2af25db8e3696"},{"version":"0.10.0","date":"2026-08-05","date_source":"heading","heading":"[0.10.0] — 2026-08-05","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#0100--2026-08-05","sections":[{"kind":"feature","heading":"Added","items":7},{"kind":"other","heading":"Notes","items":4}],"hash":"165879227a5f9849"},{"version":"0.9.0","date":"2026-08-05","date_source":"heading","heading":"[0.9.0] — 2026-08-05","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#090--2026-08-05","sections":[{"kind":"feature","heading":"Added","items":8},{"kind":"other","heading":"Notes","items":3}],"hash":"4e1c54ace95671cb"},{"version":"0.8.1","date":"2026-08-05","date_source":"heading","heading":"[0.8.1] — 2026-08-05","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#081--2026-08-05","sections":[{"kind":"fix","heading":"Fixed","items":3},{"kind":"other","heading":"Notes","items":1}],"hash":"ab28373bce13159e"},{"version":"0.8.0","date":"2026-08-05","date_source":"heading","heading":"[0.8.0] — 2026-08-05","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#080--2026-08-05","sections":[{"kind":"feature","heading":"Added","items":7},{"kind":"other","heading":"Notes","items":4}],"hash":"50343ee5d1c4e5bf"},{"version":"0.7.4","date":"2026-08-03","date_source":"heading","heading":"[0.7.4] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#074--2026-08-03","sections":[{"kind":"fix","heading":"Fixed","items":1},{"kind":"other","heading":"Notes","items":1}],"hash":"70ebb262ddcf6e82"},{"version":"0.7.3","date":"2026-08-03","date_source":"heading","heading":"[0.7.3] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#073--2026-08-03","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"f8ca9822425bab6f"},{"version":"0.7.2","date":"2026-08-03","date_source":"heading","heading":"[0.7.2] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#072--2026-08-03","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"e0210d87fa2d102b"},{"version":"0.7.1","date":"2026-08-03","date_source":"heading","heading":"[0.7.1] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#071--2026-08-03","sections":[{"kind":"fix","heading":"Fixed","items":3},{"kind":"other","heading":"Notes","items":1}],"hash":"bff522db9ffb632a"},{"version":"0.7.0","date":"2026-08-03","date_source":"heading","heading":"[0.7.0] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#070--2026-08-03","sections":[{"kind":"feature","heading":"Added","items":5},{"kind":"other","heading":"Notes","items":3}],"hash":"d0e1bab5c78ff030"},{"version":"0.6.0","date":"2026-08-03","date_source":"heading","heading":"[0.6.0] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#060--2026-08-03","sections":[{"kind":"feature","heading":"Added","items":5},{"kind":"other","heading":"Notes","items":3}],"hash":"f31ad162dc02310f"},{"version":"0.5.0","date":"2026-08-03","date_source":"heading","heading":"[0.5.0] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#050--2026-08-03","sections":[{"kind":"feature","heading":"Added","items":7},{"kind":"other","heading":"Notes","items":3}],"hash":"4671e44bd93b5a27"},{"version":"0.4.0","date":"2026-08-03","date_source":"heading","heading":"[0.4.0] — 2026-08-03","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#040--2026-08-03","sections":[{"kind":"feature","heading":"Added","items":4},{"kind":"other","heading":"Notes","items":2}],"hash":"dc5586f17bb853d0"},{"version":"0.3.0","date":"2026-07-29","date_source":"heading","heading":"[0.3.0] — 2026-07-29","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#030--2026-07-29","sections":[{"kind":"feature","heading":"Added","items":2},{"kind":"other","heading":"Notes","items":1}],"hash":"d263446c0f88cfbb"},{"version":"0.2.0","date":"2026-07-29","date_source":"heading","heading":"[0.2.0] — 2026-07-29","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#020--2026-07-29","sections":[{"kind":"feature","heading":"Added","items":3},{"kind":"other","heading":"Notes","items":1}],"hash":"d144a5d0c77a4be0"},{"version":"0.1.0","date":"2026-07-29","date_source":"heading","heading":"[0.1.0] — 2026-07-29","url":"https://github.com/kalyanjanumpally/sap-joule-ai-plugin/blob/main/cds-plugin-vector-hana/CHANGELOG.md#010--2026-07-29","sections":[{"kind":"feature","heading":"Added","items":5}],"hash":"8487db67fde26ec1"}],"versions":[{"version":"0.13.0","date":"2026-08-14"},{"version":"0.12.0","date":"2026-08-06"},{"version":"0.11.0","date":"2026-08-06"},{"version":"0.10.0","date":"2026-08-05"},{"version":"0.9.0","date":"2026-08-05"},{"version":"0.8.1","date":"2026-08-05"},{"version":"0.8.0","date":"2026-08-05"},{"version":"0.7.4","date":"2026-08-03"},{"version":"0.7.3","date":"2026-08-03"},{"version":"0.7.2","date":"2026-08-03"},{"version":"0.7.1","date":"2026-08-03"},{"version":"0.7.0","date":"2026-08-03"},{"version":"0.6.0","date":"2026-08-03"},{"version":"0.5.0","date":"2026-08-03"},{"version":"0.4.0","date":"2026-08-03"},{"version":"0.3.0","date":"2026-07-29"},{"version":"0.2.0","date":"2026-07-29"},{"version":"0.1.0","date":"2026-07-29"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:kalyanjanumpally","name":"kalyanjanumpally","json":"/actors/kalyanjanumpally.json"}],"contributors":[{"ref":"actor:janumpallykalyan","name":"Janumpally Kalyan","json":"/actors/janumpallykalyan.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}