PawanOsman / GoogleBard

GoogleBard - A reverse engineered API for Google Bard chatbot for NodeJS
https://bard.google.com
MIT License
415 stars 57 forks source link
ai api assistant assistant-chat-bots chatgpt google google-bard prompt reverse-engineering scraping

GoogleBard

An NPM module for creating GoogleBard chatbot using Bard's reverse-engineered API. With reverse-engineered API functionalities, it empowers developers to harness the full potential of Bard.


npm version GitHub issues GitHub forks

Table Of Contents


Features


Prerequisite - How to get cookies?*

  1. Install Cookie-Editor extension.
  2. Go to https://bard.google.com and login.
  3. Click on the extension icon and copy a cookie starting with __Secure-{account_number}PSID.
    • For example, __Secure-1PSID
    • Ensure you are copying the correct cookie corresponding to the account number, which can be found in the URL as bard.google.com/u/{account_number}.
    • If your account number is /u/2, search for the cookie named __Secure-2PSID.
    • If your account number is /u/3, search for the cookie named __Secure-3PSID.
  4. Paste the cookie in your code.


Installation

To install the package, run the following command:

npm install googlebard


Documentation

1. How To Initialise The Bot?

import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies);

// other code - scroll below to view different functionalities available


2. How To Configure Bot With Optional Settings?

  1. inMemory: optional - if true will not save conversations to disk
  2. savePath: optional - path to save conversations (e.g './conversations.json')
  3. proxy: optional - handles proxy configurations
import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
    inMemory: false,
    savePath: "./conversations.json",
    proxy: {
        host: process.env.PROXY_HOST,
        port: process.env.PROXY_PORT,
        auth: {
            username: process.env.PROXY_USERNAME,
            password: process.env.PROXY_PASSWORD,
        },
        protocol: "http",
    },
});

// other code


3. How To Ask Bot?

To ask bot questions, you may use the bot.ask(<prompt>, <conversation_id>:optional) functionality. A usage of it is given below:

import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies);
let conversationId = "some_random_id"; // optional: to make it remember the conversation

let response = await bot.ask("What is my name?", conversationId); // conversationId is optional
console.log(response);
>> I don't know your name. I am a large language model, also known as a conversational AI or cha...


Using the same conversation_id again will allow the bot to remember what you said earlier in the conversation
import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
    inMemory: false,
    savePath: "./conversations.json", // this is being done to save crucial information about the conversation so the bot remembers it
});

let conversationId = "test_id";

let response = await bot.ask("My name is Mehul", conversationId);
console.log(response);
>> Hi Mehul, it's nice to meet you! I'm Bard...
import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
    inMemory: false,
    savePath: "./conversations.json",
});

let conversationId = "test_id";

let response = await bot.ask("What is my name?", conversationId)
console.log(response);
>> I know your name is Mehul. You told me earlier.


4. How To Ask Bot And Simulate Response Streaming?

To ask bot questions and simulate response streaming, you can either implement it through custom logic or use the built-in bot.askStream(<callback>, <content>, <conversation_id>:optional). A usage of it is given below:

import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
    inMemory: false,
    savePath: "./conversations.json",
});
let conversationId = "test_id";

await bot.askStream(
    (res) => {
        console.log(res);
    }, // returns the response
    "Hello?",
    conversationId,
);
>> Your 
name 
is 
Mehul. 
I 
will 
remember 
that 
for 
the
next 
time 
we 
speak.
Response streaming functionality is used to show as if the bot itself is typing


5. How To Reset A Conversation?

To reset a conversation, you may use the bot.resetConversation(<conversation_id>) functionality. This functionality allows the user to make the bot forget about previous conversations provided they are all under the same conversation_id. A usage of it is given below:

import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
  inMemory: false,
  savePath: "./conversations.json",
});

let conversationId = "test_id"; // notice id is the same as that used in the above example

let response = await bot.ask("what is my name?", conversationId);
console.log(response);
>> You told me your name is Mehul.
import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
  inMemory: false,
  savePath: "./conversations.json",
});

let conversationId = "test_id";
bot.resetConversation(conversationId) // resetting conversation

let response = await bot.ask("what is my name?", conversationId);
console.log(response);
>> I understand that you are trying to get me to say your name, but...


6. How To Get All Your Previous Conversations?

In order to retrieve all your conversations, you may either implement the functionality through a custom logic or simply use the built-in bot.getAllConversations(). .A usage of it is given below:

import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
    savePath: "./conversations.json",
});

let response = bot.getAllConversations()
console.log(response) // returns an array of different conversations


7. How To Get A Single Conversation By ID?

import { Bard } from "googlebard";

let cookies = `__Secure-1PSID=<YOUR_COOKIE>`;
let bot = new Bard(cookies, {
  inMemory: false,
  savePath: "./conversations.json",
});
let conversationId = "test_id";

await bot.waitForLoad();
let response = bot.getConversationById(conversationId);
console.log(response); // returns an object


Examples

A simple example has been added to the examples directory which shows how GoogleBard can be used to create a CLI chatbot. More such examples are yet to be added, so stay tuned!