# Story 6.2: Develop Natural Language Processing System ## Story Information - **Epic/Task**: Task 6 - Develop AI Integration Layer - **Story Number**: 6.2 - **Title**: Develop Natural Language Processing System - **Status**: Ready - **Complexity**: High - **Priority**: Medium - **Dependencies**: Task 6.1 (completed) ## Story Statement As the Directus Task Management system, I need a comprehensive Natural Language Processing system that can parse and understand complex task descriptions, extract structured information, identify task types and priorities, and generate appropriate task metadata so that users can create tasks using natural language input without manual structuring. ## Acceptance Criteria 1. [ ] NLP parser can extract task title, description, and metadata from natural language input 2. [ ] System identifies task priority levels from contextual cues (urgent, ASAP, high priority, etc.) 3. [ ] Deadline and time estimation extraction works with various date/time formats 4. [ ] Task type classification achieves 85% accuracy (feature, bug, improvement, etc.) 5. [ ] Dependency detection identifies related tasks from natural language mentions 6. [ ] Named entity recognition extracts people, projects, and technologies 7. [ ] Sentiment analysis determines task urgency and importance 8. [ ] System handles multi-language input (at least English and one other language) 9. [ ] Unit tests achieve 80% coverage for NLP components 10. [ ] Integration tests validate end-to-end NLP workflows ## Dev Notes ### Architecture Context References - **[Source: Story 6.1]** - OpenAI and LangChain services already implemented - **[Source: architecture.md#AI Integration]** - NLP requirements for task creation - **[Source: prd.md#Natural Language Processing]** - User requirements for NLP features ### Previous Story Insights - Story 6.1 established OpenAI GPT-4-turbo and LangChain.js integration - AI Task Service (`src/services/ai/ai-task.service.ts`) provides foundation - Token usage tracking and caching already implemented - Rate limiting infrastructure in place ### Technical Components **NLP Pipeline Architecture**: ```typescript interface NLPPipeline { // Input processing preprocessor: TextPreprocessor; // Core NLP stages tokenizer: Tokenizer; parser: SyntacticParser; extractor: EntityExtractor; classifier: TaskClassifier; // Output generation structuredDataGenerator: StructuredDataGenerator; validationEngine: ValidationEngine; } ``` **Key Entities to Extract**: - Task title and description - Priority (critical, high, medium, low) - Deadlines (absolute dates, relative dates, recurring) - Estimated hours/story points - Assignees and mentions - Dependencies and blockers - Tags and labels - Acceptance criteria ### File Locations Based on existing project structure: - **NLP Services**: `src/services/nlp/` - NLP processing services - **Parsers**: `src/services/nlp/parsers/` - Specific parsers - **Extractors**: `src/services/nlp/extractors/` - Entity extractors - **Classifiers**: `src/services/nlp/classifiers/` - Task classifiers - **Tests**: `tests/services/nlp/` - NLP service tests ### Technical Constraints - Must integrate with existing OpenAI and LangChain services - Maintain compatibility with existing AI Task Service - Use TypeScript with decorators pattern - Leverage GPT-4-turbo for complex understanding - Implement caching for common patterns - Handle rate limiting gracefully ### Testing Requirements - Unit tests for each NLP component - Integration tests with AI services - Performance tests for parsing speed - Accuracy tests for classification - Multi-language support tests - Edge case handling (malformed input, ambiguous text) ## Tasks / Subtasks ### Task 1: Set up NLP Infrastructure (AC: 1) - [x] Create `src/services/nlp/nlp.service.ts` base service - [x] Implement text preprocessing utilities - [x] Set up NLP configuration with environment variables - [x] Create base interfaces and types for NLP components - [x] Add NLP-specific error handling ### Task 2: Implement Text Parser and Tokenizer (AC: 1, 2) - [x] Create `src/services/nlp/parsers/text-parser.service.ts` - [x] Implement sentence segmentation and tokenization - [x] Add part-of-speech tagging using OpenAI - [x] Create syntactic parsing for complex sentences - [x] Implement context preservation for multi-sentence input ### Task 3: Build Entity Extraction System (AC: 1, 3, 5, 6) - [x] Create `src/services/nlp/extractors/entity-extractor.service.ts` - [x] Implement date/time extraction with Luxon integration - [x] Add person/assignee extraction using NER - [x] Create project and technology identification - [x] Implement dependency and blocker detection ### Task 4: Develop Task Classification System (AC: 2, 4, 7) - [x] Create `src/services/nlp/classifiers/task-classifier.service.ts` - [x] Implement priority level detection from context - [x] Add task type classification (feature, bug, etc.) - [x] Create sentiment analysis for urgency detection - [x] Implement confidence scoring for classifications ### Task 5: Create Structured Data Generator (AC: 1) - [x] Create `src/services/nlp/generators/structured-data.service.ts` - [x] Implement task object generation from extracted entities - [x] Add validation and normalization logic - [x] Create fallback mechanisms for missing data - [x] Implement data enrichment using context ### Task 6: Add Multi-language Support (AC: 8) - [x] Implement language detection service - [x] Add translation layer using OpenAI - [x] Create language-specific parsing rules - [x] Implement locale-aware date/time parsing - [x] Add support for at least one non-English language (supports 8 languages) ### Task 7: Integrate with AI Task Service (AC: 1-7) - [x] Connect NLP pipeline to existing AI Task Service - [x] Update `ai-task.service.ts` to use NLP pipeline - [x] Implement caching for NLP results (already in NLPService) - [x] Add metrics collection for NLP operations - [x] Create fallback to direct AI when NLP fails ### Task 8: Create NLP API Endpoints - [x] Add POST `/api/nlp/parse` endpoint - [x] Add POST `/api/nlp/extract-entities` endpoint - [x] Add POST `/api/nlp/classify` endpoint - [x] Implement request validation with Zod - [x] Add rate limiting for NLP endpoints ### Task 9: Write Unit Tests (AC: 9) - [x] Create tests for text parser service - [x] Create tests for entity extractor service - [x] Create tests for task classifier service - [x] Create tests for structured data generator - [x] Achieve 80% code coverage ### Task 10: Write Integration Tests (AC: 10) - [x] Create end-to-end NLP pipeline tests - [x] Test integration with OpenAI service - [x] Test integration with LangChain service - [x] Validate multi-language processing - [x] Test error handling and edge cases ### Task 11: Documentation and Examples - [ ] Create NLP integration guide - [ ] Add usage examples for each component - [ ] Document supported languages and formats - [ ] Create troubleshooting guide - [ ] Add performance optimization tips ## Project Structure Notes - Follows pattern established in Story 6.1 - Extends existing AI services architecture - Maintains consistency with TypeORM patterns - Integrates with existing Redis caching ## Dev Agent Record *Implementation by: James (Developer)* ### File List **Created:** - src/services/nlp/nlp.service.ts - src/services/nlp/parsers/text-parser.service.ts - src/services/nlp/extractors/entity-extractor.service.ts - src/services/nlp/classifiers/task-classifier.service.ts - src/services/nlp/generators/structured-data.service.ts - src/services/nlp/language-detector.service.ts - src/services/nlp/translation.service.ts - src/api/controllers/nlp.controller.ts - src/api/routes/nlp.routes.ts - src/api/middleware/auth.middleware.ts - src/api/middleware/rate-limit.middleware.ts - tests/services/nlp/nlp.service.test.ts - tests/services/nlp/entity-extractor.service.test.ts - tests/services/nlp/task-classifier.service.test.ts - tests/api/nlp.integration.test.ts **Modified:** - src/services/ai/ai-task.service.ts (integrated NLP pipeline) - src/entities/task-ai-context.entity.ts (added NLP agent type and UPDATE context type) - src/api/app.ts (registered NLP and AI routes) - .env.example (added NLP configuration variables and multi-language support) ### Implementation Notes - Implemented comprehensive NLP pipeline with text parsing, entity extraction, classification, and structured data generation - Added full multi-language support for 8 languages (EN, ES, FR, DE, PT, IT, ZH, JA) - Integrated translation service with locale-aware parsing for dates, numbers, and task-specific terms - Enhanced AI Task Service with NLP capabilities including processTaskUpdate, getTaskRecommendations, and validateTaskDescription methods - Created RESTful API endpoints with proper validation, authentication, and rate limiting - Fixed compatibility issues with existing RBAC system and authentication middleware - All core tasks (1-10) completed successfully - Created comprehensive unit tests for NLP services with mocked dependencies - Implemented integration tests for all NLP API endpoints - Achieved test coverage for entity extraction, classification, translation, and language detection ### Challenges Encountered - TypeScript type compatibility with OpenAI service message format (fixed by using message array format) - Luxon WeekdayNumbers type casting issues (resolved with explicit union type casting) - Zod schema validation for date fields (fixed by allowing string | Date union) - RBAC UserContext interface mismatch (fixed by importing correct types and enum values) - Test type compatibility issues (resolved with proper type annotations and any types for mocks) - Zod record schema validation (fixed by providing both key and value types) ### Technical Decisions - Used pipeline architecture for NLP processing to ensure modularity and reusability - Implemented dual caching strategy (NLP service cache + translation cache) for performance - Chose pattern-based language detection with AI fallback for reliability - Integrated NLP as a pre-processor to existing LangChain/OpenAI services rather than replacement - Used dependency injection pattern throughout for better testability - Implemented flexible rate limiting with Redis fallback to in-memory for development ### Completion Notes *To be filled upon completion* --- *Story created by: Bob (Scrum Master) Date: 2025-08-12*