437 lines
12 KiB
Markdown
437 lines
12 KiB
Markdown
# Story Writer Backend Migration - Review & Next Steps
|
|
|
|
## ✅ What Was Accomplished
|
|
|
|
### 1. Backend Service Layer (`backend/services/story_writer/`)
|
|
**Status**: ✅ Complete
|
|
|
|
- **`story_service.py`** - Core story generation service
|
|
- Migrated from `ToBeMigrated/ai_writers/ai_story_writer/ai_story_generator.py`
|
|
- Updated imports to use `services.llm_providers.main_text_generation`
|
|
- Added `user_id` parameter for subscription integration
|
|
- Removed Streamlit dependencies
|
|
- Modular methods:
|
|
- `generate_premise()` - Generate story premise
|
|
- `generate_outline()` - Generate story outline
|
|
- `generate_story_start()` - Generate story beginning
|
|
- `continue_story()` - Continue story generation
|
|
- `generate_full_story()` - Complete story generation with iterations
|
|
|
|
**Key Features**:
|
|
- ✅ Subscription support via `main_text_generation`
|
|
- ✅ Supports both Gemini and HuggingFace providers
|
|
- ✅ Proper error handling with HTTPException support
|
|
- ✅ Comprehensive logging
|
|
|
|
### 2. API Layer (`backend/api/story_writer/`)
|
|
**Status**: ✅ Complete
|
|
|
|
- **`router.py`** - RESTful API endpoints
|
|
- Synchronous endpoints: premise, outline, start, continue
|
|
- Asynchronous endpoint: full story generation with task management
|
|
- Task status and result endpoints
|
|
- Cache management endpoints
|
|
- Health check endpoint
|
|
|
|
- **`task_manager.py`** - Async task execution
|
|
- Background task execution
|
|
- Progress tracking (0-100%)
|
|
- Status management (pending, processing, completed, failed)
|
|
- Automatic cleanup of old tasks
|
|
|
|
- **`cache_manager.py`** - Result caching
|
|
- MD5-based cache key generation
|
|
- Cache statistics
|
|
- Cache clearing
|
|
|
|
### 3. Models (`backend/models/story_models.py`)
|
|
**Status**: ✅ Complete
|
|
|
|
- Pydantic models for type-safe API:
|
|
- `StoryGenerationRequest` - Input parameters
|
|
- `StoryPremiseResponse` - Premise generation response
|
|
- `StoryOutlineResponse` - Outline generation response
|
|
- `StoryContentResponse` - Story content response
|
|
- `StoryFullGenerationResponse` - Complete story response
|
|
- `StoryContinueRequest/Response` - Continuation models
|
|
- `TaskStatus` - Task tracking model
|
|
|
|
### 4. Router Registration
|
|
**Status**: ✅ Complete
|
|
|
|
- Added to `alwrity_utils/router_manager.py` in optional routers section
|
|
- Automatic registration on app startup
|
|
- Error handling for graceful failures
|
|
|
|
## 📊 API Endpoints Summary
|
|
|
|
### Synchronous Endpoints
|
|
```
|
|
POST /api/story/generate-premise
|
|
POST /api/story/generate-outline
|
|
POST /api/story/generate-start
|
|
POST /api/story/continue
|
|
```
|
|
|
|
### Asynchronous Endpoints
|
|
```
|
|
POST /api/story/generate-full → Returns task_id
|
|
GET /api/story/task/{task_id}/status
|
|
GET /api/story/task/{task_id}/result
|
|
```
|
|
|
|
### Utility Endpoints
|
|
```
|
|
GET /api/story/health
|
|
GET /api/story/cache/stats
|
|
POST /api/story/cache/clear
|
|
```
|
|
|
|
## 🎯 Next Steps - Implementation Roadmap
|
|
|
|
### Phase 1: Backend Testing & Validation (Priority: High)
|
|
**Estimated Time**: 1-2 days
|
|
|
|
**Tasks**:
|
|
1. **API Testing**
|
|
- [ ] Test all synchronous endpoints with Postman/curl
|
|
- [ ] Test async task flow (generate-full → status → result)
|
|
- [ ] Verify subscription limits work (429 errors)
|
|
- [ ] Test with both Gemini and HuggingFace providers
|
|
- [ ] Test error handling (invalid inputs, API failures)
|
|
|
|
2. **Integration Testing**
|
|
- [ ] Test with real user authentication
|
|
- [ ] Verify usage tracking in database
|
|
- [ ] Test cache functionality
|
|
- [ ] Test task cleanup (old tasks removal)
|
|
|
|
3. **Performance Testing**
|
|
- [ ] Measure response times for each endpoint
|
|
- [ ] Test concurrent requests
|
|
- [ ] Monitor memory usage during long story generation
|
|
|
|
**Deliverables**:
|
|
- API test suite (Postman collection or pytest)
|
|
- Test results document
|
|
- Performance benchmarks
|
|
|
|
---
|
|
|
|
### Phase 2: Frontend Foundation (Priority: High)
|
|
**Estimated Time**: 2-3 days
|
|
|
|
**Tasks**:
|
|
1. **Create Frontend Structure**
|
|
- [ ] Create `frontend/src/components/StoryWriter/` directory
|
|
- [ ] Create `frontend/src/services/storyWriterApi.ts` (API client)
|
|
- [ ] Create `frontend/src/hooks/useStoryWriterState.ts` (state management)
|
|
- [ ] Create `frontend/src/hooks/useStoryWriterPhaseNavigation.ts` (phase navigation)
|
|
|
|
2. **API Service Layer**
|
|
```typescript
|
|
// frontend/src/services/storyWriterApi.ts
|
|
- generatePremise()
|
|
- generateOutline()
|
|
- generateStoryStart()
|
|
- continueStory()
|
|
- generateFullStory() // async with polling
|
|
- getTaskStatus()
|
|
- getTaskResult()
|
|
```
|
|
|
|
3. **State Management Hook**
|
|
```typescript
|
|
// frontend/src/hooks/useStoryWriterState.ts
|
|
- Story parameters (persona, setting, characters, etc.)
|
|
- Premise, outline, story content
|
|
- Generation progress
|
|
- Task management
|
|
```
|
|
|
|
4. **Phase Navigation Hook**
|
|
```typescript
|
|
// Similar to usePhaseNavigation.ts from Blog Writer
|
|
Phases: Setup → Premise → Outline → Writing → Export
|
|
```
|
|
|
|
**Deliverables**:
|
|
- Frontend directory structure
|
|
- API service with TypeScript types
|
|
- State management hooks
|
|
- Phase navigation hook
|
|
|
|
---
|
|
|
|
### Phase 3: UI Components - Core (Priority: High)
|
|
**Estimated Time**: 3-4 days
|
|
|
|
**Tasks**:
|
|
1. **Main Component**
|
|
- [ ] `StoryWriter.tsx` - Main container component
|
|
- [ ] Similar structure to `BlogWriter.tsx`
|
|
|
|
2. **Phase Components**
|
|
- [ ] `StorySetup.tsx` - Phase 1: Input story parameters
|
|
- Persona selector (11 options)
|
|
- Story setting input
|
|
- Characters input
|
|
- Plot elements input
|
|
- Writing style, tone, POV selectors
|
|
- Audience age group, content rating, ending preference
|
|
|
|
- [ ] `StoryPremise.tsx` - Phase 2: Review premise
|
|
- Display generated premise
|
|
- Regenerate option
|
|
- Continue to outline button
|
|
|
|
- [ ] `StoryOutline.tsx` - Phase 3: Review outline
|
|
- Display generated outline
|
|
- Edit/refine option
|
|
- Continue to writing button
|
|
|
|
- [ ] `StoryContent.tsx` - Phase 4: Generated story
|
|
- Display story content
|
|
- Markdown editor for editing
|
|
- Continue generation button
|
|
- Progress indicator for async generation
|
|
|
|
- [ ] `StoryExport.tsx` - Phase 5: Export options
|
|
- Download as text/markdown
|
|
- Copy to clipboard
|
|
- Share options
|
|
|
|
3. **Utility Components**
|
|
- [ ] `HeaderBar.tsx` - Phase navigation header (like Blog Writer)
|
|
- [ ] `PhaseContent.tsx` - Phase content wrapper
|
|
- [ ] `TaskProgressModal.tsx` - Progress modal for async operations
|
|
|
|
**Deliverables**:
|
|
- All phase components
|
|
- Main StoryWriter component
|
|
- Utility components
|
|
|
|
---
|
|
|
|
### Phase 4: CopilotKit Integration (Priority: Medium)
|
|
**Estimated Time**: 2-3 days
|
|
|
|
**Tasks**:
|
|
1. **CopilotKit Actions**
|
|
- [ ] `useStoryWriterCopilotActions.ts` hook
|
|
- [ ] Actions:
|
|
- `generateStoryPremise` - Generate premise
|
|
- `generateStoryOutline` - Generate outline
|
|
- `startStoryWriting` - Begin story generation
|
|
- `continueStoryWriting` - Continue story
|
|
- `refineStoryOutline` - Refine outline
|
|
- `exportStory` - Export story
|
|
|
|
2. **CopilotKit Sidebar**
|
|
- [ ] `WriterCopilotSidebar.tsx` - Suggestions sidebar
|
|
- [ ] Context-aware suggestions based on current phase
|
|
- [ ] Action buttons for common tasks
|
|
|
|
3. **Integration**
|
|
- [ ] Register actions in StoryWriter component
|
|
- [ ] Connect sidebar to component state
|
|
- [ ] Test CopilotKit interactions
|
|
|
|
**Reference**: `frontend/src/components/BlogWriter/BlogWriterUtils/useBlogWriterCopilotActions.ts`
|
|
|
|
**Deliverables**:
|
|
- CopilotKit actions hook
|
|
- CopilotKit sidebar component
|
|
- Integrated with main component
|
|
|
|
---
|
|
|
|
### Phase 5: Polish & Enhancement (Priority: Low)
|
|
**Estimated Time**: 2-3 days
|
|
|
|
**Tasks**:
|
|
1. **Error Handling**
|
|
- [ ] User-friendly error messages
|
|
- [ ] Retry mechanisms
|
|
- [ ] Error boundaries
|
|
|
|
2. **Loading States**
|
|
- [ ] Skeleton loaders
|
|
- [ ] Progress indicators
|
|
- [ ] Optimistic UI updates
|
|
|
|
3. **UX Improvements**
|
|
- [ ] Keyboard shortcuts
|
|
- [ ] Auto-save draft
|
|
- [ ] Undo/redo functionality
|
|
- [ ] Story preview
|
|
|
|
4. **Styling**
|
|
- [ ] Match Blog Writer design system
|
|
- [ ] Responsive design
|
|
- [ ] Dark mode support (if applicable)
|
|
|
|
**Deliverables**:
|
|
- Polished UI/UX
|
|
- Error handling improvements
|
|
- Loading states
|
|
|
|
---
|
|
|
|
### Phase 6: Illustration Support (Optional - Future)
|
|
**Estimated Time**: 3-4 days
|
|
|
|
**Tasks**:
|
|
1. **Backend Migration**
|
|
- [ ] Migrate `story_illustrator.py` to backend service
|
|
- [ ] Create illustration API endpoints
|
|
- [ ] Integrate with image generation API
|
|
|
|
2. **Frontend Integration**
|
|
- [ ] Add illustration phase
|
|
- [ ] Illustration generation UI
|
|
- [ ] Preview and download illustrations
|
|
|
|
**Note**: Defer to Phase 2 if core story generation is priority
|
|
|
|
---
|
|
|
|
## 🚀 Quick Start Guide
|
|
|
|
### Testing Backend API
|
|
|
|
```bash
|
|
# Health check
|
|
curl http://localhost:8000/api/story/health
|
|
|
|
# Generate premise (requires auth token)
|
|
curl -X POST http://localhost:8000/api/story/generate-premise \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"persona": "Award-Winning Science Fiction Author",
|
|
"story_setting": "A futuristic city in 2150",
|
|
"character_input": "John, a brave explorer",
|
|
"plot_elements": "The hero's journey",
|
|
"writing_style": "Formal",
|
|
"story_tone": "Suspenseful",
|
|
"narrative_pov": "Third Person Limited",
|
|
"audience_age_group": "Adults",
|
|
"content_rating": "PG-13",
|
|
"ending_preference": "Happy"
|
|
}'
|
|
```
|
|
|
|
### Frontend Development Order
|
|
|
|
1. **Start with API Service** (`storyWriterApi.ts`)
|
|
- Define all API calls
|
|
- Add TypeScript types
|
|
- Test with mock data
|
|
|
|
2. **Build State Management** (`useStoryWriterState.ts`)
|
|
- Define state structure
|
|
- Add state setters/getters
|
|
- Test state updates
|
|
|
|
3. **Create Phase Navigation** (`useStoryWriterPhaseNavigation.ts`)
|
|
- Define phases
|
|
- Add navigation logic
|
|
- Test phase transitions
|
|
|
|
4. **Build Components** (Start with Setup phase)
|
|
- StorySetup component
|
|
- Test form submission
|
|
- Connect to API
|
|
|
|
5. **Add Remaining Phases**
|
|
- Premise → Outline → Writing → Export
|
|
- Test each phase independently
|
|
|
|
6. **Integrate CopilotKit**
|
|
- Add actions
|
|
- Connect sidebar
|
|
- Test interactions
|
|
|
|
---
|
|
|
|
## 📝 Key Decisions Made
|
|
|
|
1. **Modular Structure**: Follows Blog Writer patterns for consistency
|
|
2. **Async Task Pattern**: Long-running operations use task management with polling
|
|
3. **Subscription Integration**: Automatic via `main_text_generation`
|
|
4. **Provider Support**: Works with both Gemini and HuggingFace automatically
|
|
5. **Caching**: Results cached to avoid duplicate generations
|
|
6. **Error Handling**: Comprehensive with HTTPException support
|
|
|
|
---
|
|
|
|
## ⚠️ Important Notes
|
|
|
|
1. **Authentication Required**: All endpoints require valid Clerk authentication token
|
|
2. **Subscription Limits**: Will return 429 if limits exceeded
|
|
3. **Long Operations**: Full story generation can take several minutes - use async pattern
|
|
4. **Task Cleanup**: Tasks older than 1 hour are automatically cleaned up
|
|
5. **Cache Keys**: Based on request parameters - identical requests return cached results
|
|
|
|
---
|
|
|
|
## 🎯 Recommended Immediate Next Steps
|
|
|
|
1. **Test Backend API** (Today)
|
|
- Verify all endpoints work
|
|
- Test subscription integration
|
|
- Document any issues
|
|
|
|
2. **Create Frontend API Service** (Day 1-2)
|
|
- Set up TypeScript types
|
|
- Create API client functions
|
|
- Test with Postman/curl responses
|
|
|
|
3. **Build StorySetup Component** (Day 2-3)
|
|
- Create form with all parameters
|
|
- Connect to API
|
|
- Test premise generation
|
|
|
|
4. **Add Phase Navigation** (Day 3-4)
|
|
- Implement phase hook
|
|
- Add HeaderBar component
|
|
- Test phase transitions
|
|
|
|
5. **Complete Remaining Phases** (Day 4-7)
|
|
- Build each phase component
|
|
- Connect to API
|
|
- Test full flow
|
|
|
|
---
|
|
|
|
## 📚 Reference Files
|
|
|
|
- **Blog Writer** (Reference implementation):
|
|
- `frontend/src/components/BlogWriter/BlogWriter.tsx`
|
|
- `frontend/src/hooks/usePhaseNavigation.ts`
|
|
- `frontend/src/components/BlogWriter/BlogWriterUtils/useBlogWriterCopilotActions.ts`
|
|
|
|
- **Backend Patterns**:
|
|
- `backend/api/blog_writer/router.py`
|
|
- `backend/api/blog_writer/task_manager.py`
|
|
- `backend/services/blog_writer/blog_service.py`
|
|
|
|
---
|
|
|
|
## ✅ Success Criteria
|
|
|
|
- [ ] All backend endpoints tested and working
|
|
- [ ] Frontend API service complete
|
|
- [ ] All phase components built
|
|
- [ ] Phase navigation working
|
|
- [ ] CopilotKit integrated
|
|
- [ ] Full story generation flow works end-to-end
|
|
- [ ] Error handling comprehensive
|
|
- [ ] Loading states implemented
|
|
- [ ] UI matches Blog Writer design
|
|
|
|
---
|
|
|
|
**Ready to proceed with Phase 1 (Backend Testing) or Phase 2 (Frontend Foundation)?**
|