feat(inference): S7 Call 1/Call 2 + prompt revision REST + test-inference + Generate text UI

- backend/inference.py: prompt seed (rev 0) + append-only revision REST
  (POST /prompts/{call}/revisions, /activate, GET; METADATA-105/106). Call 1 vision
  classification (1024px processed photos + synced taxonomy, 0.7 confidence gate,
  METADATA-35/40/45), Call 2 long description (user-triggered, METADATA-55/60/65),
  inference_log per call (METADATA-66), inference-off server_description (METADATA-70),
  test-inference probe (SETTINGS-45). Stdlib urllib, no new deps.
- frontend: create/inference/GenerateText.svelte (control visible only when content
  enabled + endpoint reachable, METADATA-110; Call 2 + Call 1 buttons) + dev toggle.
- tests: 6 inference tests (seed+revision, call1 gate, call2 stores desc, off->409,
  server desc, test-inference unconfigured).

Verified: pytest 54 passed; gates exit 0; npm build ok.
This commit is contained in:
2026-09-19 17:04:01 -07:00
parent 5e03f45660
commit 8a8a89ed3e
5 changed files with 604 additions and 0 deletions
+6
View File
@@ -14,6 +14,7 @@ import SlabList from './create/slabs/SlabList.svelte';
import PhotoAttach from './create/photos/PhotoAttach.svelte';
import Review from './create/review/Review.svelte';
import Publish from './create/publish/Publish.svelte';
import GenerateText from './create/inference/GenerateText.svelte';
const gate = typeof window !== 'undefined' ? supported() : 'window unavailable';
const session: CaptureSession = createCaptureSession();
@@ -26,6 +27,7 @@ import Publish from './create/publish/Publish.svelte';
let showPhotos = false;
let showReview = false;
let showPublish = false;
let showGenerate = false;
const unsubCap = session.capture.subscribe((c) => {
cap = c;
@@ -104,6 +106,7 @@ import Publish from './create/publish/Publish.svelte';
<button on:click={() => (showPhotos = !showPhotos)}>Photos (dev)</button>
<button on:click={() => (showReview = !showReview)}>Review (dev)</button>
<button on:click={() => (showPublish = !showPublish)}>Publish (dev)</button>
<button on:click={() => (showGenerate = !showGenerate)}>Generate (dev)</button>
</div>
{#if showSettings}
<Settings />
@@ -120,6 +123,9 @@ import Publish from './create/publish/Publish.svelte';
{#if showPublish}
<Publish />
{/if}
{#if showGenerate}
<GenerateText />
{/if}
</main>
{/if}