Python Client for Bing Chat, also known as Sydney.
Project description
Sydney.py
Python Client for Bing Chat, also known as Sydney.
Note This is an unofficial client.
Features
- Connect to Bing Chat, Microsoft's AI-powered personal assistant.
- Ask questions and have a conversation in various conversation styles.
- Compose content in various formats and tones.
- Stream response tokens for real-time communication.
- Supports asyncio for efficient and non-blocking I/O operations.
Requirements
- Python 3.10 or newer
- Microsoft account with access to Bing Chat
Installation
To install Sydney.py, run the following command:
pip install sydney-py
or, if you use poetry:
poetry add sydney-py
Usage
Prerequisites
To use Sydney.py you first need to extract the _U
cookie from Bing. The _U
cookie is used to authenticate your requests to the Bing Chat API.
To get the _U
cookie, follow these steps:
- Log in to Bing using your Microsoft account.
- Open the developer tools in your browser (usually by pressing
F12
or right-clicking and selectingInspect element
). - Select the
Storage
tab and click on theCookies
option to view all cookies associated with the website. - Look for the
_U
cookie and click on it to expand its details. - Copy the value of the
_U
cookie (it should look like a long string of letters and numbers).
Then, set it as an environment variable in your shell:
export BING_U_COOKIE=<your-cookie>
or, in your Python code:
os.environ["BING_U_COOKIE"] = "<your-cookie>"
Example
You can use Sydney.py to easily create a CLI client for Bing Chat:
import asyncio
from sydney import SydneyClient
async def main() -> None:
async with SydneyClient() as sydney:
while True:
prompt = input("You: ")
if prompt == "!reset":
await sydney.reset_conversation()
continue
elif prompt == "!exit":
break
print("Sydney: ", end="", flush=True)
async for response in sydney.ask_stream(prompt):
print(response, end="", flush=True)
print("\n")
if __name__ == "__main__":
asyncio.run(main())
Sydney Client
You can create a Sydney Client and initialize a connection with Bing Chat which starts a conversation:
sydney = SydneyClient()
await sydney.start_conversation()
# Conversation
await sydney.end_conversation()
Alternatively, you can use the async with
statement to keep the code compact:
async with SydneyClient() as sydney:
# Conversation
Conversation Style
You can set the conversation style when creating a Sydney Client:
sydney = SydneyClient(style="creative")
The available options are creative
, balanced
and precise
.
Reset Conversation
You can reset the conversation in order to make the client forget the previous conversation. You can also change the conversation style without creating a new client:
async withSydneyClient() as sydney:
# Conversation
await sydney.reset_conversation(style="creative")
Ask
You can ask Bing Chat questions and (optionally) include citations in the results:
async with SydneyClient() as sydney:
response = await sydney.ask("When was Bing Chat released?", citations=True)
print(response)
You can also stream the response tokens:
async with SydneyClient() as sydney:
async for response in sydney.ask_stream("When was Bing Chat released?", citations=True):
print(response, end="", flush=True)
Note Both versions of the
ask
method support the same parameters.
Compose
You can ask Bing Chat to compose different types of content, such emails, articles, ideas and more:
async with SydneyClient() as sydney:
response = sydney.compose("Why Python is a great language", format="ideas")
print(response)
You can also stream the response tokens:
async with SydneyClient() as sydney:
async for response in sydney.compose_stream("Why Python is a great language", format="ideas"):
print(response, end="", flush=True)
The available options for the tone
parameter are professional
, casual
, enthusiastic
, informational
and funny
.
The available options for the format
parameter are paragraph
, email
, blogpost
and ideas
.
The available options for the length
parameter are short
, medium
and long
.
Note Both versions of the
compose
method support the same parameters.
Raw Response
You can also receive the raw JSON response that comes from Bing Chat instead of a text answer. Both ask
and compose
support this feature:
async with SydneyClient() as sydney:
response = await sydney.ask("When was Bing Chat released?", raw=True)
print(response)
For more detailed documentation and options, please refer to the code docstrings.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for sydney_py-0.11.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d678d347d1f204fa10772035fed0b8f19f7a8253b71482fadae2695cf75f2642 |
|
MD5 | ce860fd7113ff7767baa2396d5f9c6d3 |
|
BLAKE2b-256 | 216da78ff4ee37efc22d44b8b37048556e9b37fe6334deac04f79e75153f8d6b |