Beyond the page

AI Vendor Procurement Readiness Questionnaire

Who this questionnaire is for
Procurement, security, legal/compliance, risk, IT, and product leaders evaluating AI vendors, tools, model providers, or platforms.

What it assesses
Whether a vendor can meet real operational and governance requirements: evidence/log exportability, auditability, access controls, data handling, incident support, evaluation discipline, failure-path behaviour, and contractual clarity on risks.

How it helps
Stops “demo-driven buying.” Results translate requirements into concrete proof points (what the vendor must show, log, export, and support) so you don’t discover gaps after rollout — when failures are expensive and public.

Best used when

  • Selecting a vendor/model/provider
  • Renewing or expanding contracts
  • Introducing AI into regulated/high-stakes workflows
  • Comparing vendors beyond feature checklists
/* Clickability + theme safety */ #oyez-vendor-readiness{ position:relative !important; z-index:2147483647 !important; pointer-events:auto !important; isolation:isolate; max-width:980px;margin:0 auto; } #oyez-vendor-readiness, #oyez-vendor-readiness *{box-sizing:border-box;pointer-events:auto !important} #oyez-vendor-readiness .wrap{ border:1px solid rgba(0,0,0,.12); border-radius:18px; padding:18px 18px 12px; background:rgba(255,255,255,.82); backdrop-filter:saturate(1.15) blur(10px); box-shadow:0 18px 55px rgba(0,0,0,.10); } #oyez-vendor-readiness h1{font-size:28px;line-height:1.15;margin:0 0 6px;letter-spacing:-.02em} #oyez-vendor-readiness .sub{opacity:.82;margin:0 0 14px;font-size:14px;line-height:1.45} /* Coverage bar */ #oyez-vendor-readiness .bar{ height:10px;border-radius:999px;border:1px solid rgba(0,0,0,.14); overflow:hidden;background:rgba(0,0,0,.04); margin:10px 0 14px } #oyez-vendor-readiness .bar > div{ height:100%;width:0%; background:linear-gradient(90deg, rgba(0,0,0,.88), rgba(0,0,0,.62)); transition:width .22s ease } /* Pills */ #oyez-vendor-readiness .pillrow{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 12px} #oyez-vendor-readiness .pill{ display:inline-flex;align-items:center;gap:8px;padding:7px 10px;border-radius:999px; border:1px solid rgba(0,0,0,.14);background:rgba(255,255,255,.94); font-size:12px;white-space:nowrap;box-shadow:0 10px 24px rgba(0,0,0,.07) } #oyez-vendor-readiness .pill b{font-weight:750} /* Meta grid (role small, org wide) */ #oyez-vendor-readiness .meta{display:grid;grid-template-columns:repeat(12,1fr);gap:10px;margin:14px 0 10px} #oyez-vendor-readiness label{display:block;font-weight:650;font-size:13px;margin:0 0 6px} #oyez-vendor-readiness input[type=”text”], #oyez-vendor-readiness select{ width:100%;padding:10px 10px;border-radius:12px;border:1px solid rgba(0,0,0,.16); background:rgba(255,255,255,.96);font:inherit;font-size:14px;line-height:1.35;outline:none; box-shadow:0 10px 22px rgba(0,0,0,.06) } #oyez-vendor-readiness .span-4{grid-column:span 4} #oyez-vendor-readiness .span-8{grid-column:span 8} @media (max-width:860px){ #oyez-vendor-readiness .meta{grid-template-columns:repeat(6,1fr)} #oyez-vendor-readiness .span-4, #oyez-vendor-readiness .span-8{grid-column:span 6} } /* Score row */ #oyez-vendor-readiness .scoreRow{display:flex;gap:12px;flex-wrap:wrap;align-items:stretch;margin:12px 0 6px} #oyez-vendor-readiness .scoreBox{ flex:0 0 auto;min-width:240px; border:1px solid rgba(0,0,0,.12);border-radius:16px;background:#fff; padding:12px;box-shadow:0 16px 40px rgba(0,0,0,.09) } #oyez-vendor-readiness .scoreLabel{font-size:13px;opacity:.78} #oyez-vendor-readiness .scoreBig{font-size:42px;font-weight:900;line-height:1;margin-top:6px} #oyez-vendor-readiness .scoreMax{font-size:13px;opacity:.78;margin-top:4px} #oyez-vendor-readiness .answered{font-size:13px;opacity:.82;margin-top:8px} #oyez-vendor-readiness .tierBox{ flex:1;min-width:260px; border:1px solid rgba(0,0,0,.12);border-radius:16px;background:#fff; padding:12px;box-shadow:0 16px 40px rgba(0,0,0,.09) } #oyez-vendor-readiness .tierLabel{font-size:13px;opacity:.78} #oyez-vendor-readiness .tierVal{font-size:18px;font-weight:900;margin-top:6px} #oyez-vendor-readiness .tierNote{font-size:13px;opacity:.82;line-height:1.45;margin-top:6px} /* Sections + Qs */ #oyez-vendor-readiness .sec{border-top:1px solid rgba(0,0,0,.12);padding:14px 0 6px} #oyez-vendor-readiness .sec h2{font-size:18px;margin:0 0 8px} #oyez-vendor-readiness .q{ border:1px solid rgba(0,0,0,.12); border-radius:16px; padding:12px; background:rgba(255,255,255,.97); margin:10px 0; box-shadow:0 14px 34px rgba(0,0,0,.07) } #oyez-vendor-readiness .qtitle h3{font-size:15px;margin:0;line-height:1.35} #oyez-vendor-readiness .opts{display:grid;grid-template-columns:repeat(12,1fr);gap:10px;margin-top:10px} #oyez-vendor-readiness .opt{ grid-column:span 6; border:1px solid rgba(0,0,0,.12); border-radius:16px; padding:12px; background:#fff; box-shadow:0 14px 34px rgba(0,0,0,.06); cursor:pointer; display:flex;gap:10px;align-items:flex-start; transition:transform .06s ease, box-shadow .12s ease, border-color .12s ease; } #oyez-vendor-readiness .opt:hover{transform:translateY(-1px);box-shadow:0 18px 42px rgba(0,0,0,.10)} #oyez-vendor-readiness .opt input[type=”radio”]{margin-top:3px;transform:scale(1.05);flex:0 0 auto} #oyez-vendor-readiness .opt .txt strong{display:block;font-size:13px} #oyez-vendor-readiness .opt.selected{border-color:rgba(0,0,0,.35);box-shadow:0 22px 55px rgba(0,0,0,.13)} @media (max-width:860px){#oyez-vendor-readiness .opt{grid-column:span 12}} /* Actions + results */ #oyez-vendor-readiness .actions{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0 6px;position:relative;z-index:2147483647} #oyez-vendor-readiness button{ border-radius:12px;border:1px solid rgba(0,0,0,.18); padding:10px 12px;background:#fff;cursor:pointer; font:inherit;font-weight:850;font-size:14px; box-shadow:0 14px 34px rgba(0,0,0,.09) } #oyez-vendor-readiness button.primary{background:rgba(0,0,0,.9);color:#fff;border-color:rgba(0,0,0,.9)} #oyez-vendor-readiness button:disabled{opacity:.55;cursor:not-allowed;box-shadow:none} #oyez-vendor-readiness .results{border-top:1px solid rgba(0,0,0,.12);margin-top:10px;padding-top:14px;display:none} #oyez-vendor-readiness .rgrid{display:grid;grid-template-columns:repeat(12,1fr);gap:10px} #oyez-vendor-readiness .card{grid-column:span 6;border:1px solid rgba(0,0,0,.12);border-radius:16px;background:#fff;padding:12px;box-shadow:0 16px 40px rgba(0,0,0,.09)} #oyez-vendor-readiness .card.full{grid-column:span 12} #oyez-vendor-readiness .card h4{margin:0 0 6px;font-size:14px} #oyez-vendor-readiness .big{font-size:22px;font-weight:900;line-height:1.2;margin:0} #oyez-vendor-readiness .muted{font-size:13px;opacity:.78;line-height:1.45;margin:6px 0 0} #oyez-vendor-readiness .list{margin:8px 0 0;padding-left:18px;font-size:13px;line-height:1.45} #oyez-vendor-readiness .footer{margin:10px 0 6px;font-size:12px;opacity:.7;line-height:1.45}

