# Services Component Documentation Comprehensive documentation of the Services layer in the Gateway application, explaining the architecture, patterns, and implementation details of all service modules. > 📚 **Looking for detailed API reference?** See the [Services API Reference](./services-api-reference.md) for complete method signatures, parameters, return types, and usage examples. ## Table of Contents 1. [Overview](#overview) 2. [What is a Service?](#what-is-a-service) 3. [Service Architecture](#service-architecture) 4. [Service Initialization](#service-initialization) 5. [Core Services](#core-services) 6. [Service Usage Patterns](#service-usage-patterns) 7. [Service Lifecycle](#service-lifecycle) 8. [Best Practices](#best-practices) --- ## Overview The **Services Layer** is a critical component of the Gateway application's business logic layer. Services provide reusable, composable functionality that can be used by features, routes, and other services. They encapsulate complex operations and act as orchestrators between the API layer and the data access layer. ```mermaid graph TB subgraph "Application Layers" Routes[Routes Layer
API Endpoints] Features[Features Layer
Business Logic] Services[Services Layer
Reusable Components] Interfaces[Interfaces Layer
Data Access] Connectors[Connectors Layer
External Systems] end Routes --> Features Routes --> Services Features --> Services Services --> Interfaces Services --> Services Interfaces --> Connectors style Services fill:#e8f5e9,stroke:#1b5e20,stroke-width:3px ``` ### Key Characteristics - **Reusable**: Services provide functionality that can be used across multiple features and routes - **Composable**: Services can call other services to build complex workflows - **Stateless**: Services operate without maintaining session state - **User-Context Aware**: All services receive user context through the Services container - **Interface-Dependent**: Services use interfaces to access data and external systems --- ## What is a Service? A **Service** is a Python class that encapsulates a specific domain of functionality within the business logic layer. Services are designed to: 1. **Abstract Complexity**: Hide implementation details behind clean, well-defined APIs 2. **Promote Reusability**: Provide operations that can be used in multiple contexts 3. **Orchestrate Operations**: Coordinate between multiple interfaces and other services 4. **Process Data**: Transform, validate, and enrich data between layers 5. **Enforce Business Rules**: Implement domain-specific logic and constraints ### Service vs Feature vs Interface ```mermaid graph LR subgraph "Comparison" A[Route] -->|Delegates to| B[Feature] A -->|Can call directly| C[Service] B -->|Uses| C C -->|Calls| D[Interface] C -->|Calls| E[Other Services] D -->|Uses| F[Connector] end style A fill:#f3e5f5,stroke:#4a148c style B fill:#e8f5e9,stroke:#1b5e20 style C fill:#e8f5e9,stroke:#1b5e20 style D fill:#fff3e0,stroke:#e65100 style F fill:#fce4ec,stroke:#880e4f ``` | Aspect | Feature | Service | Interface | |--------|---------|---------|-----------| | **Purpose** | Domain-specific business logic | Cross-cutting, reusable functionality | Data access abstraction | | **Scope** | Single use case or domain | Multiple use cases | Database/API operations | | **Reusability** | Low (domain-specific) | High (cross-domain) | High (data operations) | | **Dependencies** | Can use services | Can use other services and interfaces | Can use connectors | | **Examples** | Real Estate workflow | AI processing, Document extraction | Database queries, API calls | --- ## Service Architecture The Services layer follows a **Service-Oriented Architecture (SOA)** pattern with a centralized service container. ### Service Container Pattern All services are initialized and accessed through a central `Services` container that provides: - **User Context**: Every service has access to the current user - **Workflow Context**: Access to the current workflow state - **Interface Access**: Direct access to all data interfaces - **Service Composition**: Services can call other services via `self.services` ```mermaid graph TB subgraph "Services Container" SC[Services Instance] SC -->|Holds| User[User Context] SC -->|Holds| Workflow[Workflow Context] SC -->|Provides| IntChat[Chat Interface] SC -->|Provides| IntApp[App Interface] SC -->|Provides| IntComp[Component Interface] SC -->|Initializes| SvcAI[AI Service] SC -->|Initializes| SvcChat[Chat Service] SC -->|Initializes| SvcExtract[Extraction Service] SC -->|Initializes| SvcGen[Generation Service] SC -->|Initializes| SvcNeut[Neutralization Service] SC -->|Initializes| SvcUtils[Utils Service] SC -->|Initializes| SvcTicket[Ticket Service] SC -->|Initializes| SvcSP[SharePoint Service] SvcAI -.->|Uses| SC SvcChat -.->|Uses| SC SvcExtract -.->|Uses| SC end style SC fill:#e1f5ff,stroke:#01579b,stroke-width:3px style User fill:#fff3e0,stroke:#e65100 style Workflow fill:#fff3e0,stroke:#e65100 ``` ### Service Initialization Flow ```mermaid sequenceDiagram participant Route participant Services Container participant Service participant Interface participant Connector Route->>Services Container: Create(user, workflow) Services Container->>Interface: Initialize Interfaces Interface-->>Services Container: Ready Services Container->>Service: Initialize Service(serviceCenter) Service->>Service: Store serviceCenter reference Service-->>Services Container: Ready Services Container-->>Route: Services Ready Route->>Services Container: services.ai.someMethod() Services Container->>Service: someMethod() Service->>Services Container: self.services.chat.getContext() Services Container->>Service: Context Data Service->>Interface: Query Data Interface->>Connector: Execute Query Connector-->>Interface: Results Interface-->>Service: Domain Objects Service-->>Services Container: Result Services Container-->>Route: Result ``` --- ## Service Initialization Services are initialized through the `Services` class in `modules/services/__init__.py`. ### Services Class Structure ```python class Services: def __init__(self, user: User, workflow: ChatWorkflow = None): # Core Context self.user: User = user self.workflow: ChatWorkflow = workflow self.currentUserPrompt: str = "" self.rawUserPrompt: str = "" # Initialize Interfaces self.interfaceDbChat = getChatInterface(user) self.interfaceDbApp = getAppInterface(user) self.interfaceDbComponent = getComponentInterface(user) # Initialize Services self.extraction = PublicService(ExtractionService(self)) self.generation = PublicService(GenerationService(self)) self.neutralization = PublicService(NeutralizationService(self)) self.sharepoint = PublicService(SharepointService(self)) self.ai = PublicService(AiService(self), functionsOnly=False) self.ticket = PublicService(TicketService(self)) self.chat = PublicService(ChatService(self)) self.utils = PublicService(UtilsService(self)) ``` ### PublicService Wrapper The `PublicService` wrapper provides: - **Method Access Control**: Exposes only public methods (non-underscore prefixed) - **Attribute Protection**: Prevents direct attribute access from outside - **Clean API Surface**: Provides a well-defined public interface ```python class PublicService: """Wrapper that exposes only public methods of a service""" def __init__(self, service_instance, functionsOnly=True): self._service = service_instance self._functionsOnly = functionsOnly def __getattr__(self, name): # Only expose public methods/attributes if name.startswith('_'): raise AttributeError(f"Access to private attributes is not allowed") return getattr(self._service, name) ``` --- ## Core Services The Gateway application includes 8 core services, each handling a specific domain of functionality. ### Service Overview Diagram ```mermaid graph TB subgraph "Core Services" AI[AI Service
AI model operations] Chat[Chat Service
Workflow & documents] Extract[Extraction Service
Content extraction] Gen[Generation Service
Document generation] Neut[Neutralization Service
Data anonymization] SP[SharePoint Service
SharePoint integration] Ticket[Ticket Service
Ticket system integration] Utils[Utils Service
Common utilities] end subgraph "Service Dependencies" AI -.->|Uses| Extract Gen -.->|Uses| AI Chat -.->|Uses| Utils end style AI fill:#bbdefb,stroke:#1976d2,stroke-width:2px style Chat fill:#c8e6c9,stroke:#388e3c,stroke-width:2px style Extract fill:#fff9c4,stroke:#fbc02d,stroke-width:2px style Gen fill:#f8bbd0,stroke:#c2185b,stroke-width:2px style Neut fill:#d1c4e9,stroke:#512da8,stroke-width:2px style SP fill:#ffccbc,stroke:#e64a19,stroke-width:2px style Ticket fill:#b2dfdb,stroke:#00796b,stroke-width:2px style Utils fill:#e0e0e0,stroke:#616161,stroke-width:2px ``` --- ### 1. AI Service **Location**: `modules/services/serviceAi/mainServiceAi.py` **Purpose**: Orchestrates all AI model operations including text generation, document processing, image generation, web search, and web crawling. #### Key Responsibilities - AI model selection and routing - Prompt building and placeholder replacement - Iterative generation with continuation support - Document processing with chunking - Model-aware content handling - Progress tracking and statistics #### AI Service Architecture ```mermaid graph TB subgraph "AI Service Components" Main[AiService Main] Main --> Planning[Planning Call] Main --> Documents[Documents Call] Main --> Text[Text Call] Documents --> ImageGen[Image Generation] Documents --> WebOps[Web Operations] Documents --> DocGen[Document Generation] Documents --> TextProc[Text Processing] Main --> Helpers[Helper Methods] Helpers --> Placeholders[Placeholder Building] Helpers --> Analysis[Prompt Analysis] Helpers --> Looping[Iterative Generation] Helpers --> Parsing[Response Parsing] end Main -.->|Uses| ExtractSvc[Extraction Service] Main -.->|Uses| AiObjects[AI Objects Interface] style Main fill:#bbdefb,stroke:#1976d2,stroke-width:3px ``` #### Core Capabilities **Planning Operations** - Task and action planning with optimized parameters - Intent analysis and workflow design - Returns structured JSON plans **Document Operations** - Multi-format document processing - Document generation (PDF, DOCX, XLSX, HTML, etc.) - Image generation - Web search and crawling **Text Processing** - Content extraction and summarization - Data analysis and insights - Model-aware chunking for large documents #### Special Features 1. **Iterative Generation**: Supports multi-iteration generation with continuation context 2. **Repair-Based Looping**: Automatically repairs broken JSON and continues generation 3. **Model-Aware Processing**: Automatically chunks content based on model limits 4. **Progress Tracking**: Provides granular progress updates for long operations 5. **Statistics Collection**: Tracks costs, processing time, and token usage > 📖 **See [Services API Reference](./services-api-reference.md#ai-service-api)** for detailed method signatures, parameters, and examples. --- ### 2. Chat Service **Location**: `modules/services/serviceChat/mainServiceChat.py` **Purpose**: Manages workflow operations, message handling, document resolution, and chat context management. #### Key Responsibilities - Workflow CRUD operations - Message and document management - Document reference resolution - Connection management - Progress logging - Workflow statistics #### Chat Service Data Flow ```mermaid sequenceDiagram participant Feature participant ChatService participant Interface participant Database Feature->>ChatService: createWorkflow(data) ChatService->>Interface: createWorkflow(data) Interface->>Database: INSERT workflow Database-->>Interface: Workflow object Interface-->>ChatService: Workflow ChatService-->>Feature: Workflow Feature->>ChatService: storeMessageWithDocuments(workflow, message, docs) ChatService->>Interface: createMessage(messageData) Interface->>Database: INSERT message Database-->>Interface: Message object Interface->>Database: INSERT documents Database-->>Interface: Document objects ChatService->>ChatService: Sync in-memory workflow.messages ChatService-->>Feature: ChatMessage with documents Feature->>ChatService: getChatDocumentsFromDocumentList(refs) ChatService->>ChatService: Parse document references ChatService->>ChatService: Resolve from workflow.messages ChatService-->>Feature: List[ChatDocument] ``` #### Document Reference System The Chat Service implements a sophisticated document reference system with three formats: 1. **docItem**: Single document by ID - `docItem::` 2. **docList with message ID**: Documents from specific message - `docList::