Spaces:
Sleeping
Sleeping
| """ | |
| AI Service Module - Production-Ready AI Processing with Governance | |
| This module provides access to the RealAIWorkflowService for natural language understanding, | |
| text analysis, and AI-powered workflow execution with multi-provider support and governance. | |
| Features: | |
| - Multi-provider support (OpenAI, Anthropic, DeepSeek, Gemini) | |
| - Governance integration with action complexity checks | |
| - Automatic provider selection based on query complexity | |
| - Trajectory recording for audit trails | |
| - Graceful fallback with proper error handling | |
| Usage: | |
| from core.ai_service import get_ai_service | |
| ai_service = get_ai_service() | |
| # NLU processing with workflow suggestions | |
| result = await ai_service.process_with_nlu( | |
| text="Schedule a meeting tomorrow", | |
| provider="openai", | |
| user_id="user123" | |
| ) | |
| # Text analysis with governance | |
| analysis = await ai_service.analyze_text( | |
| prompt="Analyze this document", | |
| complexity=2, | |
| system_prompt="You are a helpful assistant", | |
| user_id="user123" | |
| ) | |
| """ | |
| import logging | |
| import os | |
| from typing import Any, Optional | |
| logger = logging.getLogger(__name__) | |
| # Feature flag to allow mock in development/testing | |
| # WARNING: Never set to true in production! | |
| ALLOW_MOCK_AI = os.getenv("ALLOW_MOCK_AI", "false").lower() == "true" | |
| def get_ai_service(): | |
| """ | |
| Returns the centralized AI service instance. | |
| The service provides: | |
| - process_with_nlu(): Natural language understanding with workflow suggestions | |
| - analyze_text(): Text analysis with governance checks | |
| - run_react_agent(): ReAct loop for agentic behavior | |
| - Multi-provider support (OpenAI, Anthropic, DeepSeek, Gemini) | |
| Returns: | |
| RealAIWorkflowService instance with multi-provider AI capabilities | |
| Raises: | |
| ImportError: If AI service is not available and ALLOW_MOCK_AI is False | |
| Environment Variables: | |
| ALLOW_MOCK_AI: Set to 'true' to allow mock fallback for development/testing only | |
| Example: | |
| >>> ai_service = get_ai_service() | |
| >>> result = await ai_service.process_with_nlu("Hello world") | |
| >>> print(result['intent']) | |
| """ | |
| try: | |
| from enhanced_ai_workflow_endpoints import ai_service as _ai_service | |
| logger.info("RealAIWorkflowService loaded successfully") | |
| return _ai_service | |
| except ImportError as e: | |
| if ALLOW_MOCK_AI: | |
| logger.warning( | |
| f"RealAIWorkflowService not found ({e}), using mock (ALLOW_MOCK_AI=true). " | |
| "WARNING: Mock service should NEVER be used in production!" | |
| ) | |
| return MockAIService() | |
| else: | |
| error_msg = ( | |
| f"AI Service (RealAIWorkflowService) not found: {e}. " | |
| "Please ensure the enhanced AI workflow endpoints are available. " | |
| "For development/testing only, set ALLOW_MOCK_AI=true environment variable." | |
| ) | |
| logger.error(error_msg) | |
| raise ImportError(error_msg) | |
| class MockAIService: | |
| """ | |
| Fallback mock AI service for development/testing environments only. | |
| WARNING: This mock should NEVER be used in production as it returns | |
| hardcoded responses without any actual AI processing. | |
| Attributes: | |
| All methods return static mock responses for testing purposes only. | |
| Usage: | |
| Only used when ALLOW_MOCK_AI=true is set (development/testing only) | |
| """ | |
| async def process_with_nlu( | |
| self, | |
| text: str, | |
| provider: str = "openai", | |
| system_prompt: Optional[str] = None, | |
| user_id: str = "default" | |
| ) -> dict: | |
| """ | |
| Mock NLU processing - returns static response. | |
| WARNING: This is a MOCK implementation for testing only. | |
| """ | |
| logger.warning( | |
| f"MockAIService.process_with_nlu called for user '{user_id}' - " | |
| "returning mocked response. DO NOT USE IN PRODUCTION!" | |
| ) | |
| return { | |
| "nlu_result": {"status": "mocked", "intent": "mock_intent"}, | |
| "confidence": 0.5, | |
| "warning": "This is a mock response - enable RealAIWorkflowService for production" | |
| } | |
| async def analyze_text( | |
| self, | |
| prompt: str, | |
| complexity: int = 1, | |
| system_prompt: str = "", | |
| user_id: str = "default" | |
| ) -> str: | |
| """ | |
| Mock text analysis - returns static response. | |
| WARNING: This is a MOCK implementation for testing only. | |
| """ | |
| logger.warning( | |
| f"MockAIService.analyze_text called with complexity {complexity} for user '{user_id}' - " | |
| "returning mocked response. DO NOT USE IN PRODUCTION!" | |
| ) | |
| return ( | |
| "Mocked AI response - DO NOT USE IN PRODUCTION. " | |
| "Enable RealAIWorkflowService by setting ALLOW_MOCK_AI=false " | |
| "and ensuring enhanced_ai_workflow_endpoints is available." | |
| ) | |
| async def run_react_agent(self, text: str, provider: str = None) -> dict: | |
| """ | |
| Mock ReAct agent - returns static response. | |
| WARNING: This is a MOCK implementation for testing only. | |
| """ | |
| logger.warning( | |
| f"MockAIService.run_react_agent called - " | |
| "returning mocked response. DO NOT USE IN PRODUCTION!" | |
| ) | |
| return { | |
| "final_answer": "Mock ReAct agent response", | |
| "ai_generated_tasks": [], | |
| "confidence_score": 0.0, | |
| "warning": "This is a mock response" | |
| } | |