nestjs-generative-ai

A selection of useful one-liner decorators, pipes and services to boost your NestJS APIs with Generative AI sweetness

NPM Downloads Stargazers Issues License

Nest Logo

NestJS Generative AI

A selection of useful one-liner decorators, pipes and services to boost your NestJS APIs with Generative AI sweetness
Explore the docs »

View Demos · Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. FAQs
  5. Roadmap
  6. Contributing
  7. License
  8. Acknowledgments

About The Project

Features

  • Payload Validation: Reject payload data, for instance for freetext form fields, which don't match specifications with @AISpecifications
  • Payload Suggestion: Generate feedback for unmet specifications on payload data, through clarifying questions for the user, with @AIFeedback
  • Document Summary: Get a 5 sentences summary along any uploaded document with AISummarizeDocumentPipe

... and more to come!

Getting Started

Prerequisites

This lib was tested only on and thus require Node.js >=21.6.1, NestJS ^10.3.3

You will also need both the library and class-transformer and @nestjs/config to make the magic happen

Installation

# with npm
npm install nestjs-generative-ai
# with yarn
yarn add nestjs-generative-ai
# with pnpm
pnpm add nestjs-generative-ai

Configuration

Configure the library in the module you want to use it in. If you want to use it globally, configure it in the main app module.

The library currently only works with OpenAI so you will need to set the OPENAI_API_KEY which you will find on OpenAI's website and set in your environment variables.

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { GenerativeAIModule } from 'nestjs-generative-ai';

@Module({
  imports: [
    ConfigModule.forRoot(),
    GenerativeAIModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        modelApiKey: configService.get('OPENAI_API_KEY') as string,
      }),
      inject: [ConfigService],
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

If you also want to enable validation globally, you should configure the ValidationPipe in your main.ts file

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe({ transform: true }));
  await app.listen(3000);
}
bootstrap();

Usage

FAQs

No FAQ at the moment

Roadmap

  • [x] Add first 3 decorators and services
  • [ ] Allow customizing the chosen LLM
  • [ ] Allow customizing the prompt used for a specific decorator instance or globally
  • [ ] Add new awesome decorators and services?

Contributing

We are just getting started on this project and would highly appreciate contributions

License

Distributed under the MIT License. See LICENSE for more information.

Acknowledgments