AI Vendor & Procurement Readiness

This assessment helps teams avoid demo-driven purchasing. It focuses on evidence exportability, controllability, evaluation discipline, and audit/incident readiness.

Status: Not scored Coverage: 0% Score: — Decision: —
Your role (optional) — Select role — Procurement / Finance Engineering / Platform ML / Applied AI Security Risk / Legal / Compliance Product / Operations Other
Company or project identifier (optional)
Your score
0
out of 45
Answered 0/15
Posture
—
Answer the questions to see your posture.

Section A — Evidence & Exportability

1) Can the tool export raw logs (inputs, retrieval context, tool calls, outputs) in a structured format?

No — no export
Partial — limited/export on request
Mostly — exportable logs exist
Enforced — exportable + documented schema

2) Can you reproduce results later (versioned model/prompt/data + timestamps)?

No
Partial — some versions tracked
Mostly — reproducible in most cases
Enforced — reliably reproducible

3) Are costs and rate limits predictable at scale (quotas, per-seat/per-token clarity, alerts)?

Unknown / unpredictable
Rough estimates only
Predictable with monitoring
Enforced — predictable + enforceable controls

4) Can you migrate away without losing critical data (configs, evals, embeddings, logs)?

No — hard lock-in
Painful / partial
Mostly possible
Enforced — designed for portability

5) Can the vendor support audits (retention, access logs, incident disclosures, evidence trail)?

No
Informal / unclear
Documented support exists
Enforced — contracted + demonstrated

Section B — Security & Control Surface

6) Are permissions least-privilege with roles, audit logs, and periodic reviews?

No controls
Basic roles
Roles + audit logs
Enforced — RBAC + reviews + exportable audits

7) Can you enforce groundedness (allowlists, citations, refusal gates) inside the product?

No
Partial configuration
Strong configuration
Enforced — testable + logged gates

8) Is security posture clear (data handling, training use, retention, encryption) and kept current?

No clarity
Basic statements
Detailed documentation
Enforced — contracted + verified

9) Can you define “high-stakes” workflows with human review and escalation paths?

No
Informal handling
Supported workflows
Enforced — audited workflows

10) Can you tune behaviour (policies/configs) with versioning and rollback?

Black box
Limited tuning
Most knobs exist
Enforced — full control + rollback

Section C — Evaluation & Contract Discipline

11) Do you require failure-path demos (empty retrieval, contradictions, injection, tool errors) before purchase?

No
Occasionally
Usually
Enforced — acceptance criteria + sign-off

12) Can you run structured evaluations (not demos) and compare runs over time?

No
Informal
Structured evaluations exist
Enforced — regression tracking

13) Do contracts include incident expectations (SLAs, breach notification, support, postmortems)?

No
Minimal
Defined
Enforced — strong + tested in practice

14) Do contracts include evidence expectations (export logs, retention, audit support) rather than “trust us”?

No
Partial
Mostly — documented clauses
Enforced — contractual + measurable

15) Do you have an exit plan before signing (data export, replacement timeline, contingency)?

No
Rough idea
Documented plan
Enforced — contracted + rehearsed

Tip: If you can’t export evidence, you can’t govern or defend decisions later — and you can’t learn from incidents.

Posture

—

—

Decision

—

—

