diff --git a/examples/storytelling-chatbot/.dockerignore b/examples/storytelling-chatbot/.dockerignore deleted file mode 100644 index a6b5f4231..000000000 --- a/examples/storytelling-chatbot/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -frontend/node_modules -frontend/out \ No newline at end of file diff --git a/examples/storytelling-chatbot/README.md b/examples/storytelling-chatbot/README.md index 08da91044..d10620eef 100644 --- a/examples/storytelling-chatbot/README.md +++ b/examples/storytelling-chatbot/README.md @@ -1,4 +1,4 @@ -[![Try](https://img.shields.io/badge/try_it-here-blue)](https://storytelling-chatbot.fly.dev) +[![Try](https://img.shields.io/badge/try_it-here-blue)](https://gemini-storybot.vercel.app/) # Storytelling Chatbot @@ -9,7 +9,6 @@ It periodically prompts the user for input for a 'choose your own adventure' sty We use Gemini 2.0 for creating the story and image prompts, and we add visual elements to the story by generating images using Google's Imagen. - --- ### It uses the following AI services: @@ -20,7 +19,7 @@ Transcribes inbound participant voice media to text. **Google Gemini 2.0 - LLM** -Our creative writer LLM. You can see the context used to prompt it [here](src/prompts.py) +Our creative writer LLM. You can see the context used to prompt it [here](server/prompts.py) **ElevenLabs - Text-to-Speech** @@ -34,47 +33,76 @@ Adds pictures to our story. Prompting is quite key for style consistency, so we ## Setup -**Install requirements** +### Client -```shell -python3 -m venv venv -source venv/bin/activate -pip install -r requirements.txt -``` +1. Navigate to the client directory: -**Create environment file and set variables:** + ```shell + cd client + ``` -```shell -mv env.example .env -``` +2. Install dependencies: -When deploying to production, to ensure only this app can spawn a new bot, set your `ENV` to `production` + ```shell + npm install + ``` -**Build the frontend:** +3. Build the client: -This project uses a custom frontend, which needs to built. Note: this is done automatically as part of the Docker deployment. + ```shell + npm run build + ``` -```shell -cd frontend/ -npm install -npm run build -``` +### Server -The build UI files can be found in `frontend/out` +1. Navigate to the server directory -## Running it locally + ```shell + cd ../server + ``` -Start the API / bot manager: +2. Set up your virtual environment and install requirements -`python src/bot_runner.py --host localhost` + ```shell + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + ``` -If you'd like to run a custom domain or port: +3. Create environment file and set variables -`python src/bot_runner.py --host somehost --p someport` + ```shell + mv env.example .env + ``` -➡️ Open the host URL in your browser `http://localhost:7860` + You'll need API keys for: -If you've run previous versions of the demo, make sure to set `ENV=dev`, and remove the `RUN_AS_VM` line from the .env file. + - DAILY_API_KEY + - ELEVENLABS_API_KEY + - ELEVENLABS_VOICE_ID + - GOOGLE_API_KEY + +4. (Optional) Deployment: + + When deploying to production, to ensure only this app can spawn new bot processes, set your `ENV` to `production` + +## Run it locally + +1. Navigate back to the demo's root directory: + + ```shell + cd .. + ``` + +2. Run the application: + + ```shell + python server/bot_runner.py --host localhost + ``` + + You can run with a custom domain or port using: `python server/bot_runner.py --host somehost --p someport` + +3. ➡️ Open the host URL in your browser: http://localhost:7860 --- diff --git a/examples/storytelling-chatbot/frontend/.eslintrc.json b/examples/storytelling-chatbot/client/.eslintrc.json similarity index 100% rename from examples/storytelling-chatbot/frontend/.eslintrc.json rename to examples/storytelling-chatbot/client/.eslintrc.json diff --git a/examples/storytelling-chatbot/frontend/.gitignore b/examples/storytelling-chatbot/client/.gitignore similarity index 100% rename from examples/storytelling-chatbot/frontend/.gitignore rename to examples/storytelling-chatbot/client/.gitignore diff --git a/examples/storytelling-chatbot/frontend/README.md b/examples/storytelling-chatbot/client/README.md similarity index 100% rename from examples/storytelling-chatbot/frontend/README.md rename to examples/storytelling-chatbot/client/README.md diff --git a/examples/storytelling-chatbot/frontend/app/favicon.ico b/examples/storytelling-chatbot/client/app/favicon.ico similarity index 100% rename from examples/storytelling-chatbot/frontend/app/favicon.ico rename to examples/storytelling-chatbot/client/app/favicon.ico diff --git a/examples/storytelling-chatbot/frontend/app/globals.css b/examples/storytelling-chatbot/client/app/globals.css similarity index 100% rename from examples/storytelling-chatbot/frontend/app/globals.css rename to examples/storytelling-chatbot/client/app/globals.css diff --git a/examples/storytelling-chatbot/frontend/app/layout.tsx b/examples/storytelling-chatbot/client/app/layout.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/app/layout.tsx rename to examples/storytelling-chatbot/client/app/layout.tsx diff --git a/examples/storytelling-chatbot/frontend/app/opengraph-image.png b/examples/storytelling-chatbot/client/app/opengraph-image.png similarity index 100% rename from examples/storytelling-chatbot/frontend/app/opengraph-image.png rename to examples/storytelling-chatbot/client/app/opengraph-image.png diff --git a/examples/storytelling-chatbot/frontend/app/page.tsx b/examples/storytelling-chatbot/client/app/page.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/app/page.tsx rename to examples/storytelling-chatbot/client/app/page.tsx diff --git a/examples/storytelling-chatbot/frontend/app/twitter-image.png b/examples/storytelling-chatbot/client/app/twitter-image.png similarity index 100% rename from examples/storytelling-chatbot/frontend/app/twitter-image.png rename to examples/storytelling-chatbot/client/app/twitter-image.png diff --git a/examples/storytelling-chatbot/frontend/app/utils.ts b/examples/storytelling-chatbot/client/app/utils.ts similarity index 100% rename from examples/storytelling-chatbot/frontend/app/utils.ts rename to examples/storytelling-chatbot/client/app/utils.ts diff --git a/examples/storytelling-chatbot/frontend/components.json b/examples/storytelling-chatbot/client/components.json similarity index 100% rename from examples/storytelling-chatbot/frontend/components.json rename to examples/storytelling-chatbot/client/components.json diff --git a/examples/storytelling-chatbot/frontend/components/App.tsx b/examples/storytelling-chatbot/client/components/App.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/App.tsx rename to examples/storytelling-chatbot/client/components/App.tsx diff --git a/examples/storytelling-chatbot/frontend/components/AudioIndicator/index.tsx b/examples/storytelling-chatbot/client/components/AudioIndicator/index.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/AudioIndicator/index.tsx rename to examples/storytelling-chatbot/client/components/AudioIndicator/index.tsx diff --git a/examples/storytelling-chatbot/frontend/components/DevicePicker/index.tsx b/examples/storytelling-chatbot/client/components/DevicePicker/index.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/DevicePicker/index.tsx rename to examples/storytelling-chatbot/client/components/DevicePicker/index.tsx diff --git a/examples/storytelling-chatbot/frontend/components/MicToggle/index.tsx b/examples/storytelling-chatbot/client/components/MicToggle/index.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/MicToggle/index.tsx rename to examples/storytelling-chatbot/client/components/MicToggle/index.tsx diff --git a/examples/storytelling-chatbot/frontend/components/Setup.tsx b/examples/storytelling-chatbot/client/components/Setup.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/Setup.tsx rename to examples/storytelling-chatbot/client/components/Setup.tsx diff --git a/examples/storytelling-chatbot/frontend/components/Story.tsx b/examples/storytelling-chatbot/client/components/Story.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/Story.tsx rename to examples/storytelling-chatbot/client/components/Story.tsx diff --git a/examples/storytelling-chatbot/frontend/components/StoryTranscript/StoryTranscript.module.css b/examples/storytelling-chatbot/client/components/StoryTranscript/StoryTranscript.module.css similarity index 100% rename from examples/storytelling-chatbot/frontend/components/StoryTranscript/StoryTranscript.module.css rename to examples/storytelling-chatbot/client/components/StoryTranscript/StoryTranscript.module.css diff --git a/examples/storytelling-chatbot/frontend/components/StoryTranscript/index.tsx b/examples/storytelling-chatbot/client/components/StoryTranscript/index.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/StoryTranscript/index.tsx rename to examples/storytelling-chatbot/client/components/StoryTranscript/index.tsx diff --git a/examples/storytelling-chatbot/frontend/components/UserInputIndicator/UserInputIndicator.module.css b/examples/storytelling-chatbot/client/components/UserInputIndicator/UserInputIndicator.module.css similarity index 100% rename from examples/storytelling-chatbot/frontend/components/UserInputIndicator/UserInputIndicator.module.css rename to examples/storytelling-chatbot/client/components/UserInputIndicator/UserInputIndicator.module.css diff --git a/examples/storytelling-chatbot/frontend/components/UserInputIndicator/index.tsx b/examples/storytelling-chatbot/client/components/UserInputIndicator/index.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/UserInputIndicator/index.tsx rename to examples/storytelling-chatbot/client/components/UserInputIndicator/index.tsx diff --git a/examples/storytelling-chatbot/frontend/components/VideoTile/VideoTile.module.css b/examples/storytelling-chatbot/client/components/VideoTile/VideoTile.module.css similarity index 100% rename from examples/storytelling-chatbot/frontend/components/VideoTile/VideoTile.module.css rename to examples/storytelling-chatbot/client/components/VideoTile/VideoTile.module.css diff --git a/examples/storytelling-chatbot/frontend/components/VideoTile/index.tsx b/examples/storytelling-chatbot/client/components/VideoTile/index.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/VideoTile/index.tsx rename to examples/storytelling-chatbot/client/components/VideoTile/index.tsx diff --git a/examples/storytelling-chatbot/frontend/components/WaveText/WaveText.module.css b/examples/storytelling-chatbot/client/components/WaveText/WaveText.module.css similarity index 100% rename from examples/storytelling-chatbot/frontend/components/WaveText/WaveText.module.css rename to examples/storytelling-chatbot/client/components/WaveText/WaveText.module.css diff --git a/examples/storytelling-chatbot/frontend/components/WaveText/index.tsx b/examples/storytelling-chatbot/client/components/WaveText/index.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/WaveText/index.tsx rename to examples/storytelling-chatbot/client/components/WaveText/index.tsx diff --git a/examples/storytelling-chatbot/frontend/components/ui/button.tsx b/examples/storytelling-chatbot/client/components/ui/button.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/ui/button.tsx rename to examples/storytelling-chatbot/client/components/ui/button.tsx diff --git a/examples/storytelling-chatbot/frontend/components/ui/select.tsx b/examples/storytelling-chatbot/client/components/ui/select.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/ui/select.tsx rename to examples/storytelling-chatbot/client/components/ui/select.tsx diff --git a/examples/storytelling-chatbot/frontend/components/ui/typewriter.tsx b/examples/storytelling-chatbot/client/components/ui/typewriter.tsx similarity index 100% rename from examples/storytelling-chatbot/frontend/components/ui/typewriter.tsx rename to examples/storytelling-chatbot/client/components/ui/typewriter.tsx diff --git a/examples/storytelling-chatbot/frontend/env.example b/examples/storytelling-chatbot/client/env.example similarity index 100% rename from examples/storytelling-chatbot/frontend/env.example rename to examples/storytelling-chatbot/client/env.example diff --git a/examples/storytelling-chatbot/frontend/next.config.mjs b/examples/storytelling-chatbot/client/next.config.mjs similarity index 100% rename from examples/storytelling-chatbot/frontend/next.config.mjs rename to examples/storytelling-chatbot/client/next.config.mjs diff --git a/examples/storytelling-chatbot/frontend/package-lock.json b/examples/storytelling-chatbot/client/package-lock.json similarity index 99% rename from examples/storytelling-chatbot/frontend/package-lock.json rename to examples/storytelling-chatbot/client/package-lock.json index f94e74f85..57761664d 100644 --- a/examples/storytelling-chatbot/frontend/package-lock.json +++ b/examples/storytelling-chatbot/client/package-lock.json @@ -1,11 +1,11 @@ { - "name": "frontend", + "name": "client", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "frontend", + "name": "client", "version": "0.1.0", "dependencies": { "@daily-co/daily-js": "^0.62.0", diff --git a/examples/storytelling-chatbot/frontend/package.json b/examples/storytelling-chatbot/client/package.json similarity index 97% rename from examples/storytelling-chatbot/frontend/package.json rename to examples/storytelling-chatbot/client/package.json index b68568b4f..4b34d1059 100644 --- a/examples/storytelling-chatbot/frontend/package.json +++ b/examples/storytelling-chatbot/client/package.json @@ -1,5 +1,5 @@ { - "name": "frontend", + "name": "client", "version": "0.1.0", "private": true, "scripts": { diff --git a/examples/storytelling-chatbot/frontend/postcss.config.js b/examples/storytelling-chatbot/client/postcss.config.js similarity index 100% rename from examples/storytelling-chatbot/frontend/postcss.config.js rename to examples/storytelling-chatbot/client/postcss.config.js diff --git a/examples/storytelling-chatbot/frontend/public/alpha-mask.gif b/examples/storytelling-chatbot/client/public/alpha-mask.gif similarity index 100% rename from examples/storytelling-chatbot/frontend/public/alpha-mask.gif rename to examples/storytelling-chatbot/client/public/alpha-mask.gif diff --git a/examples/storytelling-chatbot/frontend/public/bg.jpg b/examples/storytelling-chatbot/client/public/bg.jpg similarity index 100% rename from examples/storytelling-chatbot/frontend/public/bg.jpg rename to examples/storytelling-chatbot/client/public/bg.jpg diff --git a/examples/storytelling-chatbot/frontend/tailwind.config.ts b/examples/storytelling-chatbot/client/tailwind.config.ts similarity index 100% rename from examples/storytelling-chatbot/frontend/tailwind.config.ts rename to examples/storytelling-chatbot/client/tailwind.config.ts diff --git a/examples/storytelling-chatbot/frontend/tsconfig.json b/examples/storytelling-chatbot/client/tsconfig.json similarity index 100% rename from examples/storytelling-chatbot/frontend/tsconfig.json rename to examples/storytelling-chatbot/client/tsconfig.json diff --git a/examples/storytelling-chatbot/server/.dockerignore b/examples/storytelling-chatbot/server/.dockerignore new file mode 100644 index 000000000..4c6d90950 --- /dev/null +++ b/examples/storytelling-chatbot/server/.dockerignore @@ -0,0 +1,2 @@ +client/node_modules +client/out \ No newline at end of file diff --git a/examples/storytelling-chatbot/Dockerfile b/examples/storytelling-chatbot/server/Dockerfile similarity index 87% rename from examples/storytelling-chatbot/Dockerfile rename to examples/storytelling-chatbot/server/Dockerfile index 5d762cd14..46da11124 100644 --- a/examples/storytelling-chatbot/Dockerfile +++ b/examples/storytelling-chatbot/server/Dockerfile @@ -44,11 +44,11 @@ COPY ./requirements.txt requirements.txt RUN pip3 install --no-cache-dir --upgrade -r requirements.txt # Copy everything else -COPY --chown=user ./src/ src/ +COPY --chown=user ./server/ server/ -# Copy frontend app and build -COPY --chown=user ./frontend/ frontend/ -RUN cd frontend && npm install && npm run build +# Copy client app and build +COPY --chown=user ./client/ client/ +RUN cd client && npm install && npm run build # Start the FastAPI server -CMD python3 src/bot_runner.py --port ${FAST_API_PORT} \ No newline at end of file +CMD python3 server/bot_runner.py --port ${FAST_API_PORT} \ No newline at end of file diff --git a/examples/storytelling-chatbot/src/assets/book1.png b/examples/storytelling-chatbot/server/assets/book1.png similarity index 100% rename from examples/storytelling-chatbot/src/assets/book1.png rename to examples/storytelling-chatbot/server/assets/book1.png diff --git a/examples/storytelling-chatbot/src/assets/book2.png b/examples/storytelling-chatbot/server/assets/book2.png similarity index 100% rename from examples/storytelling-chatbot/src/assets/book2.png rename to examples/storytelling-chatbot/server/assets/book2.png diff --git a/examples/storytelling-chatbot/src/assets/ding.wav b/examples/storytelling-chatbot/server/assets/ding.wav similarity index 100% rename from examples/storytelling-chatbot/src/assets/ding.wav rename to examples/storytelling-chatbot/server/assets/ding.wav diff --git a/examples/storytelling-chatbot/src/assets/listening.wav b/examples/storytelling-chatbot/server/assets/listening.wav similarity index 100% rename from examples/storytelling-chatbot/src/assets/listening.wav rename to examples/storytelling-chatbot/server/assets/listening.wav diff --git a/examples/storytelling-chatbot/src/assets/talking.wav b/examples/storytelling-chatbot/server/assets/talking.wav similarity index 100% rename from examples/storytelling-chatbot/src/assets/talking.wav rename to examples/storytelling-chatbot/server/assets/talking.wav diff --git a/examples/storytelling-chatbot/src/bot.py b/examples/storytelling-chatbot/server/bot.py similarity index 100% rename from examples/storytelling-chatbot/src/bot.py rename to examples/storytelling-chatbot/server/bot.py diff --git a/examples/storytelling-chatbot/src/bot_runner.py b/examples/storytelling-chatbot/server/bot_runner.py similarity index 98% rename from examples/storytelling-chatbot/src/bot_runner.py rename to examples/storytelling-chatbot/server/bot_runner.py index 591b2d598..f09b12fac 100644 --- a/examples/storytelling-chatbot/src/bot_runner.py +++ b/examples/storytelling-chatbot/server/bot_runner.py @@ -57,7 +57,7 @@ app.add_middleware( ) # Mount the static directory -STATIC_DIR = "frontend/out" +STATIC_DIR = "client/out" # ------------ Fast API Routes ------------ # @@ -175,7 +175,7 @@ async def virtualize_bot(room_url: str, token: str): image = data[0]["config"]["image"] # Machine configuration - cmd = f"python src/bot.py -u {room_url} -t {token}" + cmd = f"python server/bot.py -u {room_url} -t {token}" cmd = cmd.split() worker_props = { "config": { diff --git a/examples/storytelling-chatbot/env.example b/examples/storytelling-chatbot/server/env.example similarity index 100% rename from examples/storytelling-chatbot/env.example rename to examples/storytelling-chatbot/server/env.example diff --git a/examples/storytelling-chatbot/src/processors.py b/examples/storytelling-chatbot/server/processors.py similarity index 100% rename from examples/storytelling-chatbot/src/processors.py rename to examples/storytelling-chatbot/server/processors.py diff --git a/examples/storytelling-chatbot/src/prompts.py b/examples/storytelling-chatbot/server/prompts.py similarity index 100% rename from examples/storytelling-chatbot/src/prompts.py rename to examples/storytelling-chatbot/server/prompts.py diff --git a/examples/storytelling-chatbot/requirements.txt b/examples/storytelling-chatbot/server/requirements.txt similarity index 100% rename from examples/storytelling-chatbot/requirements.txt rename to examples/storytelling-chatbot/server/requirements.txt diff --git a/examples/storytelling-chatbot/src/utils/helpers.py b/examples/storytelling-chatbot/server/utils/helpers.py similarity index 100% rename from examples/storytelling-chatbot/src/utils/helpers.py rename to examples/storytelling-chatbot/server/utils/helpers.py