Architecture
Here's the LLM Foundry architecture.
graph TB
    subgraph Client
        Browser["Browser/Client"]
    end
    subgraph "LLM Foundry"
        Router["URL Router (gramex.yaml)"]
        subgraph "Authentication"
            MSAuth["Microsoft OAuth2"]
            GoogleAuth["Google Auth"]
            Logout["Logout Handler"]
        end
        subgraph "Core Handlers"
            LLMHandler["LLMFoundryHandler"]
            FileH["File Handler"]
            FormH["Form Handler"]
            FuncH["Function Handler"]
        end
        subgraph "LLM Providers"
            OpenAI["OpenAI"]
            Azure["Azure AI"]
            Anthropic["Anthropic"]
            Gemini["Google Gemini"]
            Groq["Groq"]
            Bedrock["AWS Bedrock"]
            Others["Other Providers"]
        end
        subgraph "Storage"
            SQLite["SQLite DBs"]
            subgraph "Databases"
                LogDB["llmfoundry.db<br>(Logs/Cache)"]
                AppsDB["apps.db"]
                TemplatesDB["templates.db"]
                EmbeddingsDB["embeddings.db"]
            end
            FileSystem["File System<br>(Logs/Cache)"]
        end
        subgraph "Features"
            Templates["Template Management"]
            Search["Search"]
            Usage["Usage Tracking"]
            Stats["Statistics"]
            PDFProcess["PDF Processing"]
            Markdown["Markdown Processing"]
        end
    end
    %% Connections
    Browser --> Router
    Router --> MSAuth & GoogleAuth & Logout
    Router --> LLMHandler & FileH & FormH & FuncH
    LLMHandler --> OpenAI & Azure & Anthropic & Gemini & Groq & Bedrock & Others
    LLMHandler --> SQLite
    FileH --> FileSystem
    FormH --> SQLite
    FuncH --> Features
    Features --> SQLite
    Features --> FileSystem
    %% Styling
    classDef primary fill:#2374ab,stroke:#2374ab,color:white
    classDef secondary fill:#ff7e67,stroke:#ff7e67,color:white
    classDef storage fill:#78a55a,stroke:#78a55a,color:white
    classDef auth fill:#9b5de5,stroke:#9b5de5,color:white
    classDef provider fill:#00b4d8,stroke:#00b4d8,color:white
    class Router,LLMHandler primary
    class FileH,FormH,FuncH secondary
    class SQLite,FileSystem storage
    class MSAuth,GoogleAuth,Logout auth
    class OpenAI,Azure,Anthropic,Gemini,Groq,Bedrock,Others provider
Security
LLM Foundry implements a comprehensive security model with multiple layers of authentication, authorization, and access control.
Authentication Mechanisms
1. Session Management
Refer gramex.yaml
app:
  session:
    samesite: "None" # Browser cookie security
    secure: true # HTTPS only cookies
- Sessions are managed via encrypted cookies using a secure cookie secret
 - HTTPS-only cookies prevent man-in-the-middle attacks
 - SameSite and Secure cookie flags enabled
 - Session IDs are changed on login to prevent session fixation attacks
 
2. Multi-Provider Authentication
The system supports multiple authentication providers:
- Microsoft Azure AD OAuth2 for enterprise authentication
 - Google OAuth2 for Google Workspace users
 
Refer gramex.yaml
llmfoundry/login-ms:
  pattern: /$YAMLURL/login-ms
  handler: OAuth2
  kwargs:
    client_id: $LLMFOUNDRY_AZURE_CLIENT_ID
    client_secret: $LLMFOUNDRY_AZURE_CLIENT_SECRET
llmfoundry-google-auth:
  pattern: /$YAMLURL/googleauth/
  handler: GoogleAuth
  kwargs:
    key: $LLMFOUNDRY_GOOGLE_KEY
    secret: $LLMFOUNDRY_GOOGLE_SECRET
JWT-based authentication for token-based API access is supported. See the Token API.
3. API Key Authentication
When authenticating with LLM providers, multiple API key validation methods are supported, based on each provider's requirements:
- Bearer token authentication (OpenAI style)
 - API key headers (Azure style)
 - Custom headers (Anthropic, Google style)
 
Access Control
1. User Classification
Users are classified into:
- Internal users: Domains like @straive.com, @gramener.com
 - External users: Specific allowed client domains
 - Each group has different access levels and capabilities
 
2. Rate Limiting
- Error rate limiting (5 errors per minute per user)
 - API request rate limiting
 - Automatic blocking of excessive requests
 
3. Authorization Rules
Pages and APIs can be protected with granular rules:
- User attribute checks
 - Email domain validation
 - Multiple allowed values for attributes
 - Role-based access control
 
Security Best Practices
- HTTPS Enforcement
- Secure cookies
 - HTTPS-only access
 - SSL/TLS encryption
 
 - Token Security
- JWT tokens with HS256 algorithm
 - Token expiration and rotation
 - Secure token validation
 
 - Input Validation
- Request validation
 - Authentication header validation
 - Parameter sanitization
 
 - Error Handling
- Graceful error handling
 - Rate limiting of error responses
 - Sanitized error messages
 
 - Secure Storage
- Credentials stored in environment variables, deployed via CI/CD
 - Environment variable usage
 - Encrypted sensitive data
 
 - Logging
- Secure request logging
 - User action tracking
 - Error monitoring
 
 
