Spaces:
Running
Running
Commit History
-
feat(corpus): CAMEL as a built-in example corpus [spec 0010]
PI request from 2026-08-19: make the lab's CAMEL corpus the example data on the site so visitors can try CCR without uploading anything. Corpus details from Aliah 2026-09-06. Step 1 now offers an example corpus above the upload control. One click loads it, selects the declared text column, and the run proceeds through the normal ingest path, so nothing downstream changes. The citation and a link to the full dataset sit on the card, and a run on an example writes a corpus_source block into its metadata carrying the citation, source URL and preprocessing note: results produced on someone else's corpus have to stay attributable in the same file as the scores. Ships a 999-text SAMPLE rather than the full corpus, because the full one cannot be the bundled default: 57,174 rows exceeds CCR_MAX_ROWS (50,000 on both deployments) so ingest would refuse it outright, 38 MB against a 156 KB sample_data would ride in the Docker image and the Space repo, and a demo has to finish in seconds on 2 vCP…3a1d713
-
fix(privacy): scope custom constructs to their creator, add delete [spec 0008]
A PhD student reported seeing custom constructs on the public site that they had not created, with no way to remove them. Construct had no owner column at all, so every custom construct anyone typed was returned to every visitor by GET /api/constructs - listed, with some irony, under a picker heading reading "My custom constructs". This is the projects listing leak (049074a) one table over: that fix taught _visible_owners the right rule, but constructs had no ownership concept to correct. Construct gains owner_user_id, mirroring Project, and the listing applies the same rule: seeds are public, a signed-in user sees only their own custom constructs, anonymous ones stay in the shared anonymous bucket. Both columns are additive with scalar defaults, so auto_migrate_sqlite adds them to the deployed databases and existing constructs become anonymous - which removes them from every signed-in user's picker on upgrade, without a manual cleanup. Deletion is a confirmation dialog in the picker…3594eb6
-
feat(scoring): anchor vectors (bipolar constructs) [spec 0006]
Score texts along the axis between a target construct and a contrasting "opposite" construct: AV = target_centroid - opposite_centroid, anchor score = cosine(text, AV) (default) or dot(text, AV). Because embeddings are L2-normalized, a pole's CCR score (mean of per-item cosines) equals text . centroid, so the dot score is exactly target_score - opposite_score and the export is self-checking. - engine: run_ccr_anchored() (per-pole sims/scores + anchor score + metadata), reuses the doc-embedding cache; degenerate poles flagged. - data model: Job.opposite_construct_id + similarity_metric (additive columns). - runner: anchored export columns under output_schema_version 1.2, bipolar summary, both construct snapshots + scoring block in metadata, ANCHOR_DEGENERATE_POLES warning. - API: POST /api/jobs opposite_construct_id + similarity_metric, validated (single target, distinct poles, cosine|dot); JobOut echoes anchored fields. - reproduction script: anchored variant embeds both item …f341328
-
feat: LLM-generated construct items (design note ITEM_GENERATION.md)
Draft questionnaire items for a construct from its name + explanation, for use as CCR item sets when no validated scale exists (PI idea 2026-07-31; decisions 2026-08-05: positively-keyed only, signed-in only, PI-approved prompt v1 and cautionary wording). - POST /api/constructs/generate-items: preview-only into the existing review-and-save flow; 20/day per-user cap (generation_events table) - Providers: Groq free tier (llama-3.3-70b, interim) / Anthropic Haiku (target once billing lands); auto-selected from which key is set - Provenance: Construct.generation_json -> ai_generated in the API, source_type llm_generated + cautionary note in run-metadata snapshots - UI: draft-with-AI section in the custom-construct form (library name-match warning), AI-generated badges in picker/selection/results - Live smoke test: scripts/smoke_test_generation.py (Groq verified)1a28176
-
feat: Implement multi-construct functionality in CCR analysis
- Updated frontend components to support selection of multiple constructs in the ConstructPicker. - Modified Workspace to handle an array of construct IDs instead of a single ID. - Enhanced ResultsView to display results for multiple constructs, including a correlation matrix. - Added tests for multi-construct runs to ensure correct behavior and output. - Updated styles to accommodate new UI elements for multi-construct selection and display. - Adjusted metadata handling to reflect changes in construct selection and results.a685524
-
Refactor admin page to include collapsible sections and enhance invite link management
- Added a collapsible Section component to improve layout and readability of the AdminPage. - Integrated invite link management, allowing admins to view, copy, and revoke invite links. - Updated tests to verify invite link functionality, including status checks and revocation behavior. - Enhanced UI elements for better user experience, including status indicators for invites and improved error handling.5ad96fc -
Four-tier access model: self-governing admin, pre-login access, audit trail
PI decisions 2026-07-22: - Roles: pi | maintainer | lab | external (legacy "member" reads as external). Lab members and above: unlimited saved runs. - PI role holds escalation rights in-app (grant/revoke staff, act on staff accounts, audit view); ADMIN_EMAILS is bootstrap + break-glass only. Maintainers get the operational surface. Nobody can change their own role. - Construct verification is maintainer-only (the RA's job); PI/admin keep a read-only queue. - Access before sign-in: email-bound pre-assigned roles (staff-capable, claimed on first password/Google sign-in) and signed 7-day invite links (lab/external only, ?invite= signup flow). - Append-only admin_audit table records every admin action; visible to PI/env admins. - Docs split: /guide = navigate-and-test; new /product page = access model + capability matrix + architecture (moved from guide).bfb6467
-
Admin page v1: user roles (lab tier), password resets, failed-run requeue, verification queue
Synced from lab mainline. /admin gated by ADMIN_EMAILS env allowlist. Lab-role accounts get unlimited saved runs (replaces the global env hack). 72 tests passing.b633038
-
Sync platform from lab mainline: dev instance ready to deploy
Full feature set: accounts (email/password + feature-flagged Google via Supabase PKCE), anonymous tiers (3 runs/day, delete-after-analysis, 24h purge), saved-run cap, construct upload from CSV/XLSX, structured warnings + language detection, model registry (MiniLM/E5), per-run reproduction scripts, corpus-embedding cache, storage interface (local/ R2), sample-data test kit, MANUAL_TESTING.md. Rights guard: only the 5 original seed constructs ship in this public repo; the imported lab collection stays out pending the redistribution decision. HF remote URL detokenized. 64 tests passing.4b09d2d
-
CCR Platform: web platform for Contextualized Construct Representations
Upload a corpus, select or define a validated psychological construct, run CCR analysis with locally-hosted sentence embeddings, inspect per-item loadings and score distributions, export results with a reproducibility record. - FastAPI backend, SQLite, worker-queue jobs with orphan recovery - React dashboard (prebuilt; no Node needed to run) - Tolerant corpus ingestion (encodings, delimiters, caps, warnings) - Seeded construct library with citations; custom constructs - 17 tests via a deterministic embedding backend (no ML deps needed) - Docker deploy for Hugging Face Spaces / Cloud Rund69ace5