SAPTalk
SAPTalk answers plain-English questions about SAP business data, against the S/4HANA Business Partner sandbox. The decision it exists to demonstrate is that the language model never writes a query — it fills in a structured intent, which ordinary TypeScript validates against a field allowlist before compiling to OData. Field names reach the model as JSON Schema enums, so an invented field cannot be emitted; values are escaped by doubling quotes, so an injected clause compiles to an inert string literal rather than syntax. The sandbox speaks OData V2, and every operator was confirmed against the live API rather than taken from documentation. A single registry describes both entities and generates the model's schema, the validator, the compiler and the table, and questions spanning both run as two queries joined on a shared key. The generated query is shown on every answer. Built with NestJS, Next.js 16, Zod and OpenAI structured outputs, with 117 tests that need no API key or network.




