0.0.15 • Published 9 months ago

ts-chat v0.0.15

Weekly downloads
-
License
MIT
Repository
-
Last release
9 months ago

ts-chat

ts-chat is a TypeScript plugin that adds support for generating OpenAI's GPT Functions from native TypeScript functions, types and comments.

import { ChatClient, system, user } from "ts-chat";

const client = new ChatClient({
  apiKey: process.env.OPEN_AI_KEY,
});

await client.chat(
  {
    /**
     * Adds two numbers.
     *
     * @param a the first number
     * @param b the second number
     */
    add: (a: number, b: number) => a + b,
  },
  {
    messages: [
      system`You are a calculator.`,
      user`what is the sum of 1 and 2?`,
    ],
  }
);

Types and comments can be used fluidly and natively. E.g. here's how we can define integers and natural numbers. Constraints are parsed from the comments and can be extended/overriden:

/**
 * @type int
 */
type int = number;

/**
 * @min 1
 */
type nat = int;

Use interfaces to describe well-typed structured data with well-constrained properties:

interface Person {
  /**
   * @pattern [a-zA-z]+
   * @minLength 3
   */
  name: string;
}

Installation

First, install ts-chat:

npm install ts-chat

Next, you need to configure ts-patch to enable plugin support in the TypeScript compiler and configure the ts-chat/plugin.

There are two options for this set up:

  1. permanently patch using the NPM prepare script
  2. patch when you run (e.g. when running ts-node, tsc, jest, etc.)

Option 1 - permanently patch

Run the setup script to install ts-patch, configure prepare and install ts-chat/plugin in tsconfig.json

npx ts-chat setup

This script performs the following steps:

  1. Installs ts-node and ts-patch
  2. Add the prepare script to your package.json to run the ts-patch install whenever you install dependencies:
"scripts": {
  "prepare": "ts-patch install"
}
  1. Add the ts-chat/plugin to your tsconfig.json - without this, the chat function can not receive the JSON schema and descriptions of your functions.
{
  "compilerOptions": {
    "plugins": [
      {
        "transform": "ts-chat/plugin"
      }
    ]
  }
}

Option 2 - "Live Compiler"

From ts-patch's documentation on "Live Compilation":

The live compiler patches on-the-fly, each time it is run.

Via commandline: Simply use tspc (instead of tsc)

With tools such as ts-node, webpack, ts-jest, etc: specify the compiler as ts-patch/compiler

Example:

ts-node-esm --compiler ts-patch/compiler ./src/index.ts

How it Works

Functions are converted into their corresponding OpenAI Function definition:

{
  "name": "add",
  "description": "Adds two numbers",
  "parameters": {
    "type": "object",
    "properties": {
      "a": { "type": "number", "description": "first argument" },
      "b": { "type": "number", "description": "second arguments" }
    }
  }
}

The descriptions are derived from the typedoc comments and the parameters JSON schema is derived from the types of the Function's arguments.

0.0.15

9 months ago

0.0.14

9 months ago

0.0.13

9 months ago

0.0.12

9 months ago

0.0.11

9 months ago

0.0.10

9 months ago

0.0.9

9 months ago

0.0.8

9 months ago

0.0.7

9 months ago

0.0.6

9 months ago

0.0.5

9 months ago

0.0.4

9 months ago

0.0.3

9 months ago

0.0.2

9 months ago

0.0.1

9 months ago

0.0.0

10 months ago