Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/logan-anderson/typesafe-openai
https://github.com/logan-anderson/typesafe-openai
Last synced: 27 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/logan-anderson/typesafe-openai
- Owner: logan-anderson
- Created: 2023-07-13T23:12:09.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-12-16T14:58:00.000Z (11 months ago)
- Last Synced: 2023-12-16T15:59:33.309Z (11 months ago)
- Language: TypeScript
- Size: 153 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# typesafe-openai
[![npm version](https://badge.fury.io/js/typesafe-openai.svg)](https://badge.fury.io/js/typesafe-openai)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)# WARNING:
This package is currently being worked on and the API is subject to change. Please do not use this package in production until it is stable.
## Description
This package provides a subclass of the openAI that ensures type safety for function calling using zod. It does so by taking in a zod schema and converting it to a JSON schema that can be understood by the openAI API. It the arguments are also checked against the zod schema to ensure they are valid.
## Installation
npm:
```bash
npm install typesafe-openai
```yarn:
```bash
yarn add typesafe-openai
```pnpm:
```bash
pnpm add typesafe-openai
```## Usage
Before using this package, you must have an openAI API key. You can get one [here](https://platform.openai.com/account/api-keys).
### Force a function call return
Using `functionForce` will force a function call to be returned and will only return the arguments that are defined. This is useful if you want to force your data to be returned in a certain format.
```typescript
import z from "zod";
import { TypeSafeOpenAIApi } from "typesafe-openai";// TypeSafeOpenAIApi extends "OpenAI"
const openai = new TypeSafeOpenAIApi({
apiKey: process.env.OPENAI_API_KEY,
});const args = await openai.createChatCompletionTypeSafe({
messages: [
{
role: "user",
content: "What is the weather like today in Washington DC?",
},
],
model: "gpt-3.5-turbo-0613",
functionForce: {
name: "getWeather",
description: "Get the current weather",
parameters: z.object({
location: z.string().describe("The location to get the weather for"),
format: z
.enum(["F", "C"])
.describe("The format to return the weather in."),
}),
},
});
console.dir(args, { depth: null });
// Outputs: {location: "Washington DC", format: "F"}
```This is the same as:
```typescript
import { Configuration, OpenAIApi } from "openai";
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);openai.createChatCompletion({
messages: [{ role: "user", content: "What is the weather like today?" }],
function_call: { name: "getWeather" },
model: "gpt-3.5-turbo-0613",
functions: [
{
name: "weather",
description: "Get the current weather",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The location to get the weather for",
},
},
},
},
],
});
```## API Reference
TODO:
## Examples
TODO:
## Contributing
TODO:
## Issues
TODO:
## License
TODO:
## Credits
TODO:
## Frequently Asked Questions (FAQ)
TODO: