{"ref":"artifact:yassinbahri-sap-knowledge-pipeline","page":"/artifacts/yassinbahri-sap-knowledge-pipeline","json":"/artifacts/yassinbahri-sap-knowledge-pipeline.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"yassinbahri-sap-knowledge-pipeline","name":"sap-knowledge-pipeline","artifact_type":"package","ecosystem":"btp","domain":"ai-and-agents","secondary_domains":["data-and-persistence"],"origin_ring":"independent","description":{"one_line":"A Python library that reads selected records out of an SAP OData service or an SAP HANA `SELECT` and renders them as chunked documents, each carrying the entity set and business key it came from.","short":"Python library turning OData or HANA records into chunked documents","what_it_solves":"A recipe names the properties that may be read, and nothing outside it reaches the document: the README calls recipes security boundaries as well as rendering instructions, and an unexpected field in the OData response is ignored. Two readers feed it, an async OData V2 and V4 client that follows the service's own opaque continuation links and inspects EDMX metadata for entity sets, keys, properties and navigation properties, and a HANA adapter that streams a parameterised `SELECT` in bounded pages through the optional SAP `hdbcli` driver. What comes out is a chunk with a stable chunk and document id, the rendered text, the entity set and complete business key, the source ETag where SAP supplied one, and the recipe and document type, so a retrieval answer can say which record it came from. The `[fastembed]` extra adds local [FastEmbed](external:fastembed) embeddings and a persistent [Qdrant](external:qdrant) index, and the pipeline stops before the model: no LLM is called automatically, and the application decides where retrieved context is sent.","when_not_to_use":"An early alpha release whose README says to pin the version and test recipes against non-production data first. HANA synchronisation is snapshot-only and does not reconcile deleted rows, so a document for a row deleted in the source stays in the index. A recipe's field allow-list does not decide what the service account may read: the README states that field allow-listing does not replace SAP authorization, and that the package infers no SAP module semantics, authorization scope or safe fields from table names. Only Business Partner has a built-in recipe, every other dataset needs a `KnowledgeRecipe` written for it, and [Qdrant](external:qdrant) local mode is stated to be for development and smaller indexes."},"links":{"repo":"https://github.com/yassinbahri/sap-knowledge-pipeline","homepage":"https://pypi.org/project/sap-knowledge-pipeline/","changelog":"https://github.com/yassinbahri/sap-knowledge-pipeline/blob/main/CHANGELOG.md"},"type_properties":{"distribution":{"value":["pypi"],"sources":[{"url":"https://github.com/yassinbahri/sap-knowledge-pipeline","title":"sap-knowledge-pipeline — README","checked":"2026-10-18","quote":"python -m pip install sap-knowledge-pipeline"}]}},"identity":{"author":"Yassin Bahri","license":"MIT"},"source_available":true,"agent":{"source":{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README, Installation","checked":"2026-09-29"},"install":"python -m pip install sap-knowledge-pipeline\npython -m pip install \"sap-knowledge-pipeline[hana]\"\npython -m pip install \"sap-knowledge-pipeline[fastembed]\""},"provides":[{"capability":"capability:retrieval-augmented-generation","what_it_does":"Builds the corpus before any vector exists: a recipe allow-lists the fields, an OData client or a HANA `SELECT` pages the records, and each chunk carries the entity set, the complete business key and a stable id so an answer can cite the record it came from. Local [FastEmbed](external:fastembed) embeddings and a persistent [Qdrant](external:qdrant) index are an optional sink, and no model is called.","sources":[{"url":"https://github.com/yassinbahri/sap-knowledge-pipeline","title":"yassinbahri/sap-knowledge-pipeline — repository description","checked":"2026-09-29","quote":"Turn selected SAP OData and HANA business records into secure, citation-ready knowledge for RAG."},{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"Deterministic knowledge documents, citations, and character-aware chunks."},{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"The structured citation lets a RAG application show where an answer came from."},{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"No LLM is called automatically."}]}],"requires":[{"ref":"external:fastembed","requirement":"conditional","condition":"the optional local embedding path is installed with the `[fastembed]` extra; the library itself computes no embeddings","for":"the embedding model the index step runs locally, so chunks can be embedded without calling a hosted service","sources":[{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"Local FastEmbed embeddings and a persistent Qdrant knowledge index."},{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README, Installation","checked":"2026-09-29","quote":"Install the optional local embedding and Qdrant dependencies"}]},{"ref":"external:qdrant","requirement":"conditional","condition":"the optional local index is used as the sink; the README states it is intended for development and smaller indexes","for":"the vector index the embedded chunks are written to and searched in, the first end-to-end local target the README names","sources":[{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"Local FastEmbed embeddings and a persistent Qdrant knowledge index."},{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"Qdrant local mode is intended for development and smaller indexes."}]}],"connects":[{"ref":"artifact:sap-hana","kind":"data","protocols":["sql"],"direction":"outbound","style":"sync","condition":"the HANA adapter is configured; the OData client reaches a service instead","for":"Reads the rows a recipe allow-lists by running a parameterised SELECT and streaming it in bounded pages, over a certificate-validated connection.","sources":[{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"Explicit, parameterized HANA `SELECT` datasets streamed in bounded pages."},{"url":"https://raw.githubusercontent.com/yassinbahri/sap-knowledge-pipeline/main/README.md","title":"yassinbahri/sap-knowledge-pipeline — README","checked":"2026-09-29","quote":"Certificate-validated SAP HANA connections through the optional SAP `hdbcli` driver."}]},{"ref":"artifact:btp-hana-cloud","kind":"data","for":"reading business data from an SAP HANA Cloud instance when it is the configured HANA source","direction":"outbound","sources":[{"url":"https://github.com/yassinbahri/sap-knowledge-pipeline","title":"sap-knowledge-pipeline README","checked":"2026-10-18","quote":"It is not specific to S/4HANA: an ECC EHP8 system on HANA, S/4HANA, HANA Cloud, or a custom HANA application can all be sources when the configured user can read a stable view or query."}]},{"ref":"external:sap-s4hana","kind":"data","for":"reading business data from an SAP S/4HANA system over its underlying HANA SQL layer when it is the configured HANA source","direction":"outbound","sources":[{"url":"https://github.com/yassinbahri/sap-knowledge-pipeline","title":"sap-knowledge-pipeline README","checked":"2026-10-18","quote":"It is not specific to S/4HANA: an ECC EHP8 system on HANA, S/4HANA, HANA Cloud, or a custom HANA application can all be sources when the configured user can read a stable view or query."}]}],"maintainers":["actor:yassinbahri"],"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-09-29"},"history":[{"date":"2026-09-29","field":"entry","from":null,"to":"created","reason":"Handed over as a URL. Filed behind the BTP door because what it reads is an SAP OData service and [SAP HANA](artifact:sap-hana), and neither the library nor its recipes touch CAP, UI5 or ABAP; the repository's own topics are rag, rag-pipeline, sap, sap-btp and sap-hana. One edge, [retrieval-augmented generation](capability:retrieval-augmented-generation): the capability's CAP coverage says the layer above the vector, splitting long text into chunks and deciding what goes into the prompt, is hand-written in every entry there, and that layer is what this library is. [Data import and export](capability:data-import-export) was considered and left off, since that capability is about a file somebody supplies rather than records read out of a live service, and [OData](capability:odata) is about serving a model as OData rather than consuming one. The optional SAP `hdbcli` driver is named in the prose and carries no edge: SAP's Node.js driver is the artifact [@sap/hana-client](artifact:sap-hana-client), so its Python sibling belongs in the graph the same way and not as an external, which is an editorial decision rather than one for this batch."}],"drafted_with_ai":true,"contributors":["actor:adity982","actor:yassinbahri"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"good","evidence":"3 contributors"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"unknown","evidence":"no BTP release lines in the atlas"},{"label":"Survived majors","tier":"unknown","evidence":"no BTP release lines in the atlas"},{"label":"Maintainer's CI","tier":"good","evidence":"CI green, 2026-10-06"}],"practice":[{"label":"Tests","tier":"good","evidence":"14 test files"},{"label":"Docs","tier":"good","evidence":"docs/ with 2 pages, README 25 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","npm":"not published under this name","stars":0,"forks":2,"open_issues":18,"archived":false,"pushed_at":"2026-10-24","license_spdx":"MIT","org_owned":false,"default_branch":"main","contributors":3,"tree_truncated":false,"test_files":14,"workflows":2,"other_ci":false,"readme_bytes":25097,"docs_files":2,"changelog":true,"license_file":true,"dts_files":0,"first_commit":"2026-07-30","last_commit":"2026-10-06","commits":31,"ci_status":"success","ci_run_at":"2026-10-06","ci_workflow":"CI","ci_event":"push","readme_path":"README.md","readme_sha":"a364bd845133cf09834506e6d2e00c72b2839acf","created_at":"2026-08-01T13:26:11Z","open_prs":3,"repo_read":"2026-10-24"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"github-releases","url":"https://github.com/yassinbahri/sap-knowledge-pipeline/releases"},"format":"github-releases","releases":[{"version":"0.1.0","date":"2026-10-06","date_source":"github","heading":"SAP Knowledge Pipeline 0.1.0a4","url":"https://github.com/yassinbahri/sap-knowledge-pipeline/releases/tag/v0.1.0a4","sections":[],"hash":"1e8a9aeb6320bb9b","prerelease":true},{"version":"0.1.0","date":"2026-09-04","date_source":"github","heading":"v0.1.0a3","url":"https://github.com/yassinbahri/sap-knowledge-pipeline/releases/tag/v0.1.0a3","sections":[],"hash":"9bca7c23582fc292","prerelease":true},{"version":"0.1.0","date":"2026-08-26","date_source":"github","heading":"sap-knowledge-pipeline 0.1.0a2","url":"https://github.com/yassinbahri/sap-knowledge-pipeline/releases/tag/v0.1.0a2","sections":[],"hash":"b5a65274bd0c4a3e","prerelease":true},{"version":"0.1.0","date":"2026-08-01","date_source":"github","heading":"sap-knowledge-pipeline 0.1.0a1","url":"https://github.com/yassinbahri/sap-knowledge-pipeline/releases/tag/v0.1.0a1","sections":[],"hash":"194cdaabfbc6d772","prerelease":true}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:yassinbahri","name":"Yassin Bahri","json":"/actors/yassinbahri.json"}],"contributors":[{"ref":"actor:adity982","name":"ADITYA","json":"/actors/adity982.json"},{"ref":"actor:yassinbahri","name":"Yassin Bahri","json":"/actors/yassinbahri.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}