Skip to content

Repository files navigation

Ally - The Company Assistant

Automated life, liberate you!

Ally App Ally Landing Page

Ally is a customizable AI assistant that can be used in both professional and private environments to increase productivity and simplify complex tasks. The application features a classic, user-friendly interface with an input field, a task list, and a context area – just as you'd expect from modern generative AI apps.

Why Ally?

In today's technological landscape, many companies face a dual challenge:

  1. Technology Skepticism: Employees often have concerns or feel overwhelmed about effectively using new AI technologies.
  2. Data Protection & Security: The unregulated use of external AI tools poses risks to intellectual property and compliance with data protection regulations like GDPR.

Ally solves these problems by providing a secure, centralized, and user-friendly AI platform. It lowers the entry barrier for employees and gives companies back control over their data, as data protection and processing within the EU are guaranteed.

Features

Ally serves as a central hub for a variety of tasks, increasing efficiency in daily work.

  • ✨ Personalized Assistance: Ally stores preferences and information to deliver tailor-made responses.
  • 📄 Document Management:
    • Search: Answers detailed questions about uploaded documents (PDF, Word, etc.).
    • Summarize: Extracts the most important information from long texts.
    • Compare: Highlights differences and similarities between two documents.
  • 🖼️ Image Analysis: Identifies and describes content, patterns, and objects in images.
  • 🌐 Web Interaction:
    • Analyze Webpages: Extracts and processes content directly from a URL.
    • Web Search: Conducts internet research and integrates the results directly into tasks.
    • Perplexity Research: Advanced AI-powered research capabilities for comprehensive information gathering.
  • ✅ Task Management: Creates and manages to-do lists and reminds you of due tasks.
  • 🚀 Microsoft Teams Integration: Ally can be embedded as a tab application in Microsoft Teams and supports Single Sign-On (SSO) for a seamless login experience.
  • 🔒 Private Mode: Ally supports a private mode where all data is stored in a separate database collection, enabling a strict separation between business and private data.
  • 🛡️ Data Privacy Option: In the settings, data processing and storage can be restricted to the EU. Note: Not all features may be available when processing is exclusively within the EU.
  • 📊 Statistics Page: Ally offers a dedicated page for statistics – for both private and business modes. This gives users and admins a transparent overview of usage and activities.
  • 🔧 MCP Integration: Ally supports the Model Context Protocol (MCP) for extending capabilities with external tools and services, providing seamless integration with third-party APIs and services.

Technology Stack

Ally is built on a modern and robust technology stack:

Getting Started: Local Development Environment

Follow these steps to set up and run Ally on your local machine.

1. Prerequisites

  • Node.js (Version 18 or higher)
  • Yarn as package manager
  • Access to a MongoDB database
  • API keys for the required services

2. Clone the Project

git clone https://github.com/fellowork/ally-app.git
cd ally-app

3. Install Dependencies

yarn install

4. Set Up Environment Variables

Copy the .env.example file to a new file named .env.local and fill in the required values.

cp env.example .env.local

You will need to configure the following environment variables:

Core Configuration

  • MONGODB_URI: Your connection string to the MongoDB database.
  • JWT_SECRET: A self-generated, secure password (secret) for creating JWTs for internal API authentication.

