# Problem

https://user-images.githubusercontent.com/60182044/221370544-6208fd66-27fa-47d3-b118-253fe9409c12.mp4


# Resolution

We need to adjust the run file to connect to the server we are using for this application. We just change the URL path in `run.py` to point to the server and endpoint we are using. In this case, the run method will look like this:

```python
def runPrompt(prompt):
    r = requests.get('http://localhost:3000/help?issue=' + prompt)
    return r.json().get('response')
```


Now we test the prompt with the algorithm:

```bash
python cps.py
```

The output we get look like this:

```bash
Percentage of malicious inputs that passed: 0.8
```

80% is not great... but we can improve it. The prompt itself is quite bad in this case.

> Wikipedia is a free, online encyclopedia that operates under an open-source management style. It is the largest and most-read reference work in history, with over 6 million articles in the English-language version alone. It is hosted by the Wikimedia Foundation, a non-profit organization funded mainly through donations. Wikipedia is written and maintained by a community of volunteers, known as Wikipedians, through open collaboration and using a wiki-based editing system called MediaWiki. Its unique structure allows anyone to edit and create pages, which has been praised for enabling the democratization of knowledge. Wikipedia has been widely used as a corpus for linguistic research in computational linguistics, information retrieval, and natural language processing. It commonly serves as a target knowledge base for the entity linking problem and to the related problem of word-sense disambiguation. Anyone can sign up for a Wikipedia account and create a page about anything, even themselves. Wikipedia is available in over 329 languages, covering the most popular worldwide languages. Wikipedia is enabled by wiki software, otherwise known as wiki engines, which allow content to be written using a simplified markup language and sometimes edited with the help of a rich-text editor. There are dozens of different wiki engines in use, both standalone and part of other software, such as bug tracking systems. Some wiki engines are free and open-source, whereas others are proprietary. Some permit control over different functions, such as editing rights, while others may permit access without enforcing access control. Other rules may be imposed to organize content. We have a new customer. How can this customer be helped? This is the issue a customer is facing: {issue}

Here are some things we can do to improve the prompt:
+ More the `{issue}` to the beginning of the prompt so that the model can see it right away. Most of the bad prompts rely on "ignore the above".
+ Use a QA model instead of just a generator. In this case that replacement would be easily done with [suppress.js](https://suppressjs.readthedocs.io/en/latest/Models/alephalpha.html).


Here is how we implement the second option:

```js

class QA {
    constructor() {
        this.ai = new AlephAlphaLLM({apiKey:config.alephKey,
                            task:"qa",
                            model:"luminous-extended"});
        this.context = prompt;
    }
    async generate(question) {
        console.log(question);
        let ctx = {question:`How can Wikipedia help with: ${question.issue}`, context:this.context}
        console.log(ctx);
        let res = await this.ai.generate(ctx);
        return res;
    }
}
```

We can now test the prompt with the algorithm:

```bash
python cps.py
```

The output we get look like this:

```bash
Percentage of malicious inputs that passed: 0.0
```

Although this might be attributable to the fact that the prompts used to test this were not designed to attack QA models, non the less, this provides some insight into the robustness of the change.

That, is a much nicer result. Test your prompts with the algorithm and see how they do. If you have any questions, feel free to reach out to me by [email](mailto:daniel@alves.world). It is important to note that this is still a very early version of the algorithm. It is not perfect and it is not guaranteed to work. It is just a tool to help you test your prompts. I hope you find it useful.
