Today we’re launching Sage2: extraction and streaming decisions for software that needs to act on human language.
A customer tells your agent what they want. Your application needs the details to find an offer, a decision about what to do next, and a way to keep both current when the customer changes their mind. Sage2 gives developers those building blocks.
Words → Data
“I want a midsize SUV for up to $450 a month.”
Use the extraction API
curl https://sage.levanto.ai/v1/extract \
-H "Authorization: Bearer $SAGE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"content": "I want a midsize SUV for up to $450 a month.",
"extract": {
"vehicle": {
"type": "text",
"definition": "the vehicle the customer wants"
},
"monthly_limit": {
"type": "money",
"definition": "the most the customer will pay per month"
},
"term": {
"type": "duration",
"definition": "the loan term the customer asks for"
}
}
}'In this example, the customer wants a midsize SUV for up to $450 a month. Extraction supplies the vehicle and budget. The loan term returns null because the customer has not specified one. Add “over 60 months” and the term becomes P60M, an ISO 8601 duration your code can use.
Define the fields your application needs. Sage2 returns typed values, the text they came from, and a probability for each result. It supports text, numbers, money, dates, times, and durations. Ask for one value or every matching mention.
Each extracted value is linked to its position in the input. Your application can inspect the source, check the result, and ask for anything still missing before calling a tool. Explore the extraction API.
Streaming decisions are faster
Has the customer accepted the offer and asked for a quote?
Use the streaming API
// Connect from your server to wss://sage.levanto.ai/v1/stream
// Authenticate with Authorization: Bearer $SAGE_API_KEY
// Then send this JSON frame:
{
"type": "start",
"questions": [
{
"id": "agreed",
"kind": "yesno",
"instructions": "Has the customer explicitly accepted the current offer and asked for a quote?"
}
],
"emit": "all"
}An answer can change while a conversation is still happening. Open a streaming session, define your questions, and append new text as it arrives. Sage keeps the accumulated context, so your client only sends what is new.
Here, the question is whether the customer has accepted the current offer and asked for a quote. An offer alone is not acceptance. An objection keeps the answer at “no.” When the customer accepts the revised offer, the answer becomes “yes.”
Sessions support up to 32 questions and 16,384 tokens of context and questions. Read the streaming reference.
Building with new bricks
Vehicle, budget, term
Has the customer agreed?
Your code prepares the quote
Extraction and streaming decisions are separate API operations that work together in your application. Extract the customer’s requirements, search eligible offers, and keep checking whether they want to proceed. When the answer changes, your code can prepare the quote.
Your language model responds. Sage supplies the fields and the decisions. Your application validates the offer and executes the next step. The same pattern works for support requests, document processing, and agent tool selection.
Sage2 also supports reasoning, web grounding, and vision in beta.
Start building
Extraction and streaming decisions are available today with your existing Sage API key. Try your own inputs in the playground, or copy the examples above into your integration.
Start with one workflow. Define its fields and questions, then evaluate the results on representative inputs before connecting them to automated actions.