Authentication (Auth0)

  • AUTH0_SECRET: A long, unpredictable secret for Auth0 session encryption.
  • AUTH0_BASE_URL: Your application's base URL (e.g., https://localhost:3000 for development).
  • AUTH0_ISSUER_BASE_URL: Your Auth0 domain URL (e.g., https://your-domain.auth0.com).
  • AUTH0_CLIENT_ID: Your Auth0 application client ID.
  • AUTH0_CLIENT_SECRET: Your Auth0 application client secret.

AI Services

  • AZURE_AI_API_KEY: Your Azure OpenAI API key.
  • AZURE_OPENAI_ENDPOINT: Your Azure OpenAI endpoint URL.
  • AZURE_OPENAI_API_VERSION: API version (e.g., 2025-01-01-preview).
  • AZURE_OPENAI_API_INSTANCE_NAME: Your Azure OpenAI instance name.
  • AZURE_OPENAI_GPT4_DEPLOYMENT_NAME: Deployment name for GPT-4.
  • AZURE_OPENAI_GPT4_MINI_DEPLOYMENT_NAME: Deployment name for GPT-4 Mini.
  • AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME: Deployment name for embeddings.
  • AZURE_OPENAI_EMBEDDINGS_API_VERSION: API version for embeddings (e.g., 2023-05-15).
  • AZURE_OPENAI_WHISPER_DEPLOYMENT_NAME: Deployment name for Whisper.
  • AZURE_OPENAI_WHISPER_API_VERSION: API version for Whisper (e.g., 2024-06-01).

Search Services

  • BRAVE_API_KEY: API key from Brave Search for the web search feature.
  • PERPLEXITY_API_KEY: API key from Perplexity for the research features.

AWS Services (Required for File Storage)

  • AWS_ACCESS_KEY_ID: Your AWS access key ID.
  • AWS_SECRET_ACCESS_KEY: Your AWS secret access key.
  • AWS_REGION: Your AWS region (e.g., us-east-1, eu-west-1).
  • BUCKET_NAME: Base name for your S3 buckets (without -business/-private suffix)
  • FROM_ADDRESS: Your sender support email address (for feedback emails).
  • SUPPORT_ADDRESS: Your destination email address for support requests.

Optional: Application Footer URLs

  • IMPRINT_URL: URL for your impressum/imprint page.
  • PRIVACY_URL: URL for your privacy policy page.
  • TERMS_URL: URL for your terms of service page.
  • WEBSITE_URL: URL for your main website.
  • GITHUB_URL: URL for your GitHub repository.

Optional: Microsoft Teams Integration

  • AZURE_CLIENT_ID: Azure App Registration client ID for Teams SSO.
  • AZURE_CLIENT_SECRET: Azure App Registration client secret for Teams SSO.

MCP Configuration Management

  • MCP_CONFIG_SECRET: A 64-character hexadecimal string used for encrypting/decrypting MCP configuration data.

5. Configure Azure OpenAI

Ally requires Azure OpenAI Services to function. Follow these steps to set up your Azure OpenAI instance:

  1. Create an Azure OpenAI Resource: Go to the Azure Portal and create an Azure OpenAI resource.

  2. Deploy Required Models: In your Azure OpenAI instance, deploy the following models:

    • GPT-4 (for main AI conversations)
    • GPT-4 Mini (for lighter tasks)
    • text-embedding-3-large (for embeddings)
    • Whisper (for speech-to-text functionality)
  3. Get Your Configuration Values:

    • AZURE_AI_API_KEY: Found in your Azure OpenAI resource keys
    • AZURE_OPENAI_ENDPOINT: Your Azure OpenAI endpoint URL
    • AZURE_OPENAI_API_INSTANCE_NAME: Your Azure OpenAI instance name
    • AZURE_OPENAI_GPT4_DEPLOYMENT_NAME: The deployment name you chose for GPT-4
    • AZURE_OPENAI_GPT4_MINI_DEPLOYMENT_NAME: The deployment name you chose for GPT-4 Mini
    • AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME: The deployment name for text-embedding-3-large
    • AZURE_OPENAI_WHISPER_DEPLOYMENT_NAME: The deployment name for Whisper
  4. Alternative LLM Providers: If you want to use other providers (OpenAI directly, Anthropic, etc.), you'll need to modify the LLM provider factory in src/modules/ai/llms/LLMProviderFactory.ts.

6. Configure AWS Services

Ally uses AWS S3 for file storage (documents, images) and AWS SES for email functionality. Follow these steps to set up your AWS services:

  1. Create AWS Account: If you don't have one, create an AWS account.

  2. Create IAM User: Create an IAM user with programmatic access and the following permissions:

    • AmazonS3FullAccess (or a custom policy for your specific S3 bucket)
    • AmazonSESFullAccess (for email functionality)
  3. Create S3 Buckets: Ally uses separate buckets for business and private data. Create two S3 buckets in your preferred region:

    • your-bucket-name-business (for businessfiles)
    • your-bucket-name-private (for private files)
  4. Configure SES: Set up Amazon SES in your region and verify your sending domain/email addresses.

  5. Get Your AWS Configuration:

    • AWS_ACCESS_KEY_ID: From your IAM user
    • AWS_SECRET_ACCESS_KEY: From your IAM user
    • AWS_REGION: The region where your S3 bucket and SES are configured
    • BUCKET_NAME: The name of your S3 bucket (without -business/-private suffix)
    • FROM_ADDRESS: Your sender support email address
    • SUPPORT_ADDRESS: Your destination email address for support requests

7. Initialize Prisma

Generate the Prisma client required for the database connection.

npx prisma generate

8. Start the Development Server

Now you can start the application in development mode.

yarn run dev

The application should now be accessible at http://localhost:3000.

Optional Configuration: Microsoft Teams Integration

To use Ally as an application in Microsoft Teams with Single Sign-On (SSO), additional configuration steps are necessary.

  1. Azure App Registration & SSO Configuration: You need to create and configure an application registration in the Microsoft Azure Portal for SSO with Teams. The official Microsoft documentation provides detailed instructions for this:

  2. Environment Variables: Ensure that the optional keys AZURE_CLIENT_ID and AZURE_CLIENT_SECRET are set in your .env file (as mentioned in step 4 above).

MCP (Model Context Protocol) Configuration Management

Ally supports MCP to extend its capabilities with external tools and services. MCP allows you to connect Ally to third-party APIs, seamlessly integrating them into the AI assistant's workflow.

Admin Configuration Interface

Administrators can manage MCP configurations through a dedicated admin interface that provides:

  • User-specific Configuration: Set individual MCP configurations for specific users
  • Global Configuration: Apply MCP settings to all users at once
  • Secure Storage: All configurations are encrypted and stored securely in the database
  • Dynamic Tool Loading: Users only receive tools defined in their configuration when sending messages

Security Features

  • Encryption: All MCP configurations are encrypted using AES-256-GCM before storage
  • Environment Variable: The MCP_CONFIG_SECRET environment variable provides the encryption key
  • Admin-only Access: Only administrators can view and modify MCP configurations
  • Secure Key Management: Encryption keys are never stored in the database

Configuration Format

MCP configurations follow this JSON structure:

{
  "mcpServers": {
    "server-name": {
      "type": "sse",
      "url": "https://api.example.com/mcp/...",
      "headers": {
        "Authorization": "Bearer your-api-key"
      }
    }
  }
}

Required Environment Variable

  • MCP_CONFIG_SECRET: A 64-character hexadecimal string used for encrypting/decrypting configuration data

The admin interface provides a user-friendly way to manage these configurations without requiring direct database access or manual JSON editing.

Licensing

Ally is available under a dual license:

  • AGPLv3 – For public and open-source use with obligation to disclose source code when making changes.
  • Commercial License – For companies that want to use or extend Ally without having to disclose their changes.

For commercial licensing, contact us at: info@fellowork.de

Contributions

By submitting a contribution to this project (e.g., via Pull Request), you agree to the terms in the CONTRIBUTER.txt file. Please read this carefully before contributing.

About

Ally is a customizable AI assistant that can be used in both professional and private environments to increase productivity and simplify complex tasks. The application features a classic, user-friendly interface with an input field, a task list, and a context area – just as you'd expect from modern generative AI apps.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages