diff --git a/demos/weather_forecast_logfire/README.md b/demos/weather_forecast_logfire/README.md new file mode 100644 index 00000000..5334d4a5 --- /dev/null +++ b/demos/weather_forecast_logfire/README.md @@ -0,0 +1,27 @@ +# Function calling +This demo shows how you can use Arch's core function calling capabilites. + +# Starting the demo +1. Please make sure the [pre-requisites](https://github.com/katanemo/arch/?tab=readme-ov-file#prerequisites) are installed correctly +2. Start Arch + +3. + ```sh + sh run_demo.sh + ``` +4. Navigate to http://localhost:18080/ +5. You can type in queries like "how is the weather?" + +# Observability +Arch gateway publishes stats endpoint at http://localhost:19901/stats. In this demo we are using prometheus to pull stats from arch and we are using grafana to visalize the stats in dashboard. To see grafana dashboard follow instructions below, + +1. Start grafana and prometheus using following command + ```yaml + docker compose --profile monitoring up + ``` +1. Navigate to http://localhost:3000/ to open grafana UI (use admin/grafana as credentials) +1. From grafana left nav click on dashboards and select "Intelligent Gateway Overview" to view arch gateway stats + + +Here is a sample interaction, +image diff --git a/demos/weather_forecast_logfire/arch_config.yaml b/demos/weather_forecast_logfire/arch_config.yaml new file mode 100644 index 00000000..35a3f430 --- /dev/null +++ b/demos/weather_forecast_logfire/arch_config.yaml @@ -0,0 +1,78 @@ +version: "0.1-beta" + +listener: + address: 0.0.0.0 + port: 10000 + message_format: huggingface + connect_timeout: 0.005s + +endpoints: + weather_forecast_service: + endpoint: host.docker.internal:18083 + connect_timeout: 0.005s + +overrides: + # confidence threshold for prompt target intent matching + prompt_target_intent_matching_threshold: 0.6 + +llm_providers: + - name: gpt-4o-mini + access_key: $OPENAI_API_KEY + provider: openai + model: gpt-4o-mini + default: true + + - name: gpt-3.5-turbo-0125 + access_key: $OPENAI_API_KEY + provider: openai + model: gpt-3.5-turbo-0125 + + - name: gpt-4o + access_key: $OPENAI_API_KEY + provider: openai + model: gpt-4o + +system_prompt: | + You are a helpful assistant. + +prompt_guards: + input_guards: + jailbreak: + on_exception: + message: Looks like you're curious about my abilities, but I can only provide assistance for weather forecasting. + +prompt_targets: + - name: weather_forecast + description: Check weather information for a given city. + parameters: + - name: city + description: the name of the city + required: true + type: str + - name: days + description: the number of days + type: int + required: true + - name: units + description: the temperature unit, e.g., Celsius and Fahrenheit + type: str + default: Fahrenheit + endpoint: + name: weather_forecast_service + path: /weather + + - name: default_target + default: true + description: This is the default target for all unmatched prompts. + endpoint: + name: weather_forecast_service + path: /default_target + system_prompt: | + You are a helpful assistant! Summarize the user's request and provide a helpful response. + # if it is set to false arch will send response that it received from this prompt target to the user + # if true arch will forward the response to the default LLM + auto_llm_dispatch_on_response: false + +tracing: + random_sampling: 100 + trace_arch_internal: true diff --git a/demos/weather_forecast_logfire/run_demo.sh b/demos/weather_forecast_logfire/run_demo.sh new file mode 100644 index 00000000..e6c678e8 --- /dev/null +++ b/demos/weather_forecast_logfire/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 Network Agent + 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