EvanZhouDev / bard-ai

A lightweight library to access Google Bard.
https://www.npmjs.com/package/bard-ai
GNU General Public License v3.0
117 stars 31 forks source link

Can't generate response when using old chat export only works with new chat #24

Closed Nessie-Dev closed 1 year ago

Nessie-Dev commented 1 year ago

when i use old chat export it only returns "Google Bard encountered an error )]}'

39 [["wrb.fr",null,null,null,null,[13]]] 58 [["di",8769],["af.httprm",8768,"6620395296999733811",0]] 25 [["e",4,null,null,134]] . at queryBard (file:///home/runner/XaviaBot/node_modules/bard-ai/index.js:88:15) at processTicksAndRejections (node:internal/process/task_queues:96:5)"here's my code:import Bard from "bard-ai"; import sqlite3 from "sqlite3"; import fetch from 'node-fetch' global.fetch = fetch;

Bard.init("YAgdpqonMlUB0ELzDB_hFNjqXtv-4iXn29DaSsr-abQGyVy8rvehwyE8Q0EfyvBGbOCmQw.");

const db = new sqlite3.Database("database.db");

db.run(CREATE TABLE IF NOT EXISTS users ( uid TEXT PRIMARY KEY, conversationID TEXT, responseID TEXT, choiceID TEXT, _reqID TEXT ));

async function generateResponse(prompt, uid) { prompt = decodeURIComponent(prompt);

if (!prompt) { throw new Error("Please provide a prompt."); }

if (!uid) { const response = await Bard.askAI(prompt, { useJSON: true }); const images = response.images ? response.images.map((image) => image.url) : []; const contentWithoutImages = response.content?.replace(/![.?]([^)]+)\n/g, "") || response.content; const modifiedResponse = { content: contentWithoutImages, ...(images.length > 0 && { images }), };

return modifiedResponse;

}

try { const userData = await getUserData(uid); console.log(userData)

if (userData) {
  const { conversationID, responseID, choiceID, _reqID } = userData;
  const userChat = new Bard.Chat({ conversationID, responseID, choiceID, _reqID });
  const response = await userChat.ask(prompt, { useJSON: true });
  const ID = userChat.export();
  const images = response.images ? response.images.map((image) => image.url) : [];
  const contentWithoutImages = response.content?.replace(/\!\[.*?\]\([^)]+\)\n*/g, "") || response.content;
  const modifiedResponse = {
    content: contentWithoutImages,
    ...(images.length > 0 && { images }),
  };

  await updateUserData(uid, {
    conversationID: ID.conversationID,
    responseID: ID.responseID,
    choiceID: ID.ids.choiceID,
    _reqID: ID._reqID,
  });

  return modifiedResponse;
} else {
  const newChat = new Bard.Chat();
  const response = await newChat.ask(prompt, { useJSON: true });
  const ID = newChat.export();
  const images = response.images ? response.images.map((image) => image.url) : [];
  const contentWithoutImages = response.content?.replace(/\!\[.*?\]\([^)]+\)\n*/g, "") || response.content;
  const newUser = {
    uid: uid,
    conversationID: ID.conversationID,
    responseID: ID.responseID,
    choiceID: ID._reqIDchoiceID,
    _reqID: ID._reqID,
  };

  await createUserData(newUser);

  const modifiedResponse = {
    content: contentWithoutImages,
    ...(images.length > 0 && { images }),
  };

  return modifiedResponse;
}

} catch (error) { console.error("Failed to generate response:", error); throw new Error("Failed to generate response."); } }

async function getUserData(uid) { return new Promise((resolve, reject) => { db.get("SELECT * FROM users WHERE uid = ?", uid, (err, row) => { if (err) { console.error("Failed to retrieve user data:", err); reject(err); } else { resolve(row); } }); }); }

async function createUserData(userData) { return new Promise((resolve, reject) => { db.run( "INSERT INTO users (uid, conversationID, responseID, choiceID, _reqID) VALUES (?, ?, ?, ?, ?)", [userData.uid, userData.conversationID, userData.responseID, userData.choiceID, userData._reqID], (err) => { if (err) { console.error("Failed to create user data:", err); reject(err); } else { resolve(); } } ); }); }

async function updateUserData(uid, userData) { return new Promise((resolve, reject) => { db.run( "UPDATE users SET conversationID = ?, responseID = ?, choiceID = ?, _reqID = ? WHERE uid = ?", [userData.conversationID, userData.responseID, userData.choiceID, userData._reqID, uid], (err) => { if (err) { console.error("Failed to update user data:", err); reject(err); } else { resolve(); } } ); }); }

async function resetChat(uid) { try { await deleteUserData(uid); } catch (error) { console.error("Failed to reset chat:", error); throw new Error("Failed to reset chat."); } }

async function deleteUserData(uid) { return new Promise((resolve, reject) => { db.run("DELETE FROM users WHERE uid = ?", uid, (err) => { if (err) { console.error("Failed to delete user data:", err); reject(err); } else { resolve(); } }); }); }

export { generateResponse, resetChat };

ThatXliner commented 1 year ago

Please provide an MRE

EvanZhouDev commented 1 year ago

Closing otherwise. We respond to issues regarding bard-ai, we are not necessarily responsible for how you use it specifically unless it's a clear issue on our part.

Nessie-Dev commented 1 year ago

It's related to bard-ai when i export chat and then import it it to get responses from bard-ai I get is, means I can't use the ID's of the chat to continue an old chat "Google Bard encountered an error )]}'

39 [["wrb.fr",null,null,null,null,[13]]] 58 [["di",8769],["af.httprm",8768,"6620395296999733811",0]] 25 [["e",4,null,null,134]] . at queryBard (file:///home/runner/XaviaBot/node_modules/bard-ai/index.js:88:15) at processTicksAndRejections (node:internal/process/task_queues:96:5)"

EvanZhouDev commented 1 year ago

It works for me? Ensure you are giving Chat a JSON (not stringified) when importing. It will not work if your input is stringified.

Nessie-Dev commented 1 year ago

It worked before, but does not works after the update last update came.

EvanZhouDev commented 1 year ago

Go ahead and purge cookies, then log in again to your Google account. Get the new PSID, and it should be all fixed!

Nessie-Dev commented 1 year ago

did but same error brother, can you give me an example again I tried same as shown as on the docs

EvanZhouDev commented 1 year ago

It works? Are you sure you are using __Secure-PSID1?

Nessie-Dev commented 1 year ago

Yes, it works when i create new chat everytime for response, but not works with the chat export and import IDs

EvanZhouDev commented 1 year ago

Can you show me what you are exporting and importing? Make sure its raw JSON and not stringified or changed in any way shape or form.

Nessie-Dev commented 1 year ago

here's my code:const userData = await getUserData(uid);

if (userData) {
  const { conversationID, responseID, choiceID, _reqID } = userData;
  const userChat = new Bard.Chat({
    conversationID: conversationID,
    responseID: responseID,
    choiceID: choiceID,
    _reqID: _reqID,
  });
  const response = await userChat.ask(prompt, { useJSON: true });
  const images = response.images ? response.images.map((image) => image.url) : [];
  const contentWithoutImages = response.content?.replace(/\!\[.*?\]\([^)]+\)\n*/g, "") || response.content;
  const modifiedResponse = {
    content: contentWithoutImages,
    ...(images.length > 0 && { images }),
  };

  await updateUserData(uid, {
    conversationID: response.ids.conversationID,
    responseID: response.ids.responseID,
    choiceID: response.ids.choiceID,
    _reqID: response.ids._reqID,
  });

  return modifiedResponse;
} else {
  const newChat = new Bard.Chat();
  const response = await newChat.ask(prompt, { useJSON: true });
  const images = response.images ? response.images.map((image) => image.url) : [];
  const contentWithoutImages = response.content?.replace(/\!\[.*?\]\([^)]+\)\n*/g, "") || response.content;
  const newUser = {
    uid: uid,
    conversationID: response.ids.conversationID,
    responseID: response.ids.responseID,
    choiceID: response.ids.choiceID,
    _reqID: response.ids._reqID,
  };

  await createUserData(newUser);

  const modifiedResponse = {
    content: contentWithoutImages,
    ...(images.length > 0 && { images }),
  };

  return modifiedResponse;
}
EvanZhouDev commented 1 year ago

If you just use the most basic example, does it work? (Please join Slack, its a lot easier to talk there 😄)

EvanZhouDev commented 1 year ago

Any updates? Closing otherwise...

EvanZhouDev commented 1 year ago

Closing for now, feel free to reopen if you deem necessary.

therealsujitk commented 1 year ago

I'm facing the same issue, can't figure out why.

ThatXliner commented 1 year ago

I'm facing the same issue, can't figure out why.

could you show us an MRE of your code?

@EvanZhouDev i suspect it’s an issue with cookies

therealsujitk commented 1 year ago

@ThatXliner It seems to work fine when I write an example and run it in the terminal. I'm trying to using this package in a chrome extension which gives this error (It works the first time when result.bardConversationIds is undefined).

Bard.init(bardKey)
  .then(() => chrome?.storage?.local?.get('bardConversationIds'))
  .then((result) => new Bard.Chat(result.bardConversationIds))
  .then(async (conversation) => {
    const response = await conversation.ask("Hello world");
    chrome?.storage?.local?.set({bardConversationIds: conversation.export()});
    return response;
  })
  .then((response) => console.log(response));
ThatXliner commented 1 year ago

Why console.log(response) giving an object? IIRC it should’ve been a string unless the json config was set

therealsujitk commented 1 year ago

The object is logged when I do console.log(result.bardConversationIds). The response string gets logged properly when result.bardConversationIds is undefined, in this case it never gets to the response.

therealsujitk commented 1 year ago

Could it be browser cookies from bard.google.com interfering with this? I noticed even when I don't specify a bardKey, it still works since I'm signed in to bard in my browser.

Note: I'm using this package with a chrome extension.

Nessie-Dev commented 1 year ago

the issue hasn't been fixed yet, also now i changed my cookies more than 10 times by logging the Gmail, and then logging in it says my cookie isn't valid.

ThatXliner commented 1 year ago

the issue hasn't been fixed yet, also now i changed my cookies more than 10 times by logging the Gmail, and then logging in it says my cookie isn't valid.

On "change cookie," did you copy+paste the new cookie into your code?

EvanZhouDev commented 1 year ago

Also, you need to make sure you clear your cookies, not just logging in and out of Gmail... not sure if that was implied?

EvanZhouDev commented 1 year ago

Have you tried using v2? It should be better.

Let me know if you have any updates, I will close if not...

therealsujitk commented 1 year ago

I get an error while trying to build my project. This error doesn't show up in v.1.5.4.

Module not found: Error: Can't resolve 'fs' in '/Users/sujit/Documents/My Projects/chrome-ext-litcode-solver/node_modules/bard-ai'
ThatXliner commented 1 year ago

I get an error while trying to build my project. This error doesn't show up in v.1.5.4.

Module not found: Error: Can't resolve 'fs' in '/Users/sujit/Documents/My Projects/chrome-ext-litcode-solver/node_modules/bard-ai'

Please create a new issue. also, this is probably because this project is currently uses the nodejs fs module