sam-goodwin / ts-chat

Use native TypeScript functions, types and comments as ChatGPT Functions

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

About

Use native TypeScript functions, types and comments as ChatGPT Functions


Languages

Language:TypeScript 99.1%Language:JavaScript 0.9%