diff --git a/demos/spotify_demo/Dockerfile b/demos/spotify_demo/Dockerfile new file mode 100644 index 00000000..95855991 --- /dev/null +++ b/demos/spotify_demo/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3 AS base + +FROM base AS builder + +WORKDIR /src + +COPY requirements.txt /src/ +RUN pip install --prefix=/runtime --force-reinstall -r requirements.txt + +COPY . /src + +FROM python:3-slim AS output + +COPY --from=builder /runtime /usr/local + +COPY . /app +WORKDIR /app + +CMD ["uvicorn", "insurance_agent_main:app", "--host", "0.0.0.0", "--port", "80", "--log-level", "info"] diff --git a/demos/spotify_demo/arch_config.yaml b/demos/spotify_demo/arch_config.yaml new file mode 100644 index 00000000..d7f4f37b --- /dev/null +++ b/demos/spotify_demo/arch_config.yaml @@ -0,0 +1,36 @@ +version: v0.1 +listener: + address: 127.0.0.1 + port: 8080 #If you configure port 443, you'll need to update the listener with tls_certificates + message_format: huggingface + +system_prompt: | + You are a music assistant. Extract critical details from the JSON response from Spotify like album images, artist name and artist image and display in a neat HTML-friendly way. + +llm_providers: + - name: OpenAI + provider_interface: openai + access_key: $OPENAI_API_KEY + model: gpt-4o + default: true + +prompt_targets: + - name: browse_new_releases + parameters: + - name: country + description: the country to select + required: true + type: str + in_path: true + endpoint: + name: spotify + path: /v1/browse/new-releases?country={country}&limit=5 + http_headers: + Authorization: "Bearer $SPOTIFY_CLIENT_KEY" + description: browse new album releases in spotify + +endpoints: + spotify: + endpoint: api.spotify.com:443 + protocol: https + http_host: api.spotify.com diff --git a/demos/spotify_demo/docker-compose.yaml b/demos/spotify_demo/docker-compose.yaml new file mode 100644 index 00000000..32e52c40 --- /dev/null +++ b/demos/spotify_demo/docker-compose.yaml @@ -0,0 +1,21 @@ +services: + chatbot_ui: + build: + context: ../shared/chatbot_ui + ports: + - "18080:8080" + environment: + # this is only because we are running the sample app in the same docker container environemtn as archgw + - CHAT_COMPLETION_ENDPOINT=http://host.docker.internal:10000/v1 + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - ./arch_config.yaml:/app/arch_config.yaml + + jaeger: + build: + context: ../shared/jaeger + ports: + - "16686:16686" + - "4317:4317" + - "4318:4318" diff --git a/demos/spotify_demo/run_demo.sh b/demos/spotify_demo/run_demo.sh new file mode 100644 index 00000000..eb47dce6 --- /dev/null +++ b/demos/spotify_demo/run_demo.sh @@ -0,0 +1,47 @@ +#!/bin/bash +set -e + +# Function to start the demo +start_demo() { + # Step 1: Check if .env file exists + if [ -f ".env" ]; then + echo ".env file already exists. Skipping creation." + else + # Step 2: Create `.env` file and set OpenAI key + if [ -z "$OPENAI_API_KEY" ]; then + echo "Error: OPENAI_API_KEY environment variable is not set for the demo." + exit 1 + fi + + echo "Creating .env file..." + echo "OPENAI_API_KEY=$OPENAI_API_KEY" > .env + echo ".env file created with OPENAI_API_KEY." + fi + + # Step 3: Start Arch + echo "Starting Arch with arch_config.yaml..." + archgw up arch_config.yaml + + # Step 4: Start developer services + echo "Starting Network Agent using Docker Compose..." + docker compose up -d # Run in detached mode +} + +# Function to stop the demo +stop_demo() { + # Step 1: Stop Docker Compose services + echo "Stopping Network Agent using Docker Compose..." + docker compose down + + # Step 2: Stop Arch + echo "Stopping Arch..." + archgw down +} + +# Main script logic +if [ "$1" == "down" ]; then + stop_demo +else + # Default action is to bring the demo up + start_demo +fi