Spaces:
Running
Running
title: Solution_2 | |
app_file: app.py | |
sdk: gradio | |
sdk_version: 4.44.1 | |
## Prepare Development Environment | |
We will be using `Poetry`, a versatile tool for Python projects that simplifying dependency management and packaging. It automates the process of declaring, installing, and updating the libraries your project relies on. By using a lockfile, `Poetry` guarantees consistent and reproducible builds, ensuring that your project's dependencies are always installed in the specified versions. Additionally, `Poetry` provides convenient features for building your project into distributable formats, making it easier to share and deploy your work. | |
1. Install [Python](https://www.python.org/downloads/) (both 3.10.12 and 3.12.6 were used in testing to offer a wide range of diversity.) | |
1. Install [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer).The flexibility of poetry makes it best of breed as it plays well with `pip` and `conda` alike. | |
1. Install [ffmpeg](https://www.ffmpeg.org/download.html) | |
- Windows | |
To simplify setup for windows users, `ffmpeg.exe` and `ffprode.exe` have been included in this repo under `libs` directory. For other operating systems, please reference below. | |
- Mac | |
- **For MacOS Monterey v12 and below:** We will be using MacPorts. Homebrew is no longer supported for these MacOSx versions. | |
- Install Apple's CLI Developer Tools (If required): `xcode-select --install` | |
- Download and install [**MacPorts**](https://www.macports.org/install.php) for the version of your Mac operating system. | |
- **For Mac OSX Ventura and above:** We will be using `brew` but first we must make sure that it's up-to-date. | |
1. First update `brew`. | |
```bash | |
brew update | |
``` | |
> **NOTE:** if you get an error like `fatal: couldn't find remote ref refs/heads/master` when trying to run `brew update`, the possible culprit is `dart-lang` changing it's default branch from `master` to `main`. To resolve this run the following set of commands: | |
```bash | |
brew tap --repair && brew cleanup && brew update-reset | |
``` | |
Now you should be able to run `brew update`. | |
2. Next, we can upgrade the outdated `brew` formulae. | |
```bash | |
brew upgrade | |
``` | |
> **NOTE:** You might need to run this a few times to get all outdated formulae successfully updated. Depending on how outdated packages are, this may take some time to complete. Please be patient. This is a good time to grab a `brew` :) | |
1. We can now install the latest/stable version of `ffmpeg` in Homebrew. | |
```bash | |
brew install ffmpeg | |
``` | |
- Linux | |
Install using the following command: | |
```bash | |
apt install libasound2-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg | |
``` | |
3. Create a Virtual Environment, and install libraries needed, using a Linux shell or **git bash** in Windows | |
- Windows | |
```bash | |
python -m venv .venv | |
.venv/Scripts/activate | |
``` | |
- Linux/Mac | |
``` bash | |
python3 -m venv .venv | |
source ./.venv/bin/activate | |
``` | |
- Mac Only | |
**Prerequisites** | |
One of the requirements is [PyAudio](https://pypi.org/project/PyAudio/). According to their instructions we need to use Homebrew to install the prerequisite `portaudio` library before we can install `PyAudio`. | |
```bash | |
brew install portaudio | |
``` | |
1. Install the code, from the root directory that contains `pyproject.toml` file, using `poetry`. | |
```bash | |
poetry lock | |
poetry install | |
``` | |
4. Install `playwright`, an open-source tool for auomating web testing in python. We'll use it to get some data for our LLM. | |
```bash | |
playwright install | |
``` | |
5. Test Environment | |
Run the command below to make sure the virtual environment is activated. | |
``` bash | |
python -V | |
``` | |
Create an OpenAI Account and Obtain a Key | |
1. Follow the instructions [here](https://platform.openai.com/docs/quickstart) to create your key. | |
2. Make a copy of [.env_template](.env_template) and rename it to `.env`. Then add your key in the `.env` file as shown: | |
```bash | |
OPENAI_API_KEY="<YOUR_KEY_GOES_HERE>" | |
``` | |
## Project Directory Overview | |
The project is structured in a modularized manner, focusing on building and running chatbots with voice capabilities. It has a good separation of concerns with well-defined directories for different functionalities. Such as `bots`, `data_utils`, and `models`, promoting code reusability and maintainability. It offers various voice capabilities, including text-to-speech, speech-to-text, and voice-based interactions, making it suitable for creating interactive chatbot applications. | |
#### **Key Directories:** | |
* **app:** Contains the main application files: | |
* `chatbot_gradio_runner.ipynb`: Jupyter notebook for running the chatbot interactively. | |
* `chatbot_gradio_runner.py`: Python script for running the chatbot with Gradio for a web interface. | |
* **data:** Stores various types of data for chatbots. This is primarily used for LLM context for different bots: | |
* `travel_bot_context.txt`: This is the context we'll use for the chat assistant today. | |
* Other files with specific chatbot contexts (financial, call center, etc.). | |
* CSV and JSON files formats to allow flexibility. | |
* **genai_voice:** Core project code: | |
* **bots:** Code specific to implementing chatbots (`chatbot.py`). | |
* **config:** Configuration files (`defaults.py`). | |
* **data_utils:** Utilities for data handling and gathering data from websites (e.g., `extract_web_data.py`). | |
* **defintions:** Defines response formats and prompts for chatbots. | |
* **logger:** Custom utility for logging information. | |
* **models:** Code for managing and interacting with language models (`open_ai.py`). | |
* **moderation:** Code for handling and filtering chatbot responses. | |
* **processing:** Functions for processing audio data (`audio.py`). | |
* **libs:** External libraries used by the project (ffmpeg binaries for Windows only). | |
* **poetry.lock** and **pyproject.toml**: Poetry-related files for dependency management. | |
## Launch Notebook | |
1. We need to be able to point Jupyter notebook to our virtual environment that has the right packages and libraries. | |
```bash | |
ipython kernel install --user --name=venv | |
``` | |
1. Run the command below from the virtual environment to launch the [notebook](app/chatbot_gradio_runner.ipynb) in a browser. Once ran, select the `venv` kernel and continue executing the cells. | |
 | |
``` bash | |
jupyter notebook app/chatbot_gradio_runner.ipynb | |
``` | |
2. You can also run the same chatbot directly from a python script using `poetry`. | |
```bash | |
poetry run RunChatBotScript | |
``` | |
## Troubleshooting | |
1. Try and use a headset microphone | |
2. Record in a quiet room | |
3. Make sure that you have granted microphone permissions | |
4. Ensure the required audio libraries are installed | |