{"ref":"artifact:sap-samples-teched2025-ai160","page":"/artifacts/sap-samples-teched2025-ai160","json":"/artifacts/sap-samples-teched2025-ai160.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"sap-samples-teched2025-ai160","name":"SAP-samples/teched2025-AI160","artifact_type":"sample","ecosystem":"btp","use_as":"reference","domain":"ai-and-agents","origin_ring":"sap-official","description":{"one_line":"A hands-on session that builds a purchase-order escalation agent in JavaScript or Java with the SAP Cloud SDK for AI and the Generative AI Hub in AI Foundation, calling the S/4HANA Purchase Order API.","short":"Hands-on building an AI agent with the SAP Cloud SDK for AI","what_it_solves":"Two parallel tracks build the same demo in two languages, a purchase-order management agent that identifies overdue PO items and automates escalation workflows: JavaScript with [LangGraph](external:langgraph), Java with Spring AI, and identical core concepts either way. Both call the [SAP S/4HANA](external:sap-s4hana) Purchase Order API for PO data and note creation and the [SAP AI Core](artifact:btp-ai-core) Orchestration Service for LLM invocation, content filtering and data masking, while a React frontend takes a query such as 'Show overdue PO items for plant DE01' and the agent routes it through tools that fetch PO data, calculate overdue status, format the response and create an escalation note. The repository carries the material for two sessions, SAP TechEd 2025 and DSAG TechXchange 2026, and runs either on the hands-on test system it provides or on a reader's own AI Core instance, which needs a deployment for orchestration created by hand and its client ID, secret and authentication URL entered."},"links":{"repo":"https://github.com/SAP-samples/teched2025-AI160"},"identity":{"license":"Apache-2.0"},"source_available":true,"compat":{"runtimes":["node","java"]},"type_properties":{"form":{"value":"workshop","sources":[{"url":"https://github.com/SAP-samples/teched2025-AI160","title":"SAP-samples/teched2025-AI160 — README, Description","checked":"2026-10-19","quote":"This repository contains material for multiple sessions"}]}},"demonstrates":["capability:agent-tooling","capability:llm-integration"],"requires":[{"ref":"artifact:btp-ai-core","for":"the orchestration deployment both tracks call for the model; on a reader's own instance it has to be created and its credentials supplied first.","sources":[{"url":"https://github.com/SAP-samples/teched2025-AI160","title":"SAP-samples/teched2025-AI160 — README, Core Integration Points","checked":"2026-10-19","quote":"**[SAP AI Core Orchestration Service](https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/orchestration-8d022355037643cebf775cd3bf662cc5?locale=en-US)**: Handles LLM invocation, content filtering, and data masking"},{"url":"https://github.com/SAP-samples/teched2025-AI160","title":"SAP-samples/teched2025-AI160 — README, Getting Started","checked":"2026-10-19","quote":"You need to create a deployment for orchestration by referring the [documentation](https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/create-deployment-for-orchestration?locale=en-US)."}]}],"connects":[{"ref":"external:sap-s4hana","kind":"data","direction":"outbound","for":"the Purchase Order API the agent's tools read overdue PO items from and write an escalation note back to.","sources":[{"url":"https://github.com/SAP-samples/teched2025-AI160","title":"SAP-samples/teched2025-AI160 — README, Core Integration Points","checked":"2026-10-19","quote":"**SAP S/4HANA**: Purchase Order API for real-time PO data retrieval and note creation"}]}],"maintainers":["actor:sap-samples"],"drafted_with_ai":true,"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-09-14"},"contributors":["actor:ajaysoreng","actor:brigittak307","actor:davidkna-sap","actor:deekshas8","actor:emincihangeri","actor:jjtang1985","actor:jmsrpp","actor:jonas-isr","actor:jung-thomas","actor:kavithasiva","actor:marikaner","actor:namadipta","actor:newtork","actor:rich-heilman","actor:rpanackal","actor:zhongpinwang"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"good","evidence":"16 contributors, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-06, 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":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"fair","evidence":"none found in the tree"},{"label":"Docs","tier":"good","evidence":"README 6 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":28,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-25","npm":"not published under this name","stars":28,"forks":22,"open_issues":1,"archived":false,"pushed_at":"2026-06-04","license_spdx":"Apache-2.0","org_owned":true,"default_branch":"main","created_at":"2025-08-07T10:07:26Z","open_prs":0,"tree_truncated":false,"test_files":0,"workflows":0,"other_ci":false,"readme_bytes":6600,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2025-08-07","last_commit":"2026-06-04","commits":107,"contributors":16,"readme_path":"README.md","readme_sha":"4f1784d2e5c67eda950b317060e4f85963118619","repo_read":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:sap-samples","name":"SAP Samples","json":"/actors/sap-samples.json"}],"contributors":[{"ref":"actor:ajaysoreng","name":"Ajay Soreng","json":"/actors/ajaysoreng.json"},{"ref":"actor:newtork","name":"Alexander Dümont","json":"/actors/newtork.json"},{"ref":"actor:brigittak307","name":"BrigittaK307","json":"/actors/brigittak307.json"},{"ref":"actor:davidkna-sap","name":"David Knaack","json":"/actors/davidkna-sap.json"},{"ref":"actor:deekshas8","name":"Deeksha Sinha","json":"/actors/deekshas8.json"},{"ref":"actor:emincihangeri","name":"emincihangeri","json":"/actors/emincihangeri.json"},{"ref":"actor:jmsrpp","name":"James Rapp","json":"/actors/jmsrpp.json"},{"ref":"actor:jonas-isr","name":"Jonas-Isr","json":"/actors/jonas-isr.json"},{"ref":"actor:jjtang1985","name":"Junjie Tang","json":"/actors/jjtang1985.json"},{"ref":"actor:kavithasiva","name":"KavithaSiva","json":"/actors/kavithasiva.json"},{"ref":"actor:marikaner","name":"Marika Marszalkowski","json":"/actors/marikaner.json"},{"ref":"actor:namadipta","name":"namadipta","json":"/actors/namadipta.json"},{"ref":"actor:rich-heilman","name":"Rich Heilman","json":"/actors/rich-heilman.json"},{"ref":"actor:rpanackal","name":"Roshin Rajan Panackal","json":"/actors/rpanackal.json"},{"ref":"actor:jung-thomas","name":"Thomas Jung","json":"/actors/jung-thomas.json"},{"ref":"actor:zhongpinwang","name":"Zhongpin Wang","json":"/actors/zhongpinwang.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}