Add RAG client

This commit is contained in:
2026-02-22 22:45:47 +00:00
parent 3c1c1a246a
commit 10520012d4
189 changed files with 10690 additions and 31 deletions

View File

@@ -0,0 +1,440 @@
# RAG Migration - Implementation Summary
## ✅ **Migration Complete**
All components for the Dialogflow → RAG migration have been successfully implemented and tested.
---
## 📦 **What Was Delivered**
### 1. Core Implementation (7 new files)
| File | Purpose | Lines | Status |
|------|---------|-------|--------|
| `IntentDetectionService.java` | Common interface for both implementations | 20 | ✅ Complete |
| `RagClientService.java` | HTTP client for RAG server | 180 | ✅ Complete |
| `RagRequestMapper.java` | DTO → RAG format conversion | 140 | ✅ Complete |
| `RagResponseMapper.java` | RAG → DTO conversion | 60 | ✅ Complete |
| `RagQueryRequest.java` | RAG request DTO | 25 | ✅ Complete |
| `RagQueryResponse.java` | RAG response DTO | 20 | ✅ Complete |
| `RagClientException.java` | Custom exception | 15 | ✅ Complete |
| `IntentDetectionConfig.java` | Feature flag configuration | 50 | ✅ Complete |
**Total:** ~510 lines of production code
### 2. Configuration Files (3 updated)
| File | Changes | Status |
|------|---------|--------|
| `application-dev.properties` | Added RAG configuration | ✅ Updated |
| `application-prod.properties` | Added RAG configuration | ✅ Updated |
| `application-qa.properties` | Added RAG configuration | ✅ Updated |
### 3. Service Integration (2 updated)
| File | Changes | Status |
|------|---------|--------|
| `ConversationManagerService.java` | Uses `IntentDetectionService` | ✅ Updated |
| `NotificationManagerService.java` | Uses `IntentDetectionService` | ✅ Updated |
| `DialogflowClientService.java` | Implements interface | ✅ Updated |
### 4. Test Suite (4 new test files)
| Test File | Tests | Coverage | Status |
|-----------|-------|----------|--------|
| `RagRequestMapperTest.java` | 15 tests | Request mapping | ✅ Complete |
| `RagResponseMapperTest.java` | 10 tests | Response mapping | ✅ Complete |
| `RagClientServiceTest.java` | 7 tests | Service unit tests | ✅ Complete |
| `RagClientIntegrationTest.java` | 12 tests | End-to-end with mock server | ✅ Complete |
**Total:** 44 comprehensive tests (~1,100 lines)
### 5. Documentation (3 new docs)
| Document | Purpose | Pages | Status |
|----------|---------|-------|--------|
| `rag-api-specification.md` | RAG API contract | 8 | ✅ Complete |
| `rag-migration-guide.md` | Migration instructions | 12 | ✅ Complete |
| `rag-testing-guide.md` | Testing documentation | 10 | ✅ Complete |
**Total:** ~30 pages of documentation
### 6. Dependency Updates
Added to `pom.xml`:
```xml
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<version>4.12.0</version>
<scope>test</scope>
</dependency>
```
---
## 🎯 **Key Features**
### ✅ **Zero-Downtime Migration**
- Switch between Dialogflow and RAG with a single environment variable
- No code deployment required to switch
- Instant rollback capability
### ✅ **Backward Compatible**
- All external APIs unchanged
- All DTOs preserved
- All existing services work without modification
### ✅ **Redundant Safety**
- Conversation history stored in both systems
- Session management preserved
- DLP obfuscation maintained
### ✅ **Production-Ready**
- Retry logic: 3 attempts with exponential backoff
- Timeout handling: 30-second default
- Error mapping: Comprehensive exception handling
- Logging: Detailed info, debug, and error logs
### ✅ **Fully Reactive**
- Native WebClient integration
- Project Reactor patterns
- Non-blocking I/O throughout
### ✅ **Comprehensive Testing**
- 44 tests across unit and integration levels
- Mock HTTP server for realistic testing
- Retry scenarios validated
- Edge cases covered
---
## 🔄 **How It Works**
### Configuration-Based Switching
**Use RAG:**
```bash
export INTENT_DETECTION_CLIENT=rag
export RAG_SERVER_URL=https://your-rag-server.com
export RAG_SERVER_API_KEY=your-api-key
```
**Use Dialogflow:**
```bash
export INTENT_DETECTION_CLIENT=dialogflow
```
### Request Flow
```
User Request
DLP Obfuscation
ConversationManagerService / NotificationManagerService
IntentDetectionService (interface)
├─→ DialogflowClientService (if client=dialogflow)
└─→ RagClientService (if client=rag)
RagRequestMapper
WebClient → RAG Server
RagResponseMapper
DetectIntentResponseDTO
Persist to Memorystore + Firestore
Response to User
```
---
## 📊 **Test Coverage**
### Unit Tests (32 tests)
**RagRequestMapper (15 tests):**
- ✅ Text input mapping
- ✅ Event input mapping
- ✅ Notification parameter extraction
- ✅ Phone number validation
- ✅ Parameter prefix removal
- ✅ Type determination
- ✅ Null/empty handling
**RagResponseMapper (10 tests):**
- ✅ Complete response mapping
- ✅ Response ID generation
- ✅ Null field handling
- ✅ Complex parameter types
- ✅ Long text handling
**RagClientService (7 tests):**
- ✅ Mapper integration
- ✅ Null validation
- ✅ Exception propagation
- ✅ Configuration variants
### Integration Tests (12 tests)
**RagClientIntegrationTest:**
- ✅ Full HTTP request/response cycle
- ✅ Request headers validation
- ✅ Notification context transmission
- ✅ Event-based inputs
- ✅ Retry logic (500, 503, 504)
- ✅ No retry on 4xx errors
- ✅ Timeout handling
- ✅ Complex parameter types
- ✅ Empty/missing field handling
---
## 🚀 **Ready to Deploy**
### Prerequisites
1. **RAG Server Running**
- Implement API per `docs/rag-api-specification.md`
- Endpoint: `POST /api/v1/query`
2. **Environment Variables Set**
```bash
INTENT_DETECTION_CLIENT=rag
RAG_SERVER_URL=https://your-rag-server.com
RAG_SERVER_API_KEY=your-api-key # optional
```
### Deployment Steps
1. **Build Application**
```bash
mvn clean package
```
2. **Run Tests**
```bash
mvn test
```
3. **Deploy to Dev**
```bash
# Deploy with RAG enabled
kubectl apply -f deployment-dev.yaml
```
4. **Verify Logs**
```
✓ Intent detection configured to use RAG client
RAG Client initialized successfully with endpoint: https://...
```
5. **Test Endpoints**
```bash
# Test conversation
curl -X POST http://localhost:8080/api/v1/dialogflow/detect-intent \
-H "Content-Type: application/json" \
-d '{"message": "Hola", "user": {"telefono": "123"}}'
```
---
## 📈 **Migration Phases**
### Phase 1: Development (1 week) - **READY NOW**
- ✅ Code complete
- ✅ Tests passing
- ✅ Documentation ready
- 🎯 Deploy to dev environment with `INTENT_DETECTION_CLIENT=rag`
### Phase 2: QA Testing (1 week)
- 🎯 Run automated test suite
- 🎯 Manual testing of all flows
- 🎯 Load testing
- 🎯 Compare responses with Dialogflow
### Phase 3: Production Pilot (2-3 weeks)
- 🎯 Deploy with feature flag
- 🎯 Gradual rollout: 10% → 50% → 100%
- 🎯 Monitor metrics (response time, errors)
- 🎯 Keep Dialogflow as fallback
### Phase 4: Full Migration
- 🎯 Set `INTENT_DETECTION_CLIENT=rag` for all environments
- 🎯 Monitor for 2 weeks
- 🎯 Remove Dialogflow dependencies (optional)
---
## 🔍 **Monitoring**
### Key Metrics
| Metric | Target | How to Monitor |
|--------|--------|----------------|
| Response Time (p95) | < 2s | Log entries: "RAG query successful" |
| Error Rate | < 0.5% | Log entries: "RAG query failed" |
| Retry Rate | < 5% | Log entries: "Retrying RAG call" |
| Success Rate | > 99.5% | Count successful vs failed requests |
### Log Patterns
**Success:**
```
INFO Initiating RAG query for session: <session-id>
INFO RAG query successful for session: <session-id>
```
**Failure:**
```
ERROR RAG server error for session <session-id>: status=500
ERROR RAG retries exhausted for session <session-id>
```
---
## 🛡️ **Rollback Plan**
If issues occur:
### Step 1: Switch Configuration (< 1 minute)
```bash
export INTENT_DETECTION_CLIENT=dialogflow
```
### Step 2: Restart Application
```bash
kubectl rollout restart deployment/capa-integracion
```
### Step 3: Verify
```
✓ Intent detection configured to use Dialogflow CX client
```
**No code changes needed. No data loss.**
---
## 📁 **File Structure**
```
capa-de-integracion/
├── docs/
│ ├── rag-api-specification.md [NEW - 250 lines]
│ ├── rag-migration-guide.md [NEW - 400 lines]
│ ├── rag-testing-guide.md [NEW - 350 lines]
│ └── rag-migration-summary.md [NEW - this file]
├── src/main/java/com/example/
│ ├── config/
│ │ └── IntentDetectionConfig.java [NEW - 50 lines]
│ ├── dto/rag/
│ │ ├── RagQueryRequest.java [NEW - 25 lines]
│ │ └── RagQueryResponse.java [NEW - 20 lines]
│ ├── exception/
│ │ └── RagClientException.java [NEW - 15 lines]
│ ├── mapper/rag/
│ │ ├── RagRequestMapper.java [NEW - 140 lines]
│ │ └── RagResponseMapper.java [NEW - 60 lines]
│ ├── service/base/
│ │ ├── IntentDetectionService.java [NEW - 20 lines]
│ │ ├── RagClientService.java [NEW - 180 lines]
│ │ └── DialogflowClientService.java [UPDATED]
│ ├── service/conversation/
│ │ └── ConversationManagerService.java [UPDATED]
│ └── service/notification/
│ └── NotificationManagerService.java [UPDATED]
├── src/main/resources/
│ ├── application-dev.properties [UPDATED]
│ ├── application-prod.properties [UPDATED]
│ └── application-qa.properties [UPDATED]
├── src/test/java/com/example/
│ ├── mapper/rag/
│ │ ├── RagRequestMapperTest.java [NEW - 280 lines]
│ │ └── RagResponseMapperTest.java [NEW - 220 lines]
│ ├── service/unit_testing/
│ │ └── RagClientServiceTest.java [NEW - 150 lines]
│ └── service/integration_testing/
│ └── RagClientIntegrationTest.java [NEW - 450 lines]
└── pom.xml [UPDATED]
```
---
## 🎉 **Benefits Achieved**
### Technical Benefits
- ✅ Cleaner architecture with interface abstraction
- ✅ Easier to switch implementations
- ✅ Better testability
- ✅ Simpler HTTP-based protocol vs gRPC
- ✅ No Protobuf complexity
### Operational Benefits
- ✅ Instant rollback capability
- ✅ No downtime during migration
- ✅ Gradual rollout support
- ✅ Better monitoring and debugging
### Business Benefits
- ✅ Freedom from Dialogflow limitations
- ✅ Custom RAG implementation control
- ✅ Cost optimization potential
- ✅ Better response quality (once RAG is tuned)
---
## 📞 **Support & Resources**
### Documentation
- **API Specification:** `docs/rag-api-specification.md`
- **Migration Guide:** `docs/rag-migration-guide.md`
- **Testing Guide:** `docs/rag-testing-guide.md`
### Key Commands
**Run All Tests:**
```bash
mvn test
```
**Run RAG Tests Only:**
```bash
mvn test -Dtest="**/rag/**/*Test"
```
**Build Application:**
```bash
mvn clean package
```
**Run Locally:**
```bash
mvn spring-boot:run -Dspring-boot.run.profiles=dev
```
---
## ✨ **Summary**
The RAG migration implementation is **production-ready** and includes:
-**~510 lines** of production code
-**~1,100 lines** of test code
-**~1,000 lines** of documentation
-**44 comprehensive tests**
-**Zero breaking changes**
-**Instant rollback support**
**Next Action:** Deploy to dev environment and test with real RAG server.
---
*Generated: 2025-02-22*
*Status: ✅ Ready for Deployment*