jevrecipes

Recipe catalog / comparable-fit

Check whether a comparable property fits the subject

Is comparable similar enough to subject in type, size, age, condition, and location wording to support a valuation comparison?

You need to screen candidate comparable sales or rentals against a subject property from their descriptions, so that only plausible comparables reach a valuation model or an appraiser's review.

Explore this recipe interactively ยท Source and implementation guide

Use comparable-fit 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 { comparableFit } from 'jev-recipes/comparable-fit';

const result = await comparableFit({
  "subject": "Single-family ranch, 3 bedrooms, 2 baths, 1,650 sq ft, built 1978, updated kitchen and roof (2019), attached 2-car garage, 0.3-acre lot on a quiet suburban cul-de-sac in Maple Grove.",
  "comparable": "Condominium, 2 bedrooms, 2 baths, 1,100 sq ft, built 2015, 14th floor of a downtown high-rise with concierge, one deeded parking space, HOA dues $610/month.",
  "minConfidence": 0.8
});
console.log(result);

Input contract

FieldTypeNeeded
subjectstringRequired
comparablestringRequired
minConfidencenumberOptional
Full input and result schemas
{
  "input": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
      "subject": {
        "type": "string"
      },
      "comparable": {
        "type": "string"
      },
      "minConfidence": {
        "type": "number",
        "minimum": 0,
        "maximum": 1
      }
    },
    "required": [
      "subject",
      "comparable"
    ]
  },
  "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"
        ]
      },
      "probability": {
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "confidence": {
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "verdict": {
        "type": "string",
        "enum": [
          "comparable",
          "dissimilar"
        ]
      }
    },
    "required": [
      "model",
      "usage",
      "status",
      "probability",
      "confidence",
      "verdict"
    ],
    "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 comparable-fit.

{
  "model": "demo-fixture",
  "usage": {
    "input_tokens": 0,
    "output_tokens": 0
  },
  "status": "ready",
  "probability": 0.04,
  "confidence": 0.96,
  "verdict": "dissimilar"
}

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