|
| 1 | +# Design Document |
| 2 | + |
| 3 | +## Overview |
| 4 | + |
| 5 | +This design document outlines the integration of You.com API to replace AI21's Maestro framework in the Beacon Travel Agent system. The integration will maintain the existing microservices architecture while enhancing AI capabilities through You.com's search and AI services. The design ensures backward compatibility, improved performance, and seamless migration from the current AI21 implementation. |
| 6 | + |
| 7 | +## Architecture |
| 8 | + |
| 9 | +### Current Architecture |
| 10 | +The Beacon Travel Agent system consists of: |
| 11 | +- 7 specialized microservice agents (Flight, Food, Leisure, Shopping, Stay, Work, Commute) |
| 12 | +- Each agent runs on dedicated ports (8000-8006) |
| 13 | +- Next.js frontend on port 3000 with unified API proxy |
| 14 | +- BrightData API integration for real-time web scraping |
| 15 | +- AI21 Maestro framework for intelligent recommendations |
| 16 | + |
| 17 | +### Target Architecture |
| 18 | +The new architecture will replace AI21 with You.com API while maintaining: |
| 19 | +- Same microservices structure and port allocation |
| 20 | +- Existing API contracts and response formats |
| 21 | +- BrightData integration for real-time data |
| 22 | +- Enhanced AI capabilities through You.com's search and AI services |
| 23 | + |
| 24 | +### Integration Points |
| 25 | +1. **You.com API Service Layer**: Centralized service for all You.com API interactions |
| 26 | +2. **Agent AI Modules**: Updated AI processing modules in each agent |
| 27 | +3. **Configuration Management**: Environment-based You.com API configuration |
| 28 | +4. **Error Handling**: Robust error handling and fallback mechanisms |
| 29 | +5. **Rate Limiting**: Intelligent rate limiting and quota management |
| 30 | + |
| 31 | +## Components and Interfaces |
| 32 | + |
| 33 | +### You.com API Service Layer |
| 34 | + |
| 35 | +```python |
| 36 | +class YouAPIService: |
| 37 | + """Centralized service for You.com API interactions""" |
| 38 | + |
| 39 | + def __init__(self, api_key: str, base_url: str = "https://api.you.com"): |
| 40 | + self.api_key = api_key |
| 41 | + self.base_url = base_url |
| 42 | + self.session = aiohttp.ClientSession() |
| 43 | + self.rate_limiter = RateLimiter() |
| 44 | + |
| 45 | + async def search(self, query: str, domain: str = None) -> Dict[str, Any]: |
| 46 | + """Perform search using You.com API""" |
| 47 | + pass |
| 48 | + |
| 49 | + async def chat(self, messages: List[Dict], model: str = "gpt-4") -> Dict[str, Any]: |
| 50 | + """Chat completion using You.com AI""" |
| 51 | + pass |
| 52 | + |
| 53 | + async def analyze_content(self, content: str, analysis_type: str) -> Dict[str, Any]: |
| 54 | + """Analyze content using You.com AI""" |
| 55 | + pass |
| 56 | +``` |
| 57 | + |
| 58 | +### Agent AI Module Interface |
| 59 | + |
| 60 | +```python |
| 61 | +class AgentAI: |
| 62 | + """Base AI module for travel agents""" |
| 63 | + |
| 64 | + def __init__(self, you_api_service: YouAPIService): |
| 65 | + self.you_api = you_api_service |
| 66 | + |
| 67 | + async def enhance_search_results(self, results: List[Dict], context: str) -> List[Dict]: |
| 68 | + """Enhance search results with AI insights""" |
| 69 | + pass |
| 70 | + |
| 71 | + async def generate_recommendations(self, criteria: Dict, data: List[Dict]) -> List[Dict]: |
| 72 | + """Generate AI-powered recommendations""" |
| 73 | + pass |
| 74 | + |
| 75 | + async def analyze_options(self, options: List[Dict], preferences: Dict) -> Dict[str, Any]: |
| 76 | + """Analyze options and provide insights""" |
| 77 | + pass |
| 78 | +``` |
| 79 | + |
| 80 | +### Flight Agent AI Integration |
| 81 | + |
| 82 | +```python |
| 83 | +class FlightAgentAI(AgentAI): |
| 84 | + """Flight-specific AI enhancements""" |
| 85 | + |
| 86 | + async def search_flights(self, criteria: FlightSearchCriteria) -> List[FlightOption]: |
| 87 | + """Enhanced flight search with You.com AI""" |
| 88 | + # 1. Get base flight data from BrightData |
| 89 | + # 2. Use You.com API to search for flight insights |
| 90 | + # 3. Analyze airline reputation and route information |
| 91 | + # 4. Enhance scoring with AI-generated insights |
| 92 | + # 5. Return enhanced flight options |
| 93 | + pass |
| 94 | + |
| 95 | + async def analyze_flight_options(self, flights: List[FlightOption]) -> Dict[str, Any]: |
| 96 | + """Analyze flight options using You.com AI""" |
| 97 | + pass |
| 98 | +``` |
| 99 | + |
| 100 | +### Configuration Management |
| 101 | + |
| 102 | +```python |
| 103 | +class YouAPIConfig: |
| 104 | + """Configuration management for You.com API""" |
| 105 | + |
| 106 | + def __init__(self): |
| 107 | + self.api_key = os.getenv("YOU_API_KEY") |
| 108 | + self.base_url = os.getenv("YOU_API_BASE_URL", "https://api.you.com") |
| 109 | + self.rate_limit = int(os.getenv("YOU_API_RATE_LIMIT", "100")) |
| 110 | + self.timeout = int(os.getenv("YOU_API_TIMEOUT", "30")) |
| 111 | + self.enabled = os.getenv("YOU_API_ENABLED", "true").lower() == "true" |
| 112 | +``` |
| 113 | + |
| 114 | +## Data Models |
| 115 | + |
| 116 | +### You.com API Request Models |
| 117 | + |
| 118 | +```python |
| 119 | +class YouSearchRequest(BaseModel): |
| 120 | + """You.com search request model""" |
| 121 | + query: str |
| 122 | + domain: Optional[str] = None |
| 123 | + count: Optional[int] = 10 |
| 124 | + offset: Optional[int] = 0 |
| 125 | + freshness: Optional[str] = None # "day", "week", "month", "year" |
| 126 | + |
| 127 | +class YouChatRequest(BaseModel): |
| 128 | + """You.com chat request model""" |
| 129 | + messages: List[Dict[str, str]] |
| 130 | + model: Optional[str] = "gpt-4" |
| 131 | + temperature: Optional[float] = 0.7 |
| 132 | + max_tokens: Optional[int] = 1000 |
| 133 | + |
| 134 | +class YouAnalysisRequest(BaseModel): |
| 135 | + """You.com content analysis request""" |
| 136 | + content: str |
| 137 | + analysis_type: str # "sentiment", "summary", "insights", "recommendations" |
| 138 | + context: Optional[str] = None |
| 139 | +``` |
| 140 | + |
| 141 | +### Enhanced Agent Response Models |
| 142 | + |
| 143 | +```python |
| 144 | +class EnhancedFlightOption(FlightOption): |
| 145 | + """Enhanced flight option with AI insights""" |
| 146 | + ai_insights: Optional[Dict[str, Any]] = None |
| 147 | + reputation_score: Optional[float] = None |
| 148 | + route_analysis: Optional[str] = None |
| 149 | + booking_tips: Optional[List[str]] = None |
| 150 | + |
| 151 | +class EnhancedRestaurantOption(BaseModel): |
| 152 | + """Enhanced restaurant option with AI insights""" |
| 153 | + # Existing restaurant fields... |
| 154 | + ai_insights: Optional[Dict[str, Any]] = None |
| 155 | + cuisine_analysis: Optional[str] = None |
| 156 | + local_popularity: Optional[float] = None |
| 157 | + dining_tips: Optional[List[str]] = None |
| 158 | +``` |
| 159 | + |
| 160 | +### Error Response Models |
| 161 | + |
| 162 | +```python |
| 163 | +class YouAPIError(BaseModel): |
| 164 | + """You.com API error response""" |
| 165 | + error_code: str |
| 166 | + error_message: str |
| 167 | + retry_after: Optional[int] = None |
| 168 | + fallback_available: bool = True |
| 169 | + |
| 170 | +class AgentErrorResponse(BaseModel): |
| 171 | + """Agent error response with fallback info""" |
| 172 | + status: str = "error" |
| 173 | + message: str |
| 174 | + error_details: Optional[YouAPIError] = None |
| 175 | + fallback_data: Optional[Dict[str, Any]] = None |
| 176 | +``` |
| 177 | + |
| 178 | +## Correctness Properties |
| 179 | + |
| 180 | +*A property is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.* |
| 181 | + |
| 182 | +### Property 1: API Authentication Consistency |
| 183 | +*For any* Travel Agent initialization with valid You.com API credentials, the agent should successfully authenticate and be ready to process AI-enhanced requests |
| 184 | +**Validates: Requirements 1.1** |
| 185 | + |
| 186 | +### Property 2: Graceful Degradation |
| 187 | +*For any* Travel Agent when You.com API is unavailable or misconfigured, the agent should continue operating with basic functionality and log appropriate warnings |
| 188 | +**Validates: Requirements 1.2, 1.3** |
| 189 | + |
| 190 | +### Property 3: Rate Limit Compliance |
| 191 | +*For any* sequence of You.com API requests, the system should never exceed the configured rate limits and should implement proper backoff strategies when limits are approached |
| 192 | +**Validates: Requirements 1.4, 9.2** |
| 193 | + |
| 194 | +### Property 4: Response Format Consistency |
| 195 | +*For any* Travel Agent API endpoint, the response format should remain identical to the pre-migration format while potentially including enhanced AI data |
| 196 | +**Validates: Requirements 12.1, 12.2** |
| 197 | + |
| 198 | +### Property 5: Search Enhancement Preservation |
| 199 | +*For any* search request processed by a Travel Agent, if You.com API provides additional insights, those insights should enhance but not replace the core search results from BrightData |
| 200 | +**Validates: Requirements 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2** |
| 201 | + |
| 202 | +### Property 6: Configuration Hot-Reload |
| 203 | +*For any* You.com API configuration change, the system should be able to reload the configuration without requiring a full service restart |
| 204 | +**Validates: Requirements 10.3** |
| 205 | + |
| 206 | +### Property 7: Error Handling Robustness |
| 207 | +*For any* You.com API error or timeout, the Travel Agent should provide meaningful error messages and continue operating with available data |
| 208 | +**Validates: Requirements 9.3, 11.4** |
| 209 | + |
| 210 | +### Property 8: Health Check Verification |
| 211 | +*For any* Travel Agent health check request, the response should accurately reflect the You.com API connectivity status and overall agent health |
| 212 | +**Validates: Requirements 11.1** |
| 213 | + |
| 214 | +### Property 9: Scoring Algorithm Consistency |
| 215 | +*For any* set of travel options, the enhanced scoring algorithm with You.com API insights should produce scores within the same 0-100 range as the original algorithm |
| 216 | +**Validates: Requirements 12.3** |
| 217 | + |
| 218 | +### Property 10: API Quota Management |
| 219 | +*For any* concurrent requests from multiple Travel Agents, the You.com API service layer should efficiently manage quota usage and prevent quota exhaustion |
| 220 | +**Validates: Requirements 9.5, 10.5** |
| 221 | + |
| 222 | +## Error Handling |
| 223 | + |
| 224 | +### You.com API Error Categories |
| 225 | + |
| 226 | +1. **Authentication Errors** |
| 227 | + - Invalid API key |
| 228 | + - Expired credentials |
| 229 | + - Insufficient permissions |
| 230 | + |
| 231 | +2. **Rate Limiting Errors** |
| 232 | + - Quota exceeded |
| 233 | + - Request rate too high |
| 234 | + - Daily/monthly limits reached |
| 235 | + |
| 236 | +3. **Request Errors** |
| 237 | + - Invalid request format |
| 238 | + - Missing required parameters |
| 239 | + - Unsupported operations |
| 240 | + |
| 241 | +4. **Service Errors** |
| 242 | + - You.com API downtime |
| 243 | + - Network connectivity issues |
| 244 | + - Timeout errors |
| 245 | + |
| 246 | +### Error Handling Strategy |
| 247 | + |
| 248 | +```python |
| 249 | +class YouAPIErrorHandler: |
| 250 | + """Centralized error handling for You.com API""" |
| 251 | + |
| 252 | + async def handle_error(self, error: Exception, context: str) -> Dict[str, Any]: |
| 253 | + """Handle You.com API errors with appropriate fallback""" |
| 254 | + |
| 255 | + if isinstance(error, AuthenticationError): |
| 256 | + return self._handle_auth_error(error, context) |
| 257 | + elif isinstance(error, RateLimitError): |
| 258 | + return self._handle_rate_limit_error(error, context) |
| 259 | + elif isinstance(error, TimeoutError): |
| 260 | + return self._handle_timeout_error(error, context) |
| 261 | + else: |
| 262 | + return self._handle_generic_error(error, context) |
| 263 | + |
| 264 | + def _handle_auth_error(self, error: AuthenticationError, context: str) -> Dict[str, Any]: |
| 265 | + """Handle authentication errors""" |
| 266 | + logger.error(f"You.com API authentication failed in {context}: {error}") |
| 267 | + return { |
| 268 | + "status": "degraded", |
| 269 | + "message": "AI features temporarily unavailable", |
| 270 | + "fallback_mode": True |
| 271 | + } |
| 272 | + |
| 273 | + def _handle_rate_limit_error(self, error: RateLimitError, context: str) -> Dict[str, Any]: |
| 274 | + """Handle rate limiting with exponential backoff""" |
| 275 | + retry_after = getattr(error, 'retry_after', 60) |
| 276 | + logger.warning(f"You.com API rate limit exceeded in {context}, retry after {retry_after}s") |
| 277 | + return { |
| 278 | + "status": "throttled", |
| 279 | + "retry_after": retry_after, |
| 280 | + "fallback_mode": True |
| 281 | + } |
| 282 | +``` |
| 283 | + |
| 284 | +### Fallback Mechanisms |
| 285 | + |
| 286 | +1. **Basic Functionality**: All agents continue core operations without AI enhancements |
| 287 | +2. **Cached Responses**: Use previously cached You.com API responses when available |
| 288 | +3. **Degraded Scoring**: Use original scoring algorithms without AI insights |
| 289 | +4. **User Notification**: Inform users when AI features are temporarily unavailable |
| 290 | + |
| 291 | +## Testing Strategy |
| 292 | + |
| 293 | +### Unit Testing Approach |
| 294 | + |
| 295 | +Unit tests will focus on individual components and their specific functionality: |
| 296 | + |
| 297 | +- **You.com API Service Layer**: Test API request formatting, response parsing, and error handling |
| 298 | +- **Agent AI Modules**: Test AI enhancement logic and integration with existing agent functionality |
| 299 | +- **Configuration Management**: Test environment variable loading and validation |
| 300 | +- **Error Handlers**: Test error detection, classification, and fallback mechanisms |
| 301 | + |
| 302 | +### Property-Based Testing Approach |
| 303 | + |
| 304 | +Property-based tests will verify universal properties across all inputs using the Hypothesis library for Python: |
| 305 | + |
| 306 | +- **API Authentication**: Generate various credential combinations to test authentication robustness |
| 307 | +- **Rate Limiting**: Generate request patterns to verify rate limit compliance |
| 308 | +- **Response Consistency**: Generate diverse search criteria to ensure response format consistency |
| 309 | +- **Error Handling**: Generate various error conditions to test fallback mechanisms |
| 310 | +- **Scoring Algorithms**: Generate travel option datasets to verify scoring consistency |
| 311 | + |
| 312 | +### Integration Testing |
| 313 | + |
| 314 | +- **End-to-End Agent Testing**: Test complete request flows through each agent with You.com API integration |
| 315 | +- **API Proxy Testing**: Test unified API proxy routing with You.com enhanced responses |
| 316 | +- **Cross-Agent Testing**: Test concurrent usage across multiple agents |
| 317 | +- **Performance Testing**: Measure response times and throughput with You.com API integration |
| 318 | + |
| 319 | +### Mock Testing Strategy |
| 320 | + |
| 321 | +- **You.com API Mocking**: Create comprehensive mock responses for consistent testing |
| 322 | +- **Network Failure Simulation**: Test behavior under various network conditions |
| 323 | +- **Rate Limit Simulation**: Test rate limiting and backoff mechanisms |
| 324 | +- **Configuration Testing**: Test various configuration scenarios and edge cases |
| 325 | + |
| 326 | +The testing framework will use pytest for unit tests, Hypothesis for property-based testing, and custom integration test suites for end-to-end validation. All tests will run in CI/CD pipelines to ensure continuous validation of the You.com API integration. |
0 commit comments