Or sign in via Cloudflare Access. Hit Set to begin.
📚 How to train this system best (open me first)
What makes a great training entry
- One real case from your 15 years of GFS experience — not a synthetic example.
- Specific entities by name: "Driscoll", "RS7245", "Echo Lake" — not "a customer" or "an item".
- The query as a user would type it — natural language, your team's vocabulary, the way someone actually asks.
- The answer as it SHOULD appear — citation pattern, format, what to include (price, date, source row).
- The source evidence — which D1 table + row is canonical (e.g.
pricing_master.id=1234 active 2025-2026). - Confidence score 0.5-1.0 — how sure are you this is correct? 0.95+ for bedrock patterns, 0.65-0.80 for likely cases.
The system learns from real signal, not generic phrasing. Each great entry compounds — R89 few-shot loop injects the top 4 most-relevant samples into every chat prompt.
Best-practice template (with example)
INTENT: customer_price_lookup
PILLAR: price_admin
QUERY: What does Driscoll pay for RS7245?
ANSWER TEMPLATE: Driscoll's active price for RS7245 is $21.00/case as of
2026-01-15, from pricing_master row 12834. Source: invoice
INV-44721 from 2026-02-03 confirms.
ENTITY EXAMPLES: ["Driscoll", "RS7245"]
SOURCE EVIDENCE: pricing_master.id=12834 active 2025-2026
CONFIDENCE: 0.95
RATIONALE: Real Driscoll pricing pattern; this is how the answer should
always look — quote price + date + source row + invoice
cross-validation.
Fill the form below. Select the intent first → the form pre-fills with the matching template. Edit the slots with your real case.
Per-intent hints (R94.14 — cross-reference brain dumps)
customer_price_lookup— expectedsource_of_truth: pricing_master + invoice. If you've already done a Brain Dump for the customer, theirChatbot-Friendly Facts.common_qaprobably has the canonical answer phrasing — copy that into the answer template.customer_spend_lookup— link toChatbot-Friendly Facts.last_verifiedas the freshness signal. If the brain dump'slast_verifiedis > 90 days, flag in your rationale.vendor_cost_lookup— expectedsource_of_truth: vendor_bill + purchase_order. For formula-priced vendors (Bongards), include the formula in the rationale.payment_lookup,contact_lookup— Brain DumpFinanceandContactssections are the canonical sources. Reference them directly in source_evidence:entity_notes:customer:539 (R94.14 structured).
Bulk-import format
Three accepted formats. Paste a block into "📥 Bulk Import" below, preview parsed entries, then confirm.
Option A: JSON array
[
{ "intent": "customer_price_lookup", "query_template": "...",
"answer_template": "...", "entity_examples": ["Driscoll", "RS7245"],
"source_evidence": "pricing_master.id=12834 active 2025-2026",
"confidence_score": 0.95 },
{ "intent": "vendor_cost_lookup", ... }
]
Option B: Markdown blocks (per entry)
# Entry - intent: customer_price_lookup - query: What does Driscoll pay for RS7245? - answer: Driscoll's active price for RS7245 is $21.00/case as of 2026-01-15. - entities: Driscoll, RS7245 - source: pricing_master.id=12834 active 2025-2026 - confidence: 0.95 # Entry - intent: vendor_cost_lookup - query: ... - ...
Option C: Plain text (blank-line separated)
intent: customer_price_lookup query: What does Driscoll pay for RS7245? answer: Driscoll's active price for RS7245 is $21.00/case as of 2026-01-15. entities: Driscoll, RS7245 source: pricing_master.id=12834 active 2025-2026 confidence: 0.95 intent: vendor_cost_lookup query: ...
All three parsed to the same schema. Preview shows parse errors per entry before you confirm.
Coverage targets
- 5+ entries per intent — the system has 25 intents, so you need 125+ minimum.
- 10+ entries per pillar — 8 pillars (Price / Nutrition / Finance / Relationship / Order Mgmt / Production / Bid / All), so 80+ minimum, ideally 200+.
- Diverse customers/items/scenarios per intent — don't put all 5 entries on Driscoll. Mix Driscoll, NYCDOE, Hempstead, NMSNC, etc.
- Cover the long tail — intents with 0 entries today (per the sidebar) need at least 3 each to bootstrap.
The sidebar shows per-intent + per-pillar counts. Sort by lowest count and fill gaps first.
What makes a bad entry
- Synthetic / made-up cases — the bot trains on noise and will cite fake rows.
- Generic templates — "customer wants price" isn't specific enough. Use real customer + real item.
- Wrong source evidence — the bot will cite the wrong place. Verify the source row exists.
- Low confidence with no rationale — don't seed unsure cases. If <0.7, write a clear rationale.
- Duplicates of existing entries — the endpoint dedupes by intent+rationale, but it wastes your time.
- Stale data — last year's price for a customer that re-contracted in January is no longer canonical.
Anti-patterns (hard rules)
- Never include PII — emails, phone numbers, SSNs. The endpoint scrubs PII patterns and will reject; human review is the safety net.
- Never train on internal security/audit details — no_gfs_exposure rule. Skip anything about secrets, tokens, audit logs, infra.
- Never re-seed existing entries — the system dedupes but it wastes your time + clutters the log.
- Never seed below 0.5 confidence — endpoint clamps to 0.5-1.0; below = qualitative folklore, not training data.
- Never use a Markdown header (#, ##) inside an entry value — confuses the markdown parser.
Standalone reference: docs/TRAINING_BEST_PRACTICES.md
📚 Cross-reference brain dumps (R94.14)
Training entries (corpus seeds) and Brain Dumps (per-entity notes in /entity-context.html) are two halves of the same teaching loop:
- Brain Dump = structured facts about ONE entity (Driscoll, Bongards, RS7245). Lives in
entity_notes.extracted_facts. Bot reads viaget_entity_contexttool. - Training entry = how the bot should ANSWER a class of question. Lives in
decision_corpus. Bot reads via R89 few-shot loop.
How to use them together
- For a major customer/vendor/item, write a Brain Dump first using 📋 the R94.14 template. The
Chatbot-Friendly Facts.common_qasection is where you've already drafted the Q+A pairs the bot needs. - For each Q+A in that section, seed a training entry here. Use the entity name in
entity_examples. Use the source-of-truth from the brain dump insource_evidence. - Link them: in
source_evidence, writeentity_notes:customer:539 + pricing_master.id=12834so the bot sees both the structured note AND the canonical D1 row.
Example chain
Brain Dump (Driscoll):
Chatbot-Friendly Facts → Common Q&A:
Q: Can we substitute RS7245? → NO — kosher; Mike approval.
Training entry (mirrors that Q+A):
intent: general_inquiry (or product_substitution if defined)
query_template: Can we substitute RS7245 for Driscoll?
answer_template: NO. RS7245 is KOSHER SENSITIVE on Driscoll's kids program;
substitution requires Mike Levine approval. See
entity_notes.customer.539 (Driscoll) for full context.
entity_examples: ["Driscoll", "RS7245"]
source_evidence: entity_notes:customer:539 (R94.14 structured) + item_master:RS7245
confidence_score: 0.95
Freshness check
When seeding a corpus entry that depends on a brain dump fact, check the brain dump's Chatbot-Friendly Facts.last_verified date. If > 90 days, either refresh the brain dump first OR flag it in your rationale ("brain dump last_verified 2025-08; verify before re-using").
Standalone reference: docs/BRAIN_DUMP_TEMPLATE.md
New corpus entry
0.95+ bedrock · 0.80-0.95 solid · 0.65-0.80 likely · 0.50-0.65 qualitative
📥 Bulk import
🎯 Legacy Q&A bank
The pre-R94.12 question-bank flow (with coach-the-system field) is preserved at /training-legacy.html. Use that if you need to work through the 235-question coverage script.