norman

In the realm of ones and zeroes, Lies a friend named Norman, our hero. With a name so plain and sly, He's a clever bot in plain sight, oh my!

https://github.com/kristopherkubicki/norman

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.7%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

In the realm of ones and zeroes, Lies a friend named Norman, our hero. With a name so plain and sly, He's a clever bot in plain sight, oh my!

Basic Info
  • Host: GitHub
  • Owner: KristopherKubicki
  • License: mit
  • Language: Python
  • Default Branch: main
  • Size: 1.17 MB
Statistics
  • Stars: 3
  • Watchers: 2
  • Forks: 1
  • Open Issues: 2
  • Releases: 1
Created almost 3 years ago · Last pushed 8 months ago
Metadata Files
Readme Changelog Contributing Funding License Code of conduct Citation Security Support

README.md

Norman

CI Codecov OpenSSF Scorecard License: MIT Python 3.8 Python 3.9 Python 3.10 Python 3.11 GitHub release

Norman is an open-source chatbot that leverages OpenAI's GPT models to assist and automate communication on various chat platforms like Slack and IRC. The project is built with FastAPI, SQLite, and SQLAlchemy, and is designed to be easily extensible with additional connectors.

krstopher_abstract_readme_header_graphic_for_a_chatbot_software_a578ebda-8121-4195-ba94-7c5128049da3 (1)

Table of Contents

Features

  • Supports multiple chat platforms (e.g., Slack, IRC) through connectors
  • Allows multiple chatbots with different GPT models (e.g., gpt-4.1-mini, o3)
  • Configurable channel filters and actions for automation
  • Minimal Web UI for configuration and management
  • SQLite database for lightweight deployment
  • Authentication and authorization support
  • Extendable with custom connectors

Bots default to the gpt-4.1-mini model for speed. Use o3 when you need deeper reasoning and can tolerate more latency.

Project Structure

  • app: The main application directory
    • api: FastAPI routers and API endpoints
    • core: Core modules like configuration, logging, and exception handling
    • crud: CRUD operations for database models
    • db: Database models and utilities
    • schemas: Pydantic schemas for API validation
    • connectors: Channel connectors (e.g., IRC, Slack)
  • tests: Unit tests and integration tests
  • alembic: Alembic migration scripts and configuration

Getting Started

Prerequisites

  • Python 3.8, 3.9, 3.10, or 3.11
  • pip
  • SQLite
  • PyYAML
  • virtualenv (optional)

Installation

  1. Clone the repository: git clone https://github.com/KristopherKubicki/norman.git cd norman

  2. Set up a virtual environment (optional): python -m venv env source env/bin/activate

  3. Install the required Python packages: pip install -r requirements.txt

Norman automatically enables WAL mode when using SQLite for improved concurrency.

  1. Install the Node.js dependencies used by the front-end and Jest tests: bash npm install

  2. Run Norman once to automatically generate config.yaml with secure defaults. The admin username, email and password will be printed to the console. Take note of these values, edit config.yaml to configure connectors and add your OpenAI API key, then start Norman again.

  3. (Optional) Regenerate the secrets in config.yaml using the provided script:

chmod +x generate_key.sh ./generate_key.sh

You can also edit config.yaml manually to provide your own values. Be sure to add your OpenAI key under openai_api_key.

  1. Run the application with Uvicorn: bash uvicorn app.main:app --host 0.0.0.0 --port 8000 --compression gzip If brotli_asgi is installed and supported by your Uvicorn version, replace gzip with brotli for improved compression.

  2. Open the API documentation in your browser: http://localhost:8000/docs A basic health check endpoint is available at http://localhost:8000/health

Norman emits structured JSON logs that include the timestamp, module and request ID. Sensitive data such as API keys are automatically redacted so these logs can be safely forwarded to monitoring systems.

For more information, refer to the documentation and the contributing guidelines.

Usage

For detailed information on how to use Norman, see the Usage guide. Practical walkthroughs and API calls can be found in the Examples document.

Testing

Automated tests are powered by pytest. The development dependencies are listed in requirements-dev.txt.

bash pip install -r requirements-dev.txt pytest -vv

For front-end components located in the frontend directory, Jest is used alongside React Testing Library. To run these tests you will need Node.js and install the dev dependencies defined in package.json:

bash npm install npm test

For a test coverage report you can additionally run:

bash pytest --cov=./ -vv

Deployment

Norman can be deployed on various platforms, such as on a local server or a cloud provider. For detailed deployment instructions, please refer to our Deployment guide. A separate Docker Deployment guide is available if you prefer running Norman in containers.

Architecture

The architecture of Norman is designed to be modular and scalable. We have a detailed explanation of our architectural principles in our Architecture document, complete with a simple diagram to help you understand the structure.

Extending Norman

Norman is built to be extensible, allowing you to add new connectors, actions, and filters as needed. To learn more about extending Norman, refer to our Extending Norman guide.

Philosophy

We created Norman to provide an open, self-hosted, and open-source solution for accessing large language models like GPT-4. We hope others can build upon and extend Norman to incorporate additional chat technologies and channels. Our philosophy centers on continuous improvement, utilizing automation, and striving for excellence in our project. Learn more about our philosophy in our Philosophy document.

Coding Style

We use pylint with the configuration in .pylintrc and format code using Black. Run make lint before submitting a PR or install pre-commit hooks with pre-commit install to automatically check formatting and linting.

Contributing

We welcome contributions from the community! If you're interested in helping us improve Norman, please refer to our Contributing guide.

Community

Norman is more than just a software project; it's a community of developers and users working together to create something special. To learn more about our community and how to get involved, check out our Community page.

License

Norman is licensed under the MIT License. For more information, see the LICENSE.md file.

Owner

  • Name: Kristopher Kubicki
  • Login: KristopherKubicki
  • Kind: user
  • Location: Chicago, IL
  • Company: OpenBrand

Hi! I'm a technology enthusiast with a background in software and hardware design. I build bots and bot companies!

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
  - family-names: "Kubicki"
    given-names: "Kristopher"
    orcid: "https://orcid.org/0009-0001-8074-6202"
title: "Norman: A Pidgin-powered Chatbot with GPT-4 Integration"
version: 0.2.0
date-released: 2025-06-03
repository-code: "https://github.com/KristopherKubicki/norman"
license: "MIT"

GitHub Events

Total
  • Issues event: 1
  • Delete event: 2
  • Issue comment event: 126
  • Push event: 417
  • Pull request review event: 70
  • Pull request review comment event: 36
  • Pull request event: 401
  • Create event: 204
Last Year
  • Issues event: 1
  • Delete event: 2
  • Issue comment event: 126
  • Push event: 417
  • Pull request review event: 70
  • Pull request review comment event: 36
  • Pull request event: 401
  • Create event: 204

Dependencies

requirements-dev.txt pypi
  • pytest ==6.2.5 development
  • pytest-asyncio ==0.16.0 development
requirements.txt pypi
  • aiofiles *
  • alembic ==1.7.3
  • email-validator *
  • fastapi ==0.68.1
  • gunicorn ==20.1.0
  • httpx ==0.23.0
  • jinja2 ==3.0.3
  • openai *
  • passlib *
  • psycopg2-binary ==2.9.1
  • pydantic ==1.8.2
  • pyjwt *
  • python-dotenv ==0.19.1
  • python-multipart *
  • pyyaml *
  • requests *
  • slack_sdk *
  • sqlalchemy ==1.4.25
  • tiktoken *
  • uvicorn ==0.15.0
setup.py pypi
  • alembic *
  • fastapi *
  • httpx *
  • psycopg2 *
  • requests *
  • sqlalchemy *
  • uvicorn *
.github/workflows/ci_cd.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • codecov/codecov-action v3 composite