xsAI v0.2 is now available! Read Announcement
xsAI0.3.0-beta.5

Tool Calling

Connect LLMs to external data and systems.

install sizeminified sizeminzipped size
npm i @xsai/tool

Examples

tool

accepts a StandardSchemaV1, automatically infers the type.

For convenience, we use valibot as an example.

But this package uses xsschema internally, so it supports any schema library that xsschema supports: e.g. zod, valibot, arktype, etc.

See xsschema for more information.

These below examples require you to install a standard schema to json schema parser (a separate package). As they are not provided by zod or valibot natively.

Read more about them here

import {  } from '@xsai/generate-text'
import {  } from '@xsai/tool'
import {  } from 'node:process'
import * as  from 'valibot'
 
const  = await ({
  : 'Get the weather in a location',
  : ({  }) => .({
    ,
    : 42,
  }),
  : 'weather',
  : .({
    : .(
      .(),
      .('The location to get the weather for'),
    ),
  }),
})
 
const {  } = await ({
  : .!,
  : 'https://api.openai.com/v1/',
  : 2, 
  : [
    {
      : 'You are a helpful assistant.',
      : 'system',
    },
    {
      : 'What is the weather in San Francisco?',
      : 'user',
    },
  ],
  : 'gpt-4o',
  : [], 
})

rawTool

accepts a JsonSchema, execute params type to be defined manually.

import {  } from '@xsai/generate-text'
import {  } from '@xsai/tool'
import {  } from 'node:process'
 
const  = <{ : string }>({
  : 'Get the weather in a location',
  : ({  }) => .({
    ,
    : 42,
  }),
  : 'weather',
  : {
    : false,
    : {
      : {
        : 'The location to get the weather for',
        : 'string',
      },
    },
    : [
      'location',
    ],
    : 'object',
  },
})
 
const {  } = await ({
  : .!,
  : 'https://api.openai.com/v1/',
  : 2, 
  : [
    {
      : 'You are a helpful assistant.',
      : 'system',
    },
    {
      : 'What is the weather in San Francisco?',
      : 'user',
    },
  ],
  : 'gpt-4o',
  : [], 
})

Object

You can also pass an object directly without installing @xsai/tool.

import type { Tool } from '@xsai/shared-chat'
 
import {  } from '@xsai/generate-text'
import {  } from 'node:process'
 
const  = {
  : (({  }) => .({
    ,
    : 42,
  })) as Tool['execute'], 
  : {
    : 'Get the weather in a location',
    : 'weather',
    : {
      : false,
      : {
        : {
          : 'The location to get the weather for',
          : 'string',
        },
      },
      : [
        'location',
      ],
      : 'object',
    },
    : true,
  },
  : 'function',
} satisfies Tool
 
const {  } = await ({
  : .!,
  : 'https://api.openai.com/v1/',
  : 2, 
  : [
    {
      : 'You are a helpful assistant.',
      : 'system',
    },
    {
      : 'What is the weather in San Francisco?',
      : 'user',
    },
  ],
  : 'gpt-4o',
  : [], 
})
Edit on GitHub

Last updated on

On this page