diff --git a/docs/index.html b/docs/index.html index 3763d7a9..c1f47408 100644 --- a/docs/index.html +++ b/docs/index.html @@ -756,6 +756,119 @@ border-top: 2px solid #22d3ee; } + /* ─── Section: Multi-Turn Matching ─────────────────────────────── */ + .section-matching { + padding: 4.5rem 0; + position: relative; + background: linear-gradient( + 180deg, + var(--bg-deep) 0%, + #0f1628 30%, + #0f1628 70%, + var(--bg-deep) 100% + ); + } + .section-matching .container { + position: relative; + z-index: 1; + } + .section-matching h2 { + font-size: clamp(1.8rem, 4vw, 2.8rem); + font-weight: 700; + letter-spacing: -0.02em; + text-align: center; + margin-bottom: 1rem; + } + .matching-sub { + text-align: center; + color: var(--text-secondary); + font-size: 1.05rem; + max-width: 640px; + margin: 0 auto 3.5rem; + line-height: 1.7; + } + .matching-criteria { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 2rem; + max-width: 900px; + margin: 3rem auto 0; + position: relative; + } + .matching-criteria::before { + content: ""; + position: absolute; + top: 28px; + left: calc(16.67% + 1rem); + right: calc(16.67% + 1rem); + height: 2px; + background: var(--border); + } + .criteria-item { + text-align: center; + position: relative; + } + .criteria-item-label { + width: 56px; + height: 56px; + border-radius: 50%; + background: var(--bg-card); + border: 2px solid var(--accent); + display: flex; + align-items: center; + justify-content: center; + font-family: var(--font-mono); + font-size: 0.75rem; + font-weight: 700; + color: var(--accent); + margin: 0 auto 1.25rem; + position: relative; + z-index: 1; + } + .criteria-item h3 { + font-family: var(--font-mono); + font-size: 0.95rem; + font-weight: 600; + margin-bottom: 0.5rem; + } + .criteria-item p { + font-size: 0.875rem; + color: var(--text-secondary); + line-height: 1.6; + } + .how-it-works-list { + list-style: none; + padding: 0; + margin: 0; + } + .how-it-works-list li { + padding: 0.75rem 0; + border-bottom: 1px solid var(--border); + font-size: 0.9rem; + line-height: 1.6; + } + .how-it-works-list li:last-child { + border-bottom: none; + } + .how-it-works-list code { + font-family: var(--font-mono); + font-size: 0.85rem; + color: var(--accent); + background: rgba(0, 255, 136, 0.08); + padding: 0.15rem 0.4rem; + border-radius: 4px; + } + + @media (max-width: 768px) { + .matching-criteria { + grid-template-columns: 1fr; + gap: 2.5rem; + } + .matching-criteria::before { + display: none; + } + } + /* ─── Section: Suite Reveal ──────────────────────────────────── */ .section-suite { padding: 4.5rem 0; @@ -1259,9 +1372,8 @@
docker run -v $(pwd)/fixtures:/fixtures -p 4010:4010 ghcr.io/copilotkit/aimock
+
+ docker run -v $(pwd)/fixtures:/fixtures -p 4010:4010 ghcr.io/copilotkit/aimock -h 0.0.0.0 -f /fixtures
+ Multi-turn AI flows — human-in-the-loop, subagents, tool use — need different
+ responses at different conversation stages. turnIndex and
+ hasToolResult match based on what’s already in the request. No mutable
+ server-side state, safe for concurrent and shared instances.
+
{ + "fixtures": [ + { + "match": { + "userMessage": "plan a trip", + "turnIndex": 0 + }, + "response": { + "toolCalls": [{ "name": "generate_steps" }] + } + }, + { + "match": { + "userMessage": "plan a trip", + "turnIndex": 1 + }, + "response": { + "content": "Great choices! Your trip is booked." + } + } + ] +}+
generate_steps)
+ + Count of assistant messages in the request. Increases with each conversational turn. +
++ Does the request contain tool results? Distinguishes pre- and post-tool-call turns. +
++ Server-side counter for repeated identical requests. Use when stateless criteria + don’t apply. +
+$ npx @copilotkit/aimock --config aimock.json -⚡ aimock v1.0.0 +⚡ aimock v1.16.0 ✓ LLM mounted at /v1/chat/completions ✓ LLM mounted at /v1/messages