Duplicate charge · billing or technical?
Model input
“Your API timed out during checkout, so I retried. Now I have two charges. Please refund the duplicate.”
Assign intent, ownership, and priority across customer support tickets and internal requests.
Choose an example
Teach a function to send each ticket to the right team.
Step 01
Choose an example, review the proposed output, and annotate the fields that need to change. Your guidance defines the learned rules.
The resolution the customer is requesting.
Team that owns the action the customer needs.
Priority based on business impact, rather than urgent wording.
A short explanation of why this queue owns the resolution.
Route each support ticket to the team responsible for resolving the customer’s issue.
“Your API timed out during checkout, so I retried. Now I have two charges. Please refund the duplicate.”
Sutro can now generalize the rules based on your feedback.
Step 02
Compare models on the same routing examples and choose your cost–quality tradeoff.
Compare models on expert agreement and cost. The interactive chart uses illustrative measurements.
Illustrative sweep · select Value or Best to use that model in your function.
Step 03
Call Sutro Functions like any other software. Swap the model as soon as something more performant is released.
import sutro as so
input_data = {
"text": "“Your API timed out during checkout, so I retried. Now I have two charges. Please refund the duplicate.”"
}
result = so.run_function(
"support-ticket-routing",
input_data,
)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/functions/support-ticket-routing/run" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"text": "“Your API timed out during checkout, so I retried. Now I have two charges. Please refund the duplicate.”"
}
}'import sutro as so
job_id = so.batch_run_function(
name="support-ticket-routing",
data="support_tickets.csv",
)
results = so.await_job_completion(job_id)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/batch-inference" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "support-ticket-routing",
"inputs": [
{
"text": "“Your API timed out during checkout, so I retried. Now I have two charges. Please refund the duplicate.”"
}
]
}'Step 01
Upload sample data, define your output schema, and provide feedback on the hardest cases.
Urgency based on actual impact, rather than emphatic wording.
Who is affected by the reported issue.
Environment where the issue occurs.
Whether a usable workaround is documented.
Identify support tickets needing urgent attention using explicit impact evidence.
URGENT! Please change the color of my dashboard. Nothing is blocked.
Sutro can now generalize the rules based on your feedback.
Step 02
Compare quality and cost on your examples, then choose a model or use Sutro’s default.
Compare models on expert agreement and cost. The interactive chart uses illustrative measurements.
Illustrative sweep · select Value or Best to use that model in your function.
Step 03
Call Sutro Functions like any other software. Swap the model as soon as something more performant is released.
import sutro as so
input_data = {
"text": "URGENT! Please change the color of my dashboard. Nothing is blocked."
}
result = so.run_function(
"urgency-escalation-detection",
input_data,
)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/functions/urgency-escalation-detection/run" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"text": "URGENT! Please change the color of my dashboard. Nothing is blocked."
}
}'import sutro as so
job_id = so.batch_run_function(
name="urgency-escalation-detection",
data="urgency_escalation_detection.csv",
)
results = so.await_job_completion(job_id)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/batch-inference" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "urgency-escalation-detection",
"inputs": [
{
"text": "URGENT! Please change the color of my dashboard. Nothing is blocked."
}
]
}'Step 01
Upload sample data, define your output schema, and provide feedback on the hardest cases.
The action the user is actually requesting.
Whether the action is requested now, already done, or conditional.
Additional explicitly requested actions, excluding hypothetical mentions.
Identify the action a user wants rather than classifying by isolated keywords.
I already canceled my plan. Where can I download my last invoice?
Sutro can now generalize the rules based on your feedback.
Step 02
Compare quality and cost on your examples, then choose a model or use Sutro’s default.
Compare models on expert agreement and cost. The interactive chart uses illustrative measurements.
Illustrative sweep · select Value or Best to use that model in your function.
Step 03
Call Sutro Functions like any other software. Swap the model as soon as something more performant is released.
import sutro as so
input_data = {
"text": "I already canceled my plan. Where can I download my last invoice?"
}
result = so.run_function(
"intent-classification",
input_data,
)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/functions/intent-classification/run" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"text": "I already canceled my plan. Where can I download my last invoice?"
}
}'import sutro as so
job_id = so.batch_run_function(
name="intent-classification",
data="intent_classification.csv",
)
results = so.await_job_completion(job_id)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/batch-inference" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "intent-classification",
"inputs": [
{
"text": "I already canceled my plan. Where can I download my last invoice?"
}
]
}'Step 01
Upload sample data, define your output schema, and provide feedback on the hardest cases.
Owner of the system or action requested.
The operational request that needs handling.
Details needed by the receiving team.
Route internal requests according to the action and system owner.
New hire needs a laptop and access to the company device-management system.
Sutro can now generalize the rules based on your feedback.
Step 02
Compare quality and cost on your examples, then choose a model or use Sutro’s default.
Compare models on expert agreement and cost. The interactive chart uses illustrative measurements.
Illustrative sweep · select Value or Best to use that model in your function.
Step 03
Call Sutro Functions like any other software. Swap the model as soon as something more performant is released.
import sutro as so
input_data = {
"text": "New hire needs a laptop and access to the company device-management system."
}
result = so.run_function(
"internal-request-triage",
input_data,
)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/functions/internal-request-triage/run" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"text": "New hire needs a laptop and access to the company device-management system."
}
}'import sutro as so
job_id = so.batch_run_function(
name="internal-request-triage",
data="internal_request_triage.csv",
)
results = so.await_job_completion(job_id)curl --fail-with-body -X POST "${SUTRO_API_URL%/}/v1/batch-inference" \
-H "Authorization: Key $SUTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "internal-request-triage",
"inputs": [
{
"text": "New hire needs a laptop and access to the company device-management system."
}
]
}'