dsdanielpark / bard-api Goto Github PK
View Code? Open in Web Editor NEWThe unofficial python package that returns response of Google Bard through cookie value.
Home Page: https://pypi.org/project/bardapi/
License: MIT License
The unofficial python package that returns response of Google Bard through cookie value.
Home Page: https://pypi.org/project/bardapi/
License: MIT License
Bard-API/bardapi/core.py", line 32, in _get_snim0e
return re.search(r"SNlM0e":"(.*?)"", resp.text).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
what should i do ,it returns the content. Response Error: b')]}'\n\n38\n[["wrb.fr",null,null,null,null,[8]]]\n55\n[["di",70],["af.httprm",70,"-2165490944187691766",6]]\n25\n[["e",4,null,null,130]]\n'. []
Attribute ChatBard Not working
I would like to retain the session data after the session is disconnected and use that data to retain the conversation when I re-instantiate the session.
It seems possible if I can retain the conversation_id and reuse it.
Hi,
Thanks for creating this library! It is awsome, easy to use and very useful!
I'm using it behind a proxy, so I added support for proxies locally and would love to contribute it to the library if you agree.
If so - please let me know if you want me to branch, propose a solution and create a pull request.
Thanks!
Nir.
Hello,
It seems BardAI now supports image generation as per below snapshot. However the Bard-API only returns the alt-image-text for the generated image.
Is there a way to include the links of the generated images?
There are so many errors, when you try to execute the translated code in c#.
It will display Many errors, once you run the code as it is.
From the missing variables to the regex expression and the bad request error.
Response code not 200. Response Status is 302
It's still in the browser, but calling with GET
and current cookie setup produces a response without it
Also, calling the stream API (which also has a new body format) with a manually extracted SNlM0e
and __Secure-1PSID
doesn't work. It's like there is something detecting that the call is not originating from the browser UI
Everything seems to work fine until I run the code and get
Response Error: b')]}'\n\n38\n[["wrb.fr",null,null,null,null,[9]]]\n56\n[["di",113],["af.httprm",113,"-913832998693439861",7]]\n25\n[["e",4,null,null,131]]\n'.
When providing the input text to tell me what was going on it the past prompts it is giving me responses that are either hallucinatory or is someone else's conversation.
Example:
Prompt: tell me the the last 3 prompts that I wrote to you
Response:
Sure. The last 3 prompts that you wrote to me were:
I hope this helps!
Remarks: Please provide some insight as to why this is happening and if there's any way to prevent it
well, maybe google decided to change things a bit...
File "/home/runner/Bard-AI-bot-template-bardapi/venv/lib/python3.10/site-packages/bardapi/core.py", line 86, in get_answer
resp_dict = json.loads(resp.content.splitlines()[3])[0][2]
IndexError: list index out of range
hello, I am using your project and found one little thing: it is not saving or remembering the previous responses for better results. can you provide anything related to this issue? Thanks
when i try to execute the first simple usage script it give me this error: raise Exception(
Exception: __Secure-1PSID value must end with a single dot. Enter correct __Secure-1PSID value.
I hope to see it written in PHP soon
gamsahabida
When trying to import the package, I got the following error
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with LibreSSL 2.8.3. See: urllib3/urllib3#2168
please advice which urllib3 to use
I wanted to try to continue the chat and tried the code as per the sample in the readme, but it returns a completely different prompt on the second question.
Is there any way to fix this?
Earlier today, it was working fine but now whenever it executes it shows me this error:
site-packages/bardapi/core.py", line 114, in get_answer
resp_dict = json.loads(resp.content.splitlines()[3])[0][2]
IndexError: list index out of range
I don't know this is specific to me or only rolled out to japan region, but from what I can see now, bard.google.com does not allow logging in just by sending __Secure-1PSID
now.
This causes "SNlM0e value not found in response. Check __Secure-1PSID value." error with valid __Secure-1PSID token.
I tried different cookie combination, and found out now it needs 3 cookies:
I noticed this library was becoming unstable yesterday (It wasn't unstable before that) and today, it became completly unusable.
Would be appreciated if you can make cookie dict parameter instead of just one PSID str argument.
Thanks
Is it possible to make sure Bard's responses don't get cut off even if they are very long answers?
This is an issue on the web version as well, but I would rather it just answer rather than saying "sure, here's the capital of france"
When I asked it, it said to use bard -n in front of the prompt, however that doesn't seem to work.
It appears that there's a quota limitation when invoking the Bard API. I've written a loop for the calls, and I've noticed there seems to be a cap on the number of requests. Once a certain threshold is reached, it starts to return errors, preventing further queries.
query: "give me an image of maa Saraswati"
when I pass this query to Bard via API, following is the response:
'Sure, here is an image of Maa Saraswati.\n[Image of Maa Saraswati]'
however, when I give this same query to Bard via the chat, it shows me a relevant image
please help resolve this
What is the license to use this repository? Apache, MIT or GPL, Please upload
from bardapi import Bard
token = '.......'
bard = Bard(token=token)
resp = bard.get_answer("What is BARD?")
print(resp)
It responds with {'content': 'Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[9]]]\n55\n[["di",72],["af.httprm",72,"8367677104245371628",47]]\n25\n[["e",4,null,null,130]]\n'.'}
I started trying the API today morning.. Anyone else facing such issue or am I making a newbie mistake?
I want a function that can assist in getting quotes from the Bard.
I find it annoying to use get_answer() to get a quote when we can have a command for it.
I tried running this, and I am getting the same kind of error. I didn't make a lot of requests, and this error persists whether I vary the following factors:
Here's what the errors are:
Session and timeout: Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[9]]]\n57\n[["di",207],["af.httprm",206,"-5973836830292919317",0]]\n25\n[["e",4,null,null,132]]\n'.
Session: Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[9]]]\n57\n[["di",158],["af.httprm",157,"-7097826725018575708",1]]\n25\n[["e",4,null,null,132]]\n'.
Timeout: Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[9]]]\n57\n[["di",188],["af.httprm",187,"-7191527685766192777",2]]\n25\n[["e",4,null,null,132]]\n'.
No Sesh No Timeout: Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[9]]]\n56\n[["di",170],["af.httprm",170,"3959452704966963607",1]]\n25\n[["e",4,null,null,131]]\n'.
!pip install bardapi
from bardapi import Bard
import os
import requests
# Get this from going to
# Bard web UI -->
# Developer tools -->
# Applications -->
# Storage tab -->
# cookies -->
# Secure-1PSID
token='MYCOOKIE.'
session = requests.Session()
session.headers = {
"Host": "bard.google.com",
"X-Same-Domain": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Origin": "https://bard.google.com",
"Referer": "https://bard.google.com/",
}
session.cookies.set("__Secure-1PSID", token)
# TRY DIFFERENT COMBOS OF SESSION AND TIMEOUT
# Session and timeout
bard = Bard(token=token, session=session, timeout=500)
ans = bard.get_answer("What's a creative use for a hat?")['content']
print("Session and timeout:", ans)
# Session
bard = Bard(token=token, session=session)
ans = bard.get_answer("What's a creative use for a hat?")['content']
print("Session:", ans)
# Timeout
bard = Bard(token=token, timeout=500)
ans = bard.get_answer("What's a creative use for a hat?")['content']
print("Timeout:", ans)
# No Session, No Timeout
bard = Bard(token=token)
ans = bard.get_answer("What's a creative use for a hat?")['content']
print("No Sesh No Timeout:", ans)
I have followed the procedures in the Read.me file.
from bardapi import Bard
import os
os.environ['_BARD_API_KEY']='WwXXXXXjQIGRj3Cno871zb4FRW1smDrQH10e1H7GbD5LeU9m02OlZJj5-XX.'
# response = Bard().get_answer("나와 내 동년배들이 좋아하는 뉴진스에 대해서 알려줘")['content']
response = Bard().get_answer("What is Bard API")['content']
print(response)
First i have tried with example snippets, i got the below error.
Traceback (most recent call last):
File "PyCharmProjects/Bard-API/scripts/google_bard_api.py", line 13, in
response = Bard().get_answer("나와 내 동년배들이 좋아하는 뉴진스에 대해서 알려줘")['content']
File "PyCharmProjects/Bard-API/bardapi/core.py", line 130, in get_answer
translator_to_lang = GoogleTranslator(source="auto", target=self.language)
File "PyCharmProjects/Bard-API/venv/lib/python3.10/site-packages/deep_translator/google.py", line 39, in init
super().init(
File "PyCharmProjects/Bard-API/venv/lib/python3.10/site-packages/deep_translator/base.py", line 42, in init
raise InvalidSourceOrTargetLanguage(target)
deep_translator.exceptions.InvalidSourceOrTargetLanguage: None --> Invalid source or target language!
then i have changed the input text to english language, and again i got the same error.
Traceback (most recent call last):
File "PyCharmProjects/Bard-API/scripts/google_bard_api.py", line 14, in
response = Bard().get_answer("What is Bard API")['content']
File "PyCharmProjects/Bard-API/bardapi/core.py", line 130, in get_answer
translator_to_lang = GoogleTranslator(source="auto", target=self.language)
File "PyCharmProjects/Bard-API/venv/lib/python3.10/site-packages/deep_translator/google.py", line 39, in init
super().init(
File "PyCharmProjects/Bard-API/venv/lib/python3.10/site-packages/deep_translator/base.py", line 42, in init
raise InvalidSourceOrTargetLanguage(target)
deep_translator.exceptions.InvalidSourceOrTargetLanguage: None --> Invalid source or target language!
Could anybody get help me here?
I was throwing a request to Bard to summarize a paper, and it started throwing Response Error halfway through. This happens regardless of the Token and will not accept requests from python.
Requests from web browsers are successfully accepted, so there may be some way to fix this.
Do you have any ideas?
Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[8]]]\n55\n[["di",90],["af.httprm",89,"-5846312931853295462",1]]\n25\n[["e",4,null,null,130]]\n'.
Traceback (most recent call last):
File "F:\Code\Projects\audit\audit-software\data-classification\chat.py", line 6, in
bard = Session(token)
File "F:\Code\Projects\audit\audit-software\data-classification\session.py", line 19, in init
self.bard = Bard(token=self.token, session=session, timeout=30)
File "C:\Users\DHRUV\anaconda3\lib\site-packages\bardapi\core.py", line 49, in init
self.SNlM0e = self._get_snim0e()
File "C:\Users\DHRUV\anaconda3\lib\site-packages\bardapi\core.py", line 192, in _get_snim0e
raise Exception(
Exception: SNlM0e value not found in response. Check __Secure-1PSID value.
There has not been any excessive usage for 3 users but one particular user's cookie gets invalidated after few calls. Once I log out and log in once again, it again works for a few times and then again returns "Check __Secure-1PSID value." Is this a user ban or a recent phenomenon or anybody else facing this?
I have tried to interpret core python code to C# with the help of Chatgpt as I'm just a newbie in this field , It generated the full code to be applicable for integration with Unity. but I have got the error "SNlM0e value not found in response".
I don't know what is the issue, it might be related to my location ?
and here is the code
using UnityEngine;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Net.Http;
using System;
using UnityEngine.Networking;
using System.Linq;
public class Bard
{
private Dictionary<string, string> proxies;
private int timeout;
private Dictionary<string, string> headers;
private int _reqid;
private string conversation_id;
private string response_id;
private string choice_id;
private HttpClient httpClient;
private string SNlM0e;
public Bard(int timeout = 6, Dictionary<string, string> proxies = null)
{
this.proxies = proxies;
this.timeout = timeout;
this.headers = new Dictionary<string, string>
{
{ "Host", "bard.google.com" },
{ "X-Same-Domain", "1" },
{ "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" },
{ "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8" },
{ "Origin", "https://bard.google.com" },
{ "Referer", "https://bard.google.com/" }
};
this._reqid = int.Parse(string.Join("", UnityEngine.Random.Range(0, 10), UnityEngine.Random.Range(0, 10), UnityEngine.Random.Range(0, 10), UnityEngine.Random.Range(0, 10)));
this.conversation_id = "";
this.response_id = "";
this.choice_id = "";
this.httpClient = new HttpClient();
this.httpClient.DefaultRequestHeaders.Clear();
this.httpClient.DefaultRequestHeaders.Host = "bard.google.com";
this.httpClient.DefaultRequestHeaders.Add("X-Same-Domain", "1");
this.httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36");
this.httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/x-www-form-urlencoded;charset=UTF-8");
this.httpClient.DefaultRequestHeaders.Referrer = new Uri("https://bard.google.com/");
// this.httpClient.DefaultRequestHeaders.Add("Cookie", "__Secure-1PSID=" + Environment.GetEnvironmentVariable("_BARD_API_KEY"));
this.httpClient.DefaultRequestHeaders.Add("Cookie", "__Secure-1PSID=Wgi8wUobo4-2WaJ29Y45F_fGhfjh4GjtcOMkBamz5_dJ4gogfwcocBxvS2PRxuEiJsS4ww.");
this.SNlM0e = this._get_snim0e();
}
private string _get_snim0e()
{
var requestUri = "https://bard.google.com/";
var response = httpClient.GetAsync(requestUri).Result;
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Response Status: {response.StatusCode}");
}
var responseContent = response.Content.ReadAsStringAsync().Result;
Debug.Log("responseContent" + responseContent);
var match = Regex.Match(responseContent, "SNlM0e\":\"(.*?)\"");
if (!match.Success)
{
throw new Exception("SNlM0e value not found in response.");
}
return match.Groups[1].Value;
}
public Dictionary<string, object> GetAnswer(string inputText)
{
var url = "https://bard.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate";
var paramsDict = new Dictionary<string, string>
{
{ "bl", "boq_assistant-bard-web-server_20230419.00_p1" },
{ "_reqid", this._reqid.ToString() },
{ "rt", "c" }
};
var inputTextStruct = new List<object[]>
{
new object[] { inputText },
null,
new object[] { this.conversation_id, this.response_id, this.choice_id }
};
var dataDict = new Dictionary<string, string>
{
{ "f.req", JsonUtility.ToJson(new object[] { null, JsonUtility.ToJson(inputTextStruct) }) },
{ "at", this.SNlM0e }
};
var formData = new WWWForm();
foreach (var kvp in dataDict)
{
formData.AddField(kvp.Key, kvp.Value);
}
var request = UnityWebRequest.Post(url, formData);
request.SetRequestHeader("Host", "bard.google.com");
request.SetRequestHeader("X-Same-Domain", "1");
request.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36");
request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
request.SetRequestHeader("Origin", "https://bard.google.com");
request.SetRequestHeader("Referer", "https://bard.google.com/");
var response = request.SendWebRequest();
while (!response.isDone) { }
if (request.result != UnityWebRequest.Result.Success)
{
return new Dictionary<string, object> { { "content", $"Response Error: {request.error}." } };
}
var responseContent = request.downloadHandler.text;
var responseLines = responseContent.Split('\n');
var respDict = JsonUtility.FromJson<DictionaryResponse>(responseLines[3]);
var respJson = JsonUtility.ToJson(new DictionaryResponse { Content = respDict.Content });
var parsedAnswer = JsonUtility.FromJson<DictionaryAnswer>(respJson);
var bardAnswer = new Dictionary<string, object>
{
{ "content", parsedAnswer.Content[0][0] },
{ "conversation_id", parsedAnswer.Content[1][0] },
{ "response_id", parsedAnswer.Content[1][1] },
{ "factualityQueries", parsedAnswer.Content[3] },
{ "textQuery", parsedAnswer.Content[2][0] != null ? parsedAnswer.Content[2][0] : "" },
{ "choices", parsedAnswer.Content[4].Select(item => new Dictionary<string, object> { { "id", item[0] }, { "content", item[1] } }).ToList() }
};
this.conversation_id = (string)bardAnswer["conversation_id"];
this.response_id = (string)bardAnswer["response_id"];
choice_id = ((List<Dictionary<string, object>>)bardAnswer["choices"])[0]["id"].ToString(); this._reqid += 100000;
return bardAnswer;
}
[System.Serializable]
public class DictionaryResponse
{
public object[][] Content;
}
[System.Serializable]
public class DictionaryAnswer
{
public object[][][] Content;
}
}
first of all, congratulations for the excellent project, I did some tests integrating it in a chatbot and it worked incredibly well.
My doubt is: how do I use a request proxy?
reason: I'm from a country where bard is not officially available and I don't have access to a secure and fast proxy.
I tried to use vpn but for independent scripts it ends up being one more problem to deal with.
my solution was to create a CORS proxy for requests on fly.io that receives a request and retransmits it.
but I wanted to know where I can add this in the core of your project?
the proxy works by adding the real url in front of the proxy url and it only works for requests.
example:
https://proxy-request.com/https://bard.google.com/
where could I modify in core.py to make this request like this?
Is there a way to regenerate a draft or edit a prompt? I can't find a way to do any of them.
I don't expect this to work forever, as Bard's UI interface and internal stream API will likely evolve, but here is some code I wrote in case anyone finds it useful.... use at your own peril!
//This value expires after 12 days, so need to refresh from Bard's website manually
const cookie = '__Secure-1PSID=[API_KEY_VALUE]';
let prompt = "Hi!";
fetch("https://bard.google.com/",
{
method: 'get',
headers: {
"Host": "bard.google.com",
"X-Same-Domain": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Origin": "https://bard.google.com",
"Referer": "https://bard.google.com",
'Cookie': cookie
},
}).then(async bard_res => {
var bard_text = await bard_res.text();
const match = bard_text.match(/"SNlM0e":"(.*?)"/);
const SNlM0e = match ? match[1] : null;
fetch("https://bard.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate?bl=boq_assistant-bard-web-server_20230510.09_p1&_reqid=229189&rt=c", {
method: 'post',
headers: {
"Host": "bard.google.com",
"X-Same-Domain": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Origin": "https://bard.google.com",
"Referer": "https://bard.google.com",
'Cookie': cookie
},
body: "f.req=[null,\"[[\\\""+prompt +"\\\"],null,[\\\"\\\",\\\"\\\",\\\"\\\"]]\"]&at=" + SNlM0e
}).then(async res => {
let lines = (await res.text()).split("\n");
let longest_line = lines.reduce(function (a, b) {
return a.length > b.length ? a : b;
}, "");
let response = JSON.parse(JSON.parse(longest_line)[0][2])[0][0];
console.log(response);
})
.catch(err => {
console.error('Error:', err);
});
I have done exact steps and get it done to run but, just want to know that Will google charge me if I use it ?
I saw the usage, but idk how to get my BARD_API_KEY ?
{'content': 'Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[8]]]\n56\n[["di",75],["af.httprm",75,"-8694801941071849458",37]]\n25\n[["e",4,null,null,131]]\n'.'}
Such Response is observed while running bard.get_answer("Generate Html an Js for Mean Calculator")
I did as the docs said and just replaced my api key yet I m getting the error
from bardapi import Bard
import os
#Replace XXXX with the values you get from __Secure-1PSID
os.environ['_BARD_API_KEY']="XXXX"
# set your input text
input_text = "what is google bard?"
print(Bard().get_answer(input_text)['content'])
Response Error: b')]}\'\n\n38\n[["wrb.fr",null,null,null,null,[9]]]\n56\n[["di",329],["af.httprm",329,"2550290118937250235",0]]\n25\n[["e",4,null,null,131]]\n'.
Can you show me what I need to save so that Bard can remember the previous conversation without starting a new one after each question?
I'm trying to write it on PHP
I used Chrome Dev Tools to monitor and found SNlM0e and conversation_id unchanged, I tried saving it again but the result is not as expected
Traceback (most recent call last):
File "f:\Python_files\main.py", line 8, in
print(Bard().get_answer(input_text)['content'])
File "F:\facereg\NEW\lib\site-packages\bardapi\core.py", line 43, in init
self.SNlM0e = self._get_snim0e()
File "F:\facereg\NEW\lib\site-packages\bardapi\core.py", line 59, in _get_snim0e
raise Exception(
Exception: SNlM0e value not found in response. Check __Secure-1PSID value.
But i used correct id
Bard().get_answer(query1)['content']
Bard().get_answer(query2)['content']
The problem with this is that it does not remember the context what was asked in the first query, like Bard actually does. How can we make it remember context when running through API
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.