Skip to main content

Python Client for Bing Chat, also known as Sydney.

Project description

Sydney.py

Latest Release Python MIT License

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 selecting Inspect element).
  • Select the Storage tab and click on the Cookies 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 = 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 = 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sydney_py-0.11.0.tar.gz (9.8 kB view hashes)

Uploaded Source

Built Distribution

sydney_py-0.11.0-py3-none-any.whl (9.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page