# How to run a prompt

The `llm-assistant` can run prompts that are located in a prompts collection
folder. It is possible to execute prompts using the CLI in an interactive
way or using the `llm-assistant` API.

## Prompt collection folder

In the `llm-assistant-config.toml` file you should register the location of
the prompt collection folder in the `[prompt]` section.

```toml
[prompt]
prompt_collection_folder = "path/to/prompt-collection-folder"
```

The path is relative to the `llm-assistant-config.toml` path. It is expected
that each prompt in the collections folder has its own directory and at least
one file name `config.toml`

```
prompt-collection-folder
    - correct-text
        - config.toml
    - word-definition
        - config.toml
```

The `config.toml` file should look similar to the following:

```toml
name="Alternative Expressions"
system_prompt='''
You are fluent speaker of the {language} language and your task is to list at most five expressions that encodes the meaning of a sentence or a word enclosed by double angle brackets.

Your response must be given as a json list and the items must be written in {language}.

'''
user_prompt='''
Language: {language}
Sentence: <<{message}>>
Response:
'''
```
You can associate a git namespace to your prompts collection folder and keep them synced with the
help of `prompt-manager`. Check [](sync-and-push-prompts.md) for more information.

## Running a custom prompt

To run a prompt, the same must be located in the prompt-collection folder. Consider the
`alternative-expression` prompt given in the previous section. There are three alternatives
to run it.

```bash
echo "{}" | llm-assistant run alternative-expression --p language portuguese --p message "ganhar a vida"
echo '{"message":"ganhar a vida"}' | llm-assistant run alternative-expression --p language portuguese
echo '{"message":"ganhar a vida", "language":"portuguese"}' | llm-assistant run alternative-expression
```

## Running a prompt interactively

You are invited to select one of the prompts located at `prompt.prompt_collection_folder` and then to load or
create a new instance for the prompt.

**Prompt Instance**: A prompt instance is a subset of pre-defined prompt variables. For example, in the alternative-expression
prompt, we could have a french instance (language=french) and a portuguese instance (language=portuguese).


:::{tip}
Instances are stored at `${LLM_ASSISTANT_CONFIGURATION_FOLDER}/prompts/instances`
:::

```bash
╭────────────────────────────────────────────────────────────────────────────────────────╮
│ Select prompt                                                                          │
╰────────────────────────────────────────────────────────────────────────────────────────╯
1. Alternative Expressions 2. Word Definition

Prompt index: 2
╭────────────────────────────────────────────────────────────────────────────────────────╮
│ Choose an option                                                                       │
╰────────────────────────────────────────────────────────────────────────────────────────╯
1. New instance 2. Load instance

Option index: 1
Enter the instance name: portuguese
Enter variable assignment: language=portuguese
╭─────────────────────────────────────── New Chat ───────────────────────────────────────╮
│ Prompt: Word Definition                                                                │
│ Instance:portuguese                                                                    │
╰────────────────────────────────────────────────────────────────────────────────────────╯
Enter messaó
Enter message: $$
╭───────────────────────────── Word Definition::portuguese ─────────────────────────────╮
│ borogodó                                                                              │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────── Word Definition::portuguese ─────────────────────────────╮
│ [                                                                                     │
│   "Encanto, atração irresistível e misteriosa; charme",                               │
│   "Qualidade ou característica que atrai e seduz de maneira peculiar ou especial.",   │
│   "Dom, habilidade natural para seduzir ou encantar as pessoas.",                     │
│   "Magia, feitiço; algo que exerce influência sobre os outros de forma inexplicável." │
│ ]                                                                                     │
╰───────────────────────────────────────────────────────────────────────────────────────╯
```


## Running a prompt using the API

You can also run prompts using the `llm-assistant` python API.

```python
config = model.RunnerConfiguration(openai_key, "gpt-3.5-turbo", True, "path-to-cache-file")
api.LLMAssistant().setup(config)

prompt_configuration = model.PromptConfiguration(
    "alternative-expression", "system_prompt", "user_prompt"
)

data = {
    "language":"portuguese" ,
    "message": "ganhar a vida"
}

api.custom(prompt_configuration, **data)
```