Recommended next steps

    Top risks

      (function(){ function init(){ const root = document.getElementById(‘oyez-vendor-readiness’); if(!root) return false; if(root.__oyezInit) return true; root.__oyezInit = true; const MAX=45, TOTAL=15; const bar = root.querySelector(‘#oyezVendorBar’); const statusEl = root.querySelector(‘#oyezVendorStatus’); const coverageEl = root.querySelector(‘#oyezVendorCoverage’); const scorePillEl = root.querySelector(‘#oyezVendorScorePill’); const decisionPillEl = root.querySelector(‘#oyezVendorDecision’); const scoreBigEl = root.querySelector(‘#oyezVendorScoreBig’); const answeredEl = root.querySelector(‘#oyezVendorAnswered’); const postureTopEl = root.querySelector(‘#oyezVendorPosture’); const postureTopNoteEl = root.querySelector(‘#oyezVendorPostureNote’); const roleEl = root.querySelector(‘#oyezVendorRole’); const orgEl = root.querySelector(‘#oyezVendorOrg’); const calcBtn = root.querySelector(‘#oyezVendorCalc’); const copyBtn = root.querySelector(‘#oyezVendorCopy’); const emailBtn = root.querySelector(‘#oyezVendorEmail’); const resetBtn = root.querySelector(‘#oyezVendorReset’); const results = root.querySelector(‘#oyezVendorResults’); const postureOut = root.querySelector(‘#oyezVendorPostureOut’); const postureNoteOut = root.querySelector(‘#oyezVendorPostureNoteOut’); const decisionOut = root.querySelector(‘#oyezVendorDecisionOut’); const decisionDesc = root.querySelector(‘#oyezVendorDecisionDesc’); const nextEl = root.querySelector(‘#oyezVendorNext’); const risksEl = root.querySelector(‘#oyezVendorRisks’); function updateSelected(){ root.querySelectorAll(‘.opt’).forEach(opt=>{ const r = opt.querySelector(‘input[type=”radio”]’); opt.classList.toggle(‘selected’, !!(r && r.checked)); }); } function answeredCount(){ let n=0; for(let i=1;i<=TOTAL;i++){ if(root.querySelector(`input[name="q${i}v"]:checked`)) n++; } return n; } function score(){ let s=0; for(let i=1;i<=TOTAL;i++){ const picked = root.querySelector(`input[name="q${i}v"]:checked`); if(picked) s += parseInt(picked.value,10); } return s; } function postureFromScore(s){ if(s<=15) return 'Demo-led'; if(s<=30) return 'Controlled'; return 'Governable'; } function pack(posture){ const packs={ "Demo-led":{ note:"High risk of buying a black box you can’t govern later. Prioritise exportability, evidence, and failure-path discipline before signing.", decision:"Do not buy (raise requirements)", decisionDesc:"Treat this as a no-go until evidence export, auditability, and failure-path demos meet defined acceptance criteria.", risks:[ "Demos substitute for evaluation; failure cases arrive after rollout.", "Limited logs/exports prevent audit, debugging, and incident reconstruction.", "Vendor lock-in accumulates via configs, embeddings, and non-portable evidence." ], next:[ "Require exportable logs + a documented schema (inputs, retrieval, tool calls, outputs).", "Run failure-path demos with acceptance criteria (empty retrieval, injection, tool errors).", "Add contract requirements: retention, audit support, incident disclosures, and a clear exit plan." ] }, "Controlled":{ note:"Workable posture. Main risk: enforcement gaps (auditability, gates, portability) that show up at scale.", decision:"Buy with conditions (contract + gates)", decisionDesc:"Proceed only if gaps are closed contractually and the product enforces evidence, controls, and exportability.", risks:[ "Controls exist but aren’t consistently enforced across teams/vendors.", "High-stakes workflows may be policy-only rather than enforced.", "Portability may still be costly without a rehearsed exit plan." ], next:[ "Make groundedness enforceable: allowlists, citations, refusal gates, audit logs.", "Require structured evaluations + regression tracking as part of rollout.", "Document and rehearse an exit plan before contract signature." ] }, "Governable":{ note:"Strong procurement posture. Main risk: governance drifting as the vendor/product evolves.", decision:"Buy / standardise (with quarterly review)", decisionDesc:"Adopt as a standard only if you keep evaluation continuous and run periodic reviews of retention, access, and incident support.", risks:[ "Vendor changes can silently shift behaviour without version pinning.", "Audit readiness degrades without periodic retention/access reviews.", "Evidence trails fragment across tools unless standardised." ], next:[ "Standardise evidence schemas across vendors and internal systems.", "Operationalise quarterly reviews: access, retention, incident drills, eval cadence.", "Keep portability active: routine exports, comparison runs, contingency planning." ] } }; return packs[posture]; } function compute(){ updateSelected(); const ans = answeredCount(); const cov = Math.round((ans/TOTAL)*100); const s = score(); bar.style.width = cov + '%'; statusEl.textContent = ans===0 ? 'Not scored' : (ans{ const li=document.createElement(‘li’); li.textContent=x; nextEl.appendChild(li); }); risksEl.innerHTML=”; p.risks.forEach(x=>{ const li=document.createElement(‘li’); li.textContent=x; risksEl.appendChild(li); }); results.style.display=’block’; copyBtn.disabled=false; emailBtn.disabled=false; return {ans,cov,s,posture,pack:p,role:roleEl.value||’—’,org:orgEl.value||’—’}; } function summaryText(state){ const lines=[]; lines.push(‘OYEZ — AI Vendor & Procurement Readiness’); lines.push(‘—————————————‘); lines.push(`Role: ${state.role}`); lines.push(`Company / Project: ${state.org}`); lines.push(”); lines.push(`Status: ${state.ans===TOTAL ? ‘Completed’ : ‘In progress’}`); lines.push(`Coverage: ${state.cov}% (${state.ans}/${TOTAL})`); lines.push(`Score: ${state.s}/45`); lines.push(`Posture: ${state.posture}`); lines.push(`Decision: ${state.pack.decision}`); lines.push(”); lines.push(state.pack.note); lines.push(”); lines.push(‘Top risks:’); state.pack.risks.forEach((r,i)=>lines.push(`${i+1}. ${r}`)); lines.push(”); lines.push(‘Recommended next steps:’); state.pack.next.forEach((n,i)=>lines.push(`${i+1}. ${n}`)); return lines.join(‘\n’); } root.addEventListener(‘change’, (e)=>{ if(e.target && e.target.matches(‘input[type=”radio”]’)) compute(); }); calcBtn.addEventListener(‘click’, (e)=>{ e.preventDefault(); compute(); }); copyBtn.addEventListener(‘click’, async (e)=>{ e.preventDefault(); const state = compute(); if(!state) return; const text = summaryText(state); try{ await navigator.clipboard.writeText(text); copyBtn.textContent=’Copied’; setTimeout(()=>copyBtn.textContent=’Copy Results’, 900); }catch(err){ const ta=document.createElement(‘textarea’); ta.value=text; document.body.appendChild(ta); ta.select(); document.execCommand(‘copy’); document.body.removeChild(ta); copyBtn.textContent=’Copied’; setTimeout(()=>copyBtn.textContent=’Copy Results’, 900); } }); emailBtn.addEventListener(‘click’, (e)=>{ e.preventDefault(); const state = compute(); if(!state) return; const subject = encodeURIComponent(`Oyez — Vendor Readiness (${state.posture}, ${state.s}/45)`); const body = encodeURIComponent(summaryText(state)); window.location.href = `mailto:?subject=${subject}&body=${body}`; }); resetBtn.addEventListener(‘click’, (e)=>{ e.preventDefault(); root.querySelectorAll(‘input[type=”radio”]’).forEach(r=>r.checked=false); roleEl.value=”; orgEl.value=”; compute(); root.scrollIntoView({behavior:’smooth’, block:’start’}); }); compute(); return true; } if(!init()){ let tries=0; const t=setInterval(()=>{ tries++; if(init() || tries>=50) clearInterval(t); }, 100); } })();