Travel · Plexe product, built for a hotel marketplace · In production

Room mapping for a hotel marketplace, live and watched for drift.

A hotel marketplace receives the same rooms from many suppliers, and each supplier names them differently. Plexe built the room-mapping model that groups those names hotel by hotel, a gateway and developer portal in front of it at sandbox.plexe.ai, and a monitor that tracks drift and purity against the incumbent mapping vendor. The API runs in production; batch mapping for whole catalogues is still a bounded pilot.

600
Room names per request
1,000
Hotels per batch job (pilot)
~32,000
Production room names in the regression corpus
7 days
Cache lifetime

How it fits together

  1. Supplier feeds
    one hotel's room names and rates
  2. Gateway
    sandbox.plexe.ai, tenant keys
  3. Room-mapping model
    canonical keys, embeddings fallback
  4. Grouped rooms
    merged content, per supplier
  5. Monitor
    drift and purity vs baseline

The challenge

  • Suppliers send the same room under different names
  • A wrong merge puts two different rooms under one listing
  • A fix for one hotel's names could break others
  • Quality had to hold up against the incumbent mapping vendor

What we built

  • One endpoint that groups up to 600 room names for a hotel per call
  • Partner feedback that stops a reported wrong merge from recurring
  • A portal with tenant keys, playground, request log and review queue
  • A monitor for drift and purity, checked against a deploy-day baseline

What it is for

Room mapping decides which supplier rates belong to the same physical room. A hotel sold through several suppliers arrives as many names for a few rooms, with different wording, bed descriptions and views. If the names are not grouped, a marketplace shows the same room several times; if they are grouped too eagerly, it promises a room the guest will not get. The monitor tracks exactly those two failures, as under-promise and over-promise, alongside the purity of each group.

How it works

A tenant sends one hotel's rates to a single endpoint, up to 600 per request, in standard or consolidated mode. The model groups on the room name; a strict merge policy also reads beds, view and description before joining two rates. Each group comes back with the suppliers' images, descriptions, amenities and occupancy merged and attributed, plus a policy version, so any result can be traced to the rules that produced it.

Partners report a wrong merge through a feedback endpoint. The report becomes a cannot-link applied on every later call for that key and hotel, so the same mistake does not come back. Uncertain results go to a low-confidence review queue, which exports model-proposed and human-approved labels separately. In production the model maps names with a deterministic canonical-key vocabulary and an embeddings fallback; the language model was taken out of the hot path.

Watching it in production

A separate monitor watches the marketplace's production model. A health check reads the last six hours of inference logs from AWS CloudWatch, compares them with a baseline taken on deploy day, raises drift alerts and lists room-name patterns the model has not seen before. A dashboard shows drift, group purity, over-promise and under-promise, and sets Plexe's groupings beside those of the incumbent mapping vendor.

Fixes follow a written runbook: classify the gap, measure its blast radius across a corpus of about 32,000 production room names, bump the model version, deploy, verify, and update the watch. Results are cached in S3 for seven days, keyed by the hotel and its set of room names, so a supplier that changes its names gets a fresh mapping rather than a stale one.

Where it stands

The API and portal are live in production at sandbox.plexe.ai, with per-tenant quotas, an attribute guard, version pins for rollback and an uptime probe every ten minutes. Each release is judged on live traffic by counting the wrong merges it removes and the false splits it introduces, and the release notes publish both numbers.

Batch mapping runs as a bounded pilot: up to 1,000 hotels or 32 MiB per job, results kept for seven days, and a resumable client for larger catalogues. Tenants submit whole hotels, never one hotel split by supplier, and each accepted hotel counts once against the daily quota. The pilot claims no accuracy figure yet.

Under the hood

Stack

  • Python 3.12
  • FastAPI
  • SQLite
  • OpenAPI 3.1
  • AWS Lambda
  • AWS CloudWatch
  • Amazon S3
  • Next.js

More in Travel