690618:1444 237 #02
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
---
|
||||
auto_execution_mode: 0
|
||||
description: Execute OCR & AI Extraction prompt management workflow following ADR-037 3-Step Pipeline (OCR → AI Extract → RAG Prep)
|
||||
---
|
||||
|
||||
# Workflow: speckit.ocr-prompt-management
|
||||
|
||||
This workflow orchestrates the **OCR & AI Extraction prompt management** feature implementation, following the 3-step pipeline pattern defined in ADR-037.
|
||||
|
||||
## Phase 1: Database & Infrastructure Setup
|
||||
|
||||
1. **Database Schema**:
|
||||
- Verify `version` column exists in `ai_prompts` table (delta: `2026-06-15-fix-ai-prompts-columns.sql`)
|
||||
- Seed default OCR system prompt (delta: `2026-06-17-seed-ocr-system-prompt.sql`)
|
||||
- Verify entity has `@VersionColumn()` at `backend/src/modules/ai/prompts/ai-prompts.entity.ts`
|
||||
|
||||
2. **Infrastructure Verification**:
|
||||
- Verify OCR sidecar is running on Desk-5439 (port 8765)
|
||||
- Verify `/embed` endpoint exists in sidecar
|
||||
- Verify environment variables: `OCR_SIDECAR_API_KEY`, `OCR_API_URL`
|
||||
|
||||
## Phase 2: Foundational Services
|
||||
|
||||
1. **Validation Service**:
|
||||
- Extend `ai-prompts.service.ts` `create()` to support `ocr_system` (free-form, no required placeholder)
|
||||
- Verify `{{ocr_text}}` placeholder validation for `ocr_extraction`
|
||||
- Use existing DTOs: `CreateAiPromptDto`, `UpdatePromptNoteDto`, `ContextConfigDto`
|
||||
|
||||
2. **Optimistic Locking**:
|
||||
- Modify `activate()` in `ai-prompts.service.ts` to accept `expectedVersion`
|
||||
- Handle HTTP 409 Conflict when version mismatch occurs
|
||||
- Add retry logic with exponential backoff in frontend
|
||||
|
||||
## Phase 3: User Story 1 - OCR System Prompt Management
|
||||
|
||||
### Backend
|
||||
- Verify `AiPromptsService.create()` supports `ocr_system` (version auto-increment)
|
||||
- Verify `getActive(promptType)` returns active ocr_system with Redis cache (60s)
|
||||
- Verify existing routes: GET `/api/ai/prompts/{promptType}`, POST `/api/ai/prompts/{promptType}`, POST `/api/ai/prompts/{promptType}/{versionNumber}/activate`
|
||||
|
||||
### Frontend
|
||||
- Create `adminAiPromptService` in `frontend/lib/services/admin-ai-prompt.service.ts`
|
||||
- Implement `getPrompts()`, `createPrompt()`, `activatePrompt()` with optimistic locking
|
||||
- Create `PromptManagementTabs` component
|
||||
- Create `OcrPromptTab` component with text editor and version history
|
||||
- Implement "Save New Version" button with validation
|
||||
- Handle 409 Conflict error - show refresh dialog
|
||||
|
||||
### Sidecar Integration
|
||||
- Update `/ocr-upload` endpoint in `specs/04-Infrastructure-OPS/04-00-docker-compose/Desk-5439/ocr-sidecar/app.py`:
|
||||
- Add parameter: `systemPrompt: Optional[str] = Form(default=None)`
|
||||
- Thread `systemPrompt` through `_process_pdf_doc()` → `process_ocr()`
|
||||
- Append system prompt to `messages[0]["content"]` (typhoon OCR single-message format)
|
||||
- Update `sandbox-ocr-engine.service.ts` to fetch active `ocr_system` prompt and send to sidecar
|
||||
|
||||
## Phase 4: User Story 2 - AI Extraction Prompt Management
|
||||
|
||||
### Backend
|
||||
- Verify `ocr_extraction` validation in `create()` ({{ocr_text}} required)
|
||||
- Verify `resolveActive('ocr_extraction', ocrText)` exists
|
||||
- Verify `ai-batch.processor.ts` uses active `ocr_extraction` prompt
|
||||
|
||||
### Frontend
|
||||
- Create `AiExtractionPromptTab` component
|
||||
- Add placeholder helper buttons ({{ocr_text}}, {{master_data_context}})
|
||||
- Show validation error inline if missing required placeholder
|
||||
- Add template preview with syntax highlighting
|
||||
|
||||
## Phase 5: User Story 3 - Separate UI Tabs
|
||||
|
||||
### Frontend UI Polish
|
||||
- Style `PromptManagementTabs` with clear tab indicators
|
||||
- Add tab icons (OCR: eye/scan icon, AI: brain/robot icon)
|
||||
- Show active status badge on each tab
|
||||
- Implement tab state persistence (URL hash or localStorage)
|
||||
- Add warning badge if no active prompt for a type
|
||||
|
||||
## Phase 6: User Story 4 - Full 3-Step Sandbox with RAG Prep
|
||||
|
||||
### Backend (RAG Prep Integration)
|
||||
- Verify `rag_prep_prompt` validates `{{text}}` placeholder
|
||||
- Verify `SandboxRagPrepDto` exists at `backend/src/modules/ai/dto/sandbox-rag-prep.dto.ts`
|
||||
- Extend `ai-batch.processor.ts` `sandbox-rag-prep` job handler
|
||||
- Implement semantic chunking using active `rag_prep_prompt`
|
||||
- Verify sidecar `/embed` endpoint exists
|
||||
- Verify POST `/api/ai/admin/sandbox/rag-prep` exists in AiController
|
||||
- Verify Redis storage for RAG Prep results
|
||||
- Verify GET sandbox job result endpoint (`/api/ai/admin/sandbox/job/:id`)
|
||||
|
||||
### Frontend (3-Step Sandbox UI)
|
||||
- Create `SandboxStepIndicator` component showing 3 steps with status icons
|
||||
- Extend `PromptManagementTabs` with "Sandbox" tab containing 3-step workflow
|
||||
- Create `RagPrepResultPanel` component with chunk list + vector preview
|
||||
- Implement vector preview display (first 5 dimensions: `[0.234, -0.891, ...]`)
|
||||
- Add "Run Step 3 (RAG Prep)" button enabled after Step 2 completes
|
||||
- Display chunk count and embedding status for each chunk
|
||||
- Add "Activate This Version" button visible after all 3 steps complete successfully
|
||||
|
||||
### Integration (Full Pipeline)
|
||||
- Wire Step 2 output (extracted metadata + text) as Step 3 input
|
||||
- Implement sequential step execution (Step 1 → Step 2 → Step 3)
|
||||
- Add pipeline status tracking in Redis
|
||||
|
||||
## Phase 7: Testing & Validation
|
||||
|
||||
### Error Handling (ADR-007)
|
||||
- Add user-friendly error messages for validation errors in frontend
|
||||
- Implement retry logic for 409 Conflict with exponential backoff
|
||||
- Add Toast notifications for success/error states
|
||||
|
||||
### Testing
|
||||
- Write unit tests for `AiPromptValidationService`
|
||||
- Write integration test for optimistic locking conflict scenario
|
||||
- E2E test: Admin creates OCR prompt → activates → runs Sandbox Step 1
|
||||
- E2E test: Full 3-step pipeline - upload PDF → OCR → Extract → RAG Prep
|
||||
- E2E test: Vector preview displays correctly with 5 dimensions
|
||||
- E2E test: Step indicators show correct status for each step
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
/speckit.ocr-prompt-management
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
- **Phase 1**: None (infrastructure setup)
|
||||
- **Phase 2**: Phase 1
|
||||
- **Phase 3**: Phase 2
|
||||
- **Phase 4**: Phase 2 (can run in parallel with Phase 3)
|
||||
- **Phase 5**: Phase 3 + Phase 4
|
||||
- **Phase 6**: Phase 3 + Phase 4
|
||||
- **Phase 7**: Phase 6
|
||||
|
||||
## On Error
|
||||
|
||||
If any phase fails, stop and report:
|
||||
- Which phase failed
|
||||
- The specific task that failed
|
||||
- Suggested remediation (e.g., "Verify OCR sidecar is running before Phase 3")
|
||||
|
||||
## Related ADRs
|
||||
|
||||
- **ADR-009**: Database schema changes (SQL deltas, no TypeORM migrations)
|
||||
- **ADR-016**: Security authentication (RBAC for admin-only endpoints)
|
||||
- **ADR-023/023A**: AI architecture (BullMQ queues, Ollama isolation)
|
||||
- **ADR-037**: 3-Step Pipeline (OCR → AI Extract → RAG Prep)
|
||||
Reference in New Issue
Block a user