Skip to content

ryoppippi/typiautil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

typiautil

JSR JSR

A utility library for typia

Funcitons

Utility for OpenAI

typiaResponseFormat

typia version of zodResponseFormat

import { typiaResponseFormat } from "@ryoppippi/typiautil/openai";
import typia, { tags } from "typia";
import OpenAI from "openai";

/** add description as a JSDoc */
type Output = {
  /** id of the entity */
  id: string & tags.Type<'uint32'>;

  /** name of the entity */
  name: string & tags.MinLength<1>;
}

const client = new OpenAI({})
const completion = await client.beta.chat.completions.parse({
  model: "gpt-4o-mini",
  response_format: typiaResponseFormat({
    jsonSchema: typia.json.application<[Output]>(),
    validate: typia.createValidate<Output>(), // or typia.createValidateEquals<Output>()
  }),
  messages: [
    {
      role: "system",
      content: "Extract information and return as the structured data following schema",
    },
  ],
 });

console.log(completion.choices[0].message.parsed);

typiaFunction

typia version of zodFunction

import { typiaFunction } from "@ryoppippi/typiautil/openai";
import typia, { tags } from "typia";
import OpenAI from "openai";

/** add description as a JSDoc */
type Params = {
  id: string & tags.Type<'uint32'>;
  name: string & tags.MinLength<1>;
}

function myFunction(args: Params) {
  return args;
}

const client = new OpenAI({})

const completion = await client.beta.chat.completions.parse({
  model: "gpt-4o-mini",
  tool: [typiaFunction({
    jsonSchema: typia.json.application<[Params]>(),
    validate: typia.createValidate<Params>(), // or typia.createValidateEquals<Params>()
    name: "dummy", // you can specify the name of the function, otherwise it will be the name of the type (in this case, "Params")
    description: "dummy function", // you can specify the description of the function, otherwise it will be the JSDoc of the type (in this case, "add description as a JSDoc")
    function: myFunction, // the function to be called (optional)
   })],
  messages: [
    {
      role: "system",
      content: "use the dummy function",
    },
  ],
});

console.log(completion.choices[0].message.tool_calls[0].function.parsed_arguments);

typiaJsonToOpenAIJsonSchema

Converts JSON Schema generated by Typia to OpenAI ResponseFormat for Structured Outputs.

import { typiaJsonToOpenAIResponse } from "@ryoppippi/typiautil/openai";
import typia, { tags } from "typia";
import OpenAI from "openai";

/** add description as a JSDoc */
type Output = {
  /** id of the entity */
  id: string & tags.Type<'uint32'>;

  /** name of the entity */
  name: string & tags.MinLength<1>;
}

const client = new OpenAI({})

const chat = await client.chat.completions.create({
  model: "gpt-4o-mini",
  response_format: typiaJsonToOpenAIResponse({
    jsonSchema: typia.json.application<[Output]>(),
  }),
  messages: [
    {
      role: "system",
      content: "Extract information and return as the structured data following schema",
    },
  ],
 });

/** parse res as JSON */
const json = typia.json.validateParse<Output>(chat.choices.at(0)?.message.content as string)

console.log(json);

LICENSE

MIT

About

utility functions for typia

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project