Recipe catalog / trip-purpose-kind
Identify the purpose of a trip
What purpose does the traveler's message express for the trip: business, leisure, a family visit, medical care, relocation, or attending an event?
A travel assistant needs to route a traveler's message to the right search defaults, policy, or recommendations based on why they are traveling, using only what the message and any prior context say.
Explore this recipe interactively ยท Source and implementation guide
Use trip-purpose-kind in TypeScript
Install with npm install jev-recipes. Requires Node.js 22.9 or newer and ES modules. Set TYPESAFE_API_KEY in your server environment for live calls, which send input to TypeSafe and use API quota. See the installation guide.
import { tripPurposeKind } from 'jev-recipes/trip-purpose-kind';
const result = await tripPurposeKind({
"message": "We are moving to Lisbon for good at the end of October. My partner's job transfers her there permanently and the kids start school in January. I need one-way flights for the four of us and somewhere to stay for the first three weeks until our long-term lease begins on 20 November.",
"context": "Traveler previously asked this assistant about shipping household goods overseas.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| message | string | Required |
| context | string | Optional |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"message": {
"type": "string"
},
"context": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"message"
]
},
"result": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"model": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"input_tokens",
"output_tokens"
],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"business",
"leisure",
"family_visit",
"medical",
"relocation",
"event",
"unclear"
]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"probabilities": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"business",
"leisure",
"family_visit",
"medical",
"relocation",
"event",
"unclear"
]
},
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"required": [
"business",
"leisure",
"family_visit",
"medical",
"relocation",
"event",
"unclear"
]
}
},
"required": [
"model",
"usage",
"status",
"verdict",
"confidence",
"probabilities"
],
"additionalProperties": false
}
}Saved example result
This hand-authored response demonstrates the contract. It is not a model accuracy measurement. Run it without an API key: npx jev-recipes demo trip-purpose-kind.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"verdict": "relocation",
"confidence": 0.9,
"probabilities": {
"business": 0.02,
"leisure": 0.01,
"family_visit": 0.02,
"medical": 0.01,
"relocation": 0.9,
"event": 0.01,
"unclear": 0.03
}
}
Evaluation evidence
No verified live accuracy measurement is available. Evaluate representative cases before using this decision in your workflow.
Use the evaluation guide to measure this decision on your own labeled cases.
Limitations
- Names the primary purpose the wording expresses. Mixed trips return the dominant purpose or unclear; it does not split a trip into segments.
- Does not verify the stated purpose or infer one the traveler did not express. Corporate travel policy and eligibility decisions belong in application code.
Related recipes
- turn-intent: Use turn-intent to classify what a message is doing conversationally, such as requesting or correcting, rather than why the person is traveling.
- buying-intent: Use buying-intent to judge how close the traveler is to booking; this recipe identifies only the reason for the trip.