jevrecipes

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

FieldTypeNeeded
messagestringRequired
contextstringOptional
minConfidencenumberOptional
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

Fixture only

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

Related recipes