# Protecting Your Model with AI Firewall
{{ fw_how_to_intro }}
In this walkthrough, we will be using the ArXiv Topic Classification dataset.
## Overview
AI Firewall Realtime can be easily instantiated from an existing AI Stress Testing Run. You can also view a simulation of real-time events by running [AI Firewall Continuous Tests](rime_ai_firewall_continuous_tests_nlp.md).
{{ fw_realtime_overview }}
## 1. Run AI Stress Testing
The first step in setting up AI Firewall Realtime is running AI Stress Testing and configuring an AI Firewall for a given project. These steps are very similar to steps 1-3 of [AI Firewall Continuous Tests](rime_ai_firewall_continuous_tests_nlp.md).
```
rime-engine run-nlp --config-path nlp_examples/classification/arxiv/stress_tests_config_no_model.json
```
{{ fw_how_to_deploy_step }}
## 2. Review and Download Auto-Configured AI Firewall Rules
{{ fw_rules_review }}
## 3. Setup a Firewall Client in a Jupyter Notebook
{{ fw_notebook_setup }}
### Load Example Dataset and Model
Let's import some code to the notebook. Remember to make sure that you create the notebook in your `rime_trial` folder!
```python
import catboost as catb
import pickle
import pandas as pd
import os
import json
import gzip
RIME_PATH = os.path.abspath('.')
```
Now we are ready to run the Firewall in a real-time setting!
### Running the AI Firewall Realtime with Sample Datapoints
Let's first import the Firewall Realtime package:
```python
from rime.nlp.firewall.base import NLPFirewall
from rime.tabular.firewall.uploader import FirewallUploader
from rime.core.client.firewall_client import FirewallClient
from rime.nlp.schema.task import Task
```
Let's then instantiate a firewall object:
```python
firewall_id = "$YOUR_FIREWALL_ID"
firewall_url = "localhost:5002"
upload_client = FirewallUploader.from_url(
firewall_id,
firewall_url,
)
fw_client = FirewallClient.from_cli_args(firewall_url)
firewall = NLPFirewall.from_components(
firewall_id,
"rules.json",
task=Task.CLASSIFICATION,
upload_client=upload_client,
firewall_client=fw_client
)
```
Your Firewall ID can be found by clicking the Settings toggle in the right-hand side of the Firewall homepage.
## 4. Monitor Events
Finally, let's try to pass in a sample datapoint!
```python
test_data_path = 'nlp_examples/classification/arxiv/data/val_0_with_label.json.gz'
with gzip.open(test_data_path, "rb") as f:
test_data = json.loads(f.read(), encoding="utf-8")
test_datapoint = test_data[0].copy()
```
The firewall surfaces a graph of "flagged" events. Datapoints that do not raise errors will not be logged in the UI.
For this specific datapoint, let's introduce a data corruption (making the text an empty string):
```python
test_datapoint["text"] = ""
```
Now let's run the firewall over this datapoint.
```python
firewall_response = firewall.validate_single_and_upload(test_datapoint)
```
If you take a look at `firewall_response.summary.action` you'll find that the Firewall has `flagged` the datapoint.
Once you have deployed your firewall, and input data are starting to roll in, the AI Firewall will evaluate each and every data point, and output a decision: `flag`, `pass`, `impute`, or `block` based on the rules criteria.
NOTE: Only non-passing datapoints will be shown in the UI. That way, you are only alerted on problematic datapoints.
### Troubleshooting
{{ troubleshooting_python_package_redirect }}