← Back to all products

Support Agent Kit

$197

A customer-support agent with ticket triage, pgvector retrieval over your docs, cited answers, confidence-gated auto-send, escalation to a human, and evals that measure the wrong-answer rate.

3 filespythonv1.0.0
MarkdownPythonJSONYAMLTOMLLLM

Product Preview

Try the interactive reader and demo tools below, or get the full product with all content unlocked.

Interactive Reader (Free Preview) Download Free Sample

File Structure 3 files

support-agent-kit/ ├── free_sample ├── interactive └── preview

Documentation Preview README excerpt

Support Agent Kit

Customer-support automation: ticket triage, RAG with citations over a pgvector store (in-memory fallback for offline

tests), confidence-gated auto-send with human escalation, and a golden-set eval that measures wrong-answer rate.

Vendors the agent_forge core runtime, so it is standalone. All docs and tickets shipped are synthetic.

Quickstart (about 10 minutes)


python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest                                  # offline, mock LLM
python examples/quickstart.py           # auto-send vs escalate
support-kit evals                       # wrong-answer rate on the golden set

Production: pip install -e ".[postgres]", see examples/pgvector_setup.py and guide/PGVECTOR.md. Plug in a real LLM via the

1-method agent_forge.llm.LLM protocol (or HTTPChatLLM) and a real embedding function.

Layout

src/support_kit (triage, kb, embed, store, agent, evals, cli) - src/agent_forge (vendored core) - data/docs -

evals/golden.yaml - tests/ - examples/ - guide/.

What it is not

Not a hosted helpdesk or a guarantee of correctness. The offline mock LLM is extractive and for tests; quality in production

depends on your model, docs and threshold. Evaluate on your own tickets.

License: MIT with a no-resale-as-template clause (see LICENSE).

Code Sample .py preview

src/agent_forge/api.py """FastAPI service: per-tenant API keys, blocking + SSE runs, human approval. POST /v1/runs run to completion (or until approval needed) POST /v1/runs/stream same, as Server-Sent Events GET /v1/runs/{id} status / final answer / pending approval POST /v1/runs/{id}/approval approve or reject a paused tool call POST /v1/admin/tenants create tenant + first API key (admin token) GET /healthz liveness (no auth) Auth: ``X-API-Key: afk_...`` (or ``Authorization: Bearer afk_...``). Keys are stored only as HMAC hashes. Runs are tenant-scoped: another tenant's run id returns 404, never 403 (no existence oracle). """ from __future__ import annotations import hmac import json from typing import Any, Iterator from fastapi import Depends, FastAPI, Header, HTTPException, Request from fastapi.responses import JSONResponse, StreamingResponse from pydantic import BaseModel, Field from .config import Settings from .errors import (AgentForgeError, ApprovalNotPending, AuthError, BudgetExceeded, GuardrailViolation, NotFound, PromptInjectionBlocked, ToolNotAllowed) from .runtime import AgentRuntime from .store import Tenant _STATUS = {AuthError: 401, NotFound: 404, ApprovalNotPending: 409, BudgetExceeded: 402, PromptInjectionBlocked: 422, ToolNotAllowed: 403, GuardrailViolation: 422} class RunRequest(BaseModel): task: str = Field(min_length=1, max_length=20000) class ApprovalRequest(BaseModel): approved: bool note: str = Field(default="", max_length=2000) class TenantRequest(BaseModel): id: str = Field(pattern=r"^[a-z0-9][a-z0-9_-]{1,62}$") name: str = "" allowed_tools: list[str] = [] approval_tools: list[str] = [] token_budget: int = Field(default=0, ge=0) usd_budget: float = Field(default=0.0, ge=0) # ... 88 more lines ...
Buy Now — $197 Back to Products