Skip to main content
🔌
Any model API+Stompy

Change the model. Keep the record.

The model is a choice per task. What you decided should not depend on it.

The Problem

When you call a model API directly, nothing remembers the project. Every request carries whatever you put in it.

Teams solve that by pasting rules into system prompts. The prompts differ by provider, and when you switch models, the rules do not move with you.

How Stompy Helps

Keep the rules in Stompy and read them before the call. The call can go to any provider: Vercel AI SDK, the Anthropic or OpenAI APIs, Groq, Together AI, Replicate. The record does not know or care.

Switching a model for cost or fit becomes a configuration change rather than a migration, because nothing was stored inside the old one.

A small model is often short of context rather than capability. In our own benchmarks, Haiku 4.5 completed 0 of 40 tasks without the record and 39 of 40 with it. That is one benchmark on one kind of work; the details are on the deep dive page.

Integration Walkthrough

1

Read the record before the call

The same two functions work whichever provider you call. A project API key is minted by the project's owner while signed in, and works for that one project only. Read the project's own contexts and search with it; managing the project still needs a signed-in user.

import os
import httpx
BASE = "https://api.stompy.ai/api/v1/projects/my-project"
HEADERS = {"Authorization": f"Bearer {os.environ['STOMPY_PROJECT_KEY']}"}
def lock(topic: str, content: str) -> dict:
"""Keep a decision. Only called when the person asked for it."""
r = httpx.post(f"{BASE}/contexts", headers=HEADERS,
json={"topic": topic, "content": content})
r.raise_for_status()
return r.json()
def search(query: str) -> dict:
"""Find what the project already holds, by meaning."""
r = httpx.get(f"{BASE}/search", headers=HEADERS, params={"query": query})
r.raise_for_status()
return r.json()
decisions = search("how we handle refunds")
prompt = f"Project decisions:\n{decisions}\n\nTask: ..."
reply = call_model(prompt) # any provider's client
2

Keep a result when you choose to

Lock only what you want to keep, with its reason.

lock("refund_exception_rule", "Rule: ... Why: ... Decided: ...")

What You Get

  • Rules live in one record, not in a different prompt per provider
  • Switching models is a configuration change, not a migration
  • A smaller model can work from the same decisions as a larger one
  • Only what you lock is kept

Start your own record

Join the waitlist and we will tell you when your place is ready.