Add multimodel context to market opportunities
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# Ops Market Multimodel Context Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Make Ops market opportunities evaluate and display full multi-model context instead of relying mainly on DEB and median.
|
||||
|
||||
**Architecture:** Keep the existing Ops opportunities API and page. Extend each opportunity row with multi-model source values and bucket-relative counts, then use those counts in the late NO filter so high/low multi-model consensus is preserved for manual review.
|
||||
|
||||
**Tech Stack:** Python FastAPI service code, pytest, Next.js React TypeScript, business state tests.
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Backend Multi-Model Signals
|
||||
|
||||
**Files:**
|
||||
- Modify: `web/services/ops/market_opportunities.py`
|
||||
- Test: `tests/test_ops_market_opportunities.py`
|
||||
|
||||
- [ ] **Step 1: Add tests**
|
||||
|
||||
Add tests asserting opportunities include `model_cluster_sources`, `model_min`, `model_max`, `models_in_bucket`, `models_above_bucket`, `models_below_bucket`, and `models_above_deb`.
|
||||
|
||||
- [ ] **Step 2: Implement source extraction**
|
||||
|
||||
Create helper functions to parse `row["model_cluster_sources"]`, classify model values against a market option, and return counts plus min/max.
|
||||
|
||||
- [ ] **Step 3: Return fields on opportunity rows**
|
||||
|
||||
Include the new fields in every row produced by `build_market_opportunity_rows`.
|
||||
|
||||
- [ ] **Step 4: Verify**
|
||||
|
||||
Run `python -m pytest tests/test_ops_market_opportunities.py -q`.
|
||||
|
||||
### Task 2: Conservative Late NO Filtering
|
||||
|
||||
**Files:**
|
||||
- Modify: `web/services/ops/market_opportunities.py`
|
||||
- Test: `tests/test_ops_market_opportunities.py`
|
||||
|
||||
- [ ] **Step 1: Update tests**
|
||||
|
||||
Change the late NO tests so rows are filtered only when multi-model consensus is inside the target bucket, and preserved when models mostly sit above or below the target bucket.
|
||||
|
||||
- [ ] **Step 2: Implement filtering**
|
||||
|
||||
Pass model relation counts into `_is_late_priced_no_noise`; return `False` when outside-bucket model count is greater than inside-bucket count.
|
||||
|
||||
- [ ] **Step 3: Verify**
|
||||
|
||||
Run `python -m pytest tests/test_ops_market_opportunities.py -q`.
|
||||
|
||||
### Task 3: Frontend Display
|
||||
|
||||
**Files:**
|
||||
- Modify: `frontend/components/ops/market-opportunities/MarketOpportunitiesPageClient.tsx`
|
||||
- Test: `frontend/components/ops/__tests__/opsMarketOpportunities.test.ts`
|
||||
|
||||
- [ ] **Step 1: Add frontend assertions**
|
||||
|
||||
Assert the Ops market opportunities page includes `多模型`, `models_above_bucket`, and `model_cluster_sources`.
|
||||
|
||||
- [ ] **Step 2: Display compact context**
|
||||
|
||||
Add a `多模型` column showing min/max range, in/high/low bucket counts, and compact source values.
|
||||
|
||||
- [ ] **Step 3: Verify**
|
||||
|
||||
Run `cd frontend && npm run test:business` and `cd frontend && npm run typecheck`.
|
||||
|
||||
### Task 4: Final Validation and Deploy
|
||||
|
||||
**Files:**
|
||||
- No new source files.
|
||||
|
||||
- [ ] **Step 1: Run full checks**
|
||||
|
||||
Run `python -m ruff check .`, `python -m pytest`, `cd frontend && npm run test:business`, and `cd frontend && npm run typecheck`.
|
||||
|
||||
- [ ] **Step 2: Commit and push**
|
||||
|
||||
Commit the backend and frontend changes, push `main`, monitor GitHub Actions, and smoke check production.
|
||||
Reference in New Issue
Block a user