# Step 1. Create BisQue Module

## Generating Module Files

Now that you have containerized and tested your application, you are ready to pull this repo and create the Bisque module.

### **Installing the bqmod CLI**

First step is to clone this repo and install the CLI. You can create a virtual environment in which to install the CLI if you wish.

```bash
# Go to a directory outside your Modules folder and clone the rep
ivan@bisque:~/Bisque/Modules$ cd ~/Bisque
ivan@bisque:~/Bisque$ git clone https://github.com/ivanfarevalo/BQ_module_generator.git

# Go into the BQ_module_generator folder
ivan@bisque:~/Bisque$ cd BQ_module_generator

# This is optional
ivan@bisque:~/Bisque/BQ_module_generator$ virtualenv bqvenv
ivan@bisque:~/Bisque/BQ_module_generator$ . bqvenv/bin/activate

# This is required
(bqvenv) ivan@bisque:~/Bisque/BQ_module_generator$ pip3 install --editable .
```

Test the installation by running `bqmod --help`. You should get a help message. Remember to activate your virtual environment if you used one during installation, otherwise you wont be able to run the commands.

### **Using the bqmod CLI**

***For Python3 modules, you must copy the bqapi folder from the `BQ_module_generator` folder into your `{ModuleName}` folder.*** Your folder structure should look like this so far:

```
-- Modules
    -- {ModuleName}
        -- bqapi (Only for python3 modules)
        -- Dockerfile
        -- src
            -- {source_code}
            -- BQ_run_module.py
```

The **bqmod** CLI uses simple commands to populate a .json file with the configurations details of your module. All commands must be ran in your `{ModuleName}` folder and are preceded with the `bqmod` command.

| Command                   | Options          | Description                                                                                                                                                               |
| ------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`bqmod`**               | --help           | Shows help information on how to use the CLI                                                                                                                              |
| **`bqmod init`**          |                  | Initializes configuration file for your module and pulls necessary files from repo. If one already exists, it wills ask whether you would like to overwrite it.           |
| **`bqmod set`**           | -n --name        | Sets or changes the {ModuleName} field. This must match the {ModuleName} of your module folder and should not have spaces. Ex: **`bqmod set -n "EdgeDetection"`**         |
|                           | -a --authors     | Sets or changes the name of the authors. Ex: **`bqmod set -a "Ivan"`**                                                                                                    |
|                           | -d --description | Sets or changes a short description of the module. Must be in quotations. Ex: **`bqmod set -d "This module finds edges in images"`**                                      |
| **`bqmod inputs`**        | --remove         | Flag to remove input specified by --name flag                                                                                                                             |
|                           | -i --image       | Flag that sets an input of type image.                                                                                                                                    |
|                           | -t --table       | Flag that sets an input of type table.                                                                                                                                    |
|                           | -f --file        | Flag that sets an input of type file.                                                                                                                                     |
|                           | -n --name        | Required parameter. Sets the name of the input as will be shown in Bisque module page. ***Input names MUST match input\_path\_dict keys in BQ\_module\_run.py.***         |
| **`bqmod outputs`**       | --remove         | Flag to remove output specified by --name flag.                                                                                                                           |
|                           | -i --image       | Flag that sets and output of type image.                                                                                                                                  |
|                           | -t --table       | Flag that sets and output of type table.                                                                                                                                  |
|                           | -f --file        | Flag that sets and output of type file.                                                                                                                                   |
|                           | -n --name        | Required parameter. Sets the name of the output as will be shown in Bisque results section. ***Output names MUST match output\_paths\_dict keys in BQ\_module\_run.py.*** |
| **`bqmod summary`**       |                  | Prints out the current module configurations.                                                                                                                             |
| **`bqmod gen_help_html`** |                  | Generates help.html from help.md.                                                                                                                                         |
| **`bqmod create_module`** |                  | Generates the module .xml.                                                                                                                                                |

{% hint style="warning" %}
**Names for Inputs and Outputs \_MUST**\_\*\* Match\*\*

*It is crucial to note that the names for inputs and outputs MUST match the dictionary keys of `input_path_dict` and `output_paths_dict` respectively!* Failure to ensure this will result in an error at runtime.
{% endhint %}

![Dictionary Keys Example](https://github.com/ivanfarevalo/BQ_module_generator/raw/main/public/dict_name_ex.png)

Here's an example of creating a simple Edge Detection module:

```bash
ivan@bisque:~/Bisque/Modules$ cd EdgeDetection
ivan@bisque:~/Bisque/Modules/EdgeDetection$ bqmod init
ivan@bisque:~/Bisque/Modules/EdgeDetection$ bqmod set -n "EdgeDetection"
ivan@bisque:~/Bisque/Modules/EdgeDetection$ bqmod set -a "Ivan"
ivan@bisque:~/Bisque/Modules/EdgeDetection$ bqmod set -d "This module finds edges in images"
ivan@bisque:~/Bisque/Modules/EdgeDetection$ bqmod inputs --image -n "Input Image"   # THIS MUST MATCH DICTIONARY KEYS in input_path_dict
ivan@bisque:~/Bisque/Modules/EdgeDetection$ bqmod outputs --image -n "Output Image"   # THIS MUST MATCH DICTIONARY KEYS in output_paths_dict
ivan@bisque:~/Bisque/Modules/EdgeDetection$ bqmod summary
Name: EdgeDetection
Author: Ivan
Description: This module finds edges in images
Inputs: {'Input Image': 'image'}
Outputs: {'Output Image': 'image'}
ivan@bisque:~/Bisque/Modules/EdgeDetection bqmod create_module
EdgeDetection.xml created
```

### **Generating help html file**

Edit the `help.md` [markdown](https://www.markdownguide.org/basic-syntax/) file in the `public` folder to include any documentation and examples you want to provide users. When you are done, generate the html file by running `bqmod gen_help_html` from the `{ModuleName}` folder. Please do a hard refresh on your browser every time you make changes to `help.html`. If not, it's possible that the browser is just showing the old version of the file because it was cached.

**Module Folder Structure**

This should be the resulting folder structure after creating the module.

```
-- Modules
    -- {ModuleName}
        -- bqapi (Only for python3 modules)
        -- bqconfig.json
        -- public
            -- thumbnail.png (module icon for bisque)
            -- help.md (Help markdown)
            -- help.html (Help html)
        -- Dockerfile
        -- PythonScriptWrapper.py
        -- runtime-module.cfg
        -- src
            -- {source_code}
            -- BQ_run_module.py
        -- {ModuleName}.xml
        -- xml_template.xml
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bisque.gitbook.io/docs/developing-a-bisque-module/bisque-module-generator/step-1.-create-bisque-module.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
