Provider: OpenAI
"model": { "provider": "openai" }, with any knowledge (knowledge.retrieval; HelpPuff's own by default). See Models and providers.
This page describes the whole "backend": { "type": "openai" }, still used for what does not split: a stored prompt (promptId), a vector store HelpPuff fills for you, or another base URL. A vector store you fill yourself works with any model: "knowledge": { "retrieval": { "type": "openai-vector-store", "vectorStoreId": "vs_…" } }.
Answers with OpenAI's Responses API. Knowledge comes from an OpenAI vector store (File Search), or from HelpPuff's own knowledge base.
Set up
npx @knowtific/helppuff init --url acme.com --backend openai --api-key "$OPENAI_API_KEY"
# or later:
helppuff secret set OPENAI_API_KEY"backend": {
"type": "openai",
"model": "gpt-5-mini",
"apiKey": { "env": "OPENAI_API_KEY" }
}| Option | Default | |
|---|---|---|
model | gpt-5-mini | Any Responses model |
apiKey | { "env": "OPENAI_API_KEY" } | By environment variable name |
retrieval | — | "helppuff": answer from HelpPuff's knowledge base (crawled on your Cloudflare account) instead of a vector store |
vectorStoreId | — | Filled in by helppuff knowledge sync |
promptId | — | A stored prompt in the OpenAI dashboard; used instead of prompt.md |
baseUrl | OpenAI's | Another Responses-compatible endpoint, e.g. Azure OpenAI |
Knowledge: two ways
OpenAI File Search (the default for this backend). helppuff knowledge sync crawls your site (up to knowledge.website.maxPages, default 50) and uploads it, with knowledge.files, to a vector store it creates; the id is written to vectorStoreId. Run it again to refresh.
HelpPuff's knowledge base ("retrieval": "helppuff"). Your site is crawled into Vectorize and D1 on your Cloudflare account, exactly as with the default backend, with the same dashboard tools (choose pages, files, facts, test a question). OpenAI only writes the answer: the passages are added to its instructions, and the sources come back as links. This is usually the better choice: retrieval stays free and on your account, and switching models later changes nothing else.
helppuff config set backend.retrieval helppuff && helppuff deployThe prompt
prompt.md is sent as the instructions, versioned like every other backend. Or keep the prompt in OpenAI's dashboard as a stored prompt and set promptId. It is then edited and versioned there, and prompt.md is not used.
Notes
- Multi-turn conversations use
previous_response_id(OpenAI keeps the history, withstore: true); the session holds only the id. - Rich messages (chips, cards, links) are function calls the model makes; they are rendered, never executed.
- Replies stream.