semblance-dev/backend/app/services
Vadym Samoilenko 915c81b8f1 Complete phases D–G: quota enforcement, token invalidation, admin writes, backfill
Backend:
- token_version in JWT (bump_token_version, get_token_version on User model);
  jwt_required checks tv claim → 401 on mismatch; login routes embed version
- Quota pre-flight in all 3 LLM public methods (QuotaExceededError bubbles up)
- AI runner catches QuotaExceededError → sets status paused_quota + emits WS event
- Admin routes: POST /users (create), POST /users/<id>/reset-password,
  POST /pricing, GET /focus-groups with aggregated cost; PUT /users/<id>
  now bumps token_version on disable or role change
- backfill_usage.py: idempotent estimated-event generator for historical data,
  tiktoken for GPT models, char/3.8 for Gemini, --dry-run flag

Frontend:
- 402 interceptor dispatches quota_exceeded CustomEvent
- adminApi: createUser, resetPassword, createPricing, listFocusGroups
- UsersTab: New User dialog + Reset Password in edit dialog
- PricingTab: New Price dialog (model, provider, input/output/cached prices)
- FocusGroupsTab: focus groups table sorted by total cost
- Admin.tsx: 4th tab (Focus Groups)
- FocusGroupSession: admin-only cost badge + dismissable quota exceeded banner

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 18:34:48 +01:00
..
ai_moderator_service.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
ai_persona_service.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
ai_runner_service.py changed permissions 2025-12-19 19:26:16 +00:00
autonomous_conversation_controller.py Complete phases D–G: quota enforcement, token invalidation, admin writes, backfill 2026-04-24 18:34:48 +01:00
bulk_persona_export_service.py Migrate task result delivery from WebSocket to HTTP polling 2026-03-23 16:46:58 +00:00
conversation_context_service.py Fix root cause: naive vs aware datetime crash + stuck AI mode indicator 2026-03-23 19:30:04 +00:00
conversation_decision_service.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
conversation_state_manager.py Apply Jintech security audit remediation (sprint 3) — 87/92 findings fixed 2026-03-20 12:51:18 +00:00
customer_data_service.py changed permissions 2025-12-19 19:26:16 +00:00
focus_group_response_service.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
focus_group_service.py Apply Jintech security audit remediation (sprint 3) — 87/92 findings fixed 2026-03-20 12:51:18 +00:00
focus_group_summary_service.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
image_description_service.py Allow document uploads (PDF, DOCX, TXT, etc.) as focus group assets 2026-03-23 17:08:30 +00:00
key_theme_service.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
llm_service.py Complete phases D–G: quota enforcement, token invalidation, admin writes, backfill 2026-04-24 18:34:48 +01:00
llm_usage_context.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
msal_service.py Apply Jintech security audit remediation (sprint 3) — 87/92 findings fixed 2026-03-20 12:51:18 +00:00
persona_export_service.py changed permissions 2025-12-19 19:26:16 +00:00
persona_modification_service.py Add LLM usage tracking infrastructure (Phases A-C) 2026-04-24 18:08:27 +01:00
task_manager.py Migrate task result delivery from WebSocket to HTTP polling 2026-03-23 16:46:58 +00:00