Skip to content

feat(models): support AI map edit jobs (PPT-2832) - #334

Draft
camreeves wants to merge 4 commits into
masterfrom
PPT-2832-ai-map-review
Draft

camreeves wants to merge 4 commits into
masterfrom
PPT-2832-ai-map-review

Conversation

@camreeves

@camreeves camreeves commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Add MAP_EDIT jobs, an optional provider text model and Anthropic provider support for the Concierge map editor. Keep image and map quota/usage totals separable by job kind.

Includes additive migrations for the column and enum constraints. The API draft depends on this branch. Draft for review and end-to-end testing; do not merge independently of the API rollout.

Validation: branch migrations applied on the isolated local API database; 57 focused API adapter/prompt/controller specs pass against these models. Five browser map-edit comparisons completed with booking IDs preserved. Focused model specs pass: 29 examples against fresh branch migrations. An existing random fixture-name collision was made deterministic.

Companion API: PlaceOS/rest-api#453
Frontend: PlaceOS/user-interfaces#570

Companion drafts: Frontend #570, API #453, Models #334.

camreeves and others added 4 commits October 12, 2026 19:05
PPT-2833. The signage AI provider rows will also serve AI map editing in
Concierge, which calls a text/vision model rather than an image model, so a
row gains a nullable text_model column (nil means the adapter's default).
Map edits reuse the job table as a third kind, MAP_EDIT, which the kind CHECK
now admits; one vendor call per job, so the quota unit stays "candidates".

sum_candidates and sum_candidates_for_authority take an optional kind so the
map quotas are counted apart from the image quotas; usage is grouped by kind
as well and UsageRow carries it, with an optional kind filter for the map
usage route. An index on (kind, created_at) serves both.

Migration 20261014100500000, numbered above the newest merged migration
(20261013100500000); renumber before merging if another lands first.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`sum_candidates`, `sum_candidates_for_authority` and `usage` take a kind,
a list of kinds or nil. The image quota in rest-api asks for both image
kinds at once, which a single kind could not express without two queries.
The IN clause is built with one placeholder per label; nil still sums
every kind, so the existing call sites are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Provider rows may point at Anthropic: the check constraint takes the new
value and the enum answers anthropic?.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: enhancement new feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant