npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

asb-openai

v1.0.2

Published

Library that allows you to deploy openAI features in javascript projects more easily

Downloads

81

Readme

asb-gpt

Em Desenvolvimento

Documentação da Classe GPT

OBS: Não gosta de ler? Vá para o final do documento e leia o codigo de exemplo.

A classe GPT é usada para se comunicar com a API OFICIAL disponibilizado OpenAI e tem vários métodos úteis para enviar solicitações de bate-papo e gerenciar o histórico de mensagens.

Construtor

O construtor da classe GPT recebe um objeto de configuração com as seguintes propriedades:

{
  apikey: string, // uma chave de API 
  history?: boolean, // um valor booleano que indica se o histórico de mensagens deve ser mantido (padrão é verdadeiro)
  model?: string, // o nome do modelo, por exemplo: gpt-3.5-turbo (padrão é "gpt-3.5-turbo")
  max_tokens?: number, // o número máximo de tokens que podem ser gerados em uma solicitação de bate-papo (padrão é 500)
}

Observe que quanto maior o numero de tokens, maior é a capacidade de texto na resposta, porém o custo de uso pode ser maior. Também é possivel consultar os modelos disponiveis pela openAI, mas de acordo com a v1 da biblioteca, ainda não é possivel setar o link das API, portanto nem todos estão disponiveis para uso.

//Usando axios

const axios = require('axios');

const OPENAI_API_KEY = 'SUA_CHAVE_DE_API'; // Substitua pela sua chave de API

const config = {
  headers: {
    Authorization: `Bearer ${OPENAI_API_KEY}`,
  },
};

axios.get('https://api.openai.com/v1/models', config)
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });
//Usando fetch

const fetch = require('node-fetch'); // Certifique-se de instalá-lo via npm ou yarn

const OPENAI_API_KEY = 'SUA_CHAVE_DE_API'; // Substitua pela sua chave de API

const url = 'https://api.openai.com/v1/models';

const headers = {
  Authorization: `Bearer ${OPENAI_API_KEY}`,
};

fetch(url, { method: 'GET', headers })
  .then(response => {
    if (!response.ok) {
      throw new Error(`Status: ${response.status}`);
    }
    return response.json();
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });
#usando curl

curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

Consulte o preço de cada modelo aqui

Métodos

setHistory

O método setHistory é usado para adicionar uma mensagem ao histórico de mensagens. Ele recebe um objeto de mensagem com as seguintes propriedades:

{
  role: "user" | "system", // o papel da mensagem
  content: string // o conteúdo da mensagem
}

Se historyLength também for fornecido, ele definirá o comprimento do histórico de mensagens (padrão é 20).

setHistory(message: { role: "user" | "system", content: string }, historyLength?: number): void

getHistory

O método getHistory retorna o histórico de mensagens como uma matriz de objetos de mensagem.

getHistory(): { role: "user" | "system", content: string }[]

clearHistory

O método clearHistory limpa o histórico de mensagens e adiciona a mensagem padrão.

clearHistory(): void

defaultRequestChat

O método defaultRequestChat é usado para enviar uma solicitação de bate-papo padrão. Ele recebe uma string como parâmetro que contém o texto que o modelo deve gerar. Ele retorna um objeto de mensagem com as seguintes propriedades:

{
  role: "assistent", // o papel da mensagem
  content: string // o conteúdo da mensagem
}
defaultRequestChat(prompt: string): Promise<{ role: "user" | "system", content: string }>

Propriedades

A classe GPT possui as seguintes propriedades:

{
  messages: { role: "user" | "system" | "assistent", content: string }[], // uma matriz que contém o histórico de mensagens
  apiKey: string, // a chave de API
  history: boolean, // um valor booleano que indica se o histórico de mensagens deve ser mantido
  model: string, // o nome do modelo GPT-3.5-Turbo
  max_tokens: number, // o número máximo de tokens que podem ser gerados em uma solicitação de bate-papo
  historyLength: number, // o comprimento do histórico de mensagens
  defaultContentMessage: string, // a mensagem padrão
  defaultConfig: { model: string, max_tokens: number } // a configuração padrão para as solicitações de bate-papo
}

Exemplo de uso

import { GPT } from "./gpt";
require('dotenv').config()

const gpt = new GPT({ apikey: process.env.API_KEY });

gpt.setHistory({ role: "system", content: "Você sempre termina um texto com !!!" });

const res = await gpt.defaultRequestChat("Como você está?");

console.log(res); // { role: "system", content: "Estou bem, e você? !!!" }

Neste exemplo, a classe GPT é importada do módulo gpt.ts. É criada uma instância da classe, passando a chave de API do modelo GPT-3.5-Turbo como parâmetro. Em seguida, é adicionada uma mensagem ao histórico de mensagens usando o método setHistory e é feita uma solicitação de bate-papo padrão usando o método defaultRequestChat. O resultado é registrado no console.

Codigo De Exemplo

import { ChatConfig, ChatMessage, ConfigGPT, GPT } from "./src/asb-gpt";
require("dotenv").config();

function waitForFiveSeconds() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("A ação foi realizada após 5 segundos!");
    }, 5000); // 5000 milissegundos = 5 segundos
  });
}

// Função de teste para o método setHistory e getHistory
async function testSetHistory() {
  const config = {
    apikey: process.env.KEY,
  };

  const gpt = new GPT(config);

  const historyLength = 10;

  gpt.setHistory(
    { role: "system", content: "your not speak english!" },
    historyLength
  );

  gpt.setHistory({ role: "assistant", content: "Hi there!" }, historyLength);
  gpt.setHistory({ role: "user", content: "How are you?" }, historyLength);

  console.log("Messages:" + "\n" + gpt.getHistory());
}

//limpando o historico
function testclearHistory() {
  const gpt = new GPT({ apikey: process.env.KEY });
  gpt.clearHistory(); //Metodo void
}

// Função de teste para o método defaultRequestChat
async function testDefaultRequestChat() {
  const options: ConfigGPT = {
    history: true /*Opcional */,
    model: "gpt-3.5-turbo" /*Opcional */,
    max_tokens: 200 /*Opcional */,
    apikey:
      process.env
        .KEY /*Obrigatorio, caso omitido, será retornado um erro da API*/,
  };

  const gpt = new GPT(options);

  const messages = [
    "olá",
    "meu nome é igor",
    "Vou te chamar de IA, tudo certo?",
    "qual seu nome?",
  ];

  for (let i = 0; i < messages.length; i++) {
    const element = messages[i];

    try {
      console.log(gpt.getHistory()); // mostrando o historico
      const response = await gpt.defaultRequestChat(element);
      console.log("Response:", response);
      console.log("\n");

      await waitForFiveSeconds(); // aguardando 5 segundos
    } catch (error) {
      console.error("Erro:", error);
    }
  }
}

// Função de teste para o método requestChat
async function testRequestChat() {
  const gpt = new GPT({ apikey: process.env.KEY });

  const customConfig: ChatConfig = {
    model: "gpt-3.5-turbo",
    messages: [
      { role: "system", content: "Você não fala ingles, apenas portugues" },
      { role: "assistant", content: "Sure, here's a fun fact!" },
      { role: "user", content: "Tell me something interesting." },
    ],
  };

  try {
    const response = await gpt.requestChat(customConfig);
    console.log("Response:", response.data);
  } catch (error) {
    console.error("Error:", error);
  }
}

function explicacao() {
  //importe o gpt com import {GPT} from "asb-gpt";

  /*
        ChatMessage {
            role: string;
            content: string;
        }
    */

  /*
        ChatConfig {
            model: string;
            messages?: ChatMessage[];
            temperature?: number;
            max_tokens?: number;
            top_p?: number;
            frequency_penalty?: number;
            presence_penalty?: number;

        }
    */

  /*
        ConfigGPT = {
            history?: boolean | undefined;
            model?: string | undefined;
            max_tokens?: number | undefined;
            apikey: string | undefined;
        }
    */

  const config: ConfigGPT = {
    apikey: process.env.Key, // Ou "chave_api_key"
    history: true,
    model: "gpt-3.5-turbo",
    max_tokens: 500,
  };
  // Apenas API Key obrigatorio, caso for utilizar defaultRequestChat.
  // Para Utilizar requestChat, deixar tudo menos API key default para melhor legibilidade

  const gpt = new GPT(config); /*Criando instancia */

  gpt.setHistory(
    { role: "system", content: "você é um assistente prestativo" },
    20 /*<-- historyLength*/
  );
  gpt.setHistory(
    {
      role: "assistent",
      content: "eu sou um assistente prestativo",
    },
    50
  );
  gpt.setHistory({
    role: "system",
    content: "você é um assistente prestativo",
  });
  //use setHistory para manipular o array de historico.
  //use um numero inteiro no historyLength para manipular o tamando do array.
  //por padrão, o tamanho é 20

  /*
    roles = {
        system: "comportamento do sistema",
        assistent: "resposta do gpt",
        user: "mensagem do usuario"
    }
  */

  gpt.getHistory(); //retorna o array de historico
  gpt.clearHistory(); // retorna o array para o valor default.

  const respostaPadrao = async () => await gpt.defaultRequestChat("Olá");
  /*
    chame de forma assincrona o metodo defaultRequestChat(body: string)
    para fazer uma requisição com os valores passados no construtor da classe.
    Use os getters para manipular os atributos da classe.
    OBS: Metodo mais lento e pesado. Retorno na tipagem da função.
  */

  const options: ChatConfig = {
    model: "gpt-3.5-turbo",
    messages: [
      {
        role: "system",
        content: "You are a helpful assistant",
      },
    ],
    temperature: 1,
    max_tokens: 256,
    top_p: 1,
    frequency_penalty: 0,
    presence_penalty: 0,
  };

  const resposta = async () => await gpt.requestChat(options);
  /*
    Use requestChat(config: ChatConfig) para uma requisição personalizada.
    Metodos getters não funcionam nesse metodo, crie sua propia logica!
    Para manter o historico, faça o push dos dados no array messages.
    OBS: Respeite a tipagem e evite problemas.
  */
}

// Chame as funções de teste aqui
//testSetHistory();
//testDefaultRequestChat();
//testRequestChat();