# Extension building manual

## What is an extension
Extensions are little projects built by the community that can be plugged to the generation process to allow users to bring new ideas to the project without feature-creaping it.

There are many types of extensions:
1 - pipeline extensions
These extensions have no UI, they only intercept the communication between the user and the AI, perform some modifications or operations, then submit them to the discussion to enritch it. For example:
- Net enabled GPT4All (under construction at https://github.com/ParisNeo/Net_enabled-GPT4All-Extension) : An extension that offers a special personality that indicates to the chatbot that whenever the user is asking a question it has no answer to, it should invoke a search function. The extension intercepts this keyword, do the research on the net then mirror it back to the AI. The AI can then use those inputs to formulate an answer.
- Image enabled GPT4All : An extension that uses Blip to convert an image into text that can be interpreted by the AI and used in the discussion.

The extension should offer a yaml file that describes it to allow the system to integrate it.

```yaml
# This is a gpt4all extension project
# Project name : Models tester
# Author : ParisNeo
# Description :
# This extension allows applying the model on a bunch of questions at once and recover answers in a text file

name: GPT4All-Models-Tester-Extension
author: ParisNeo
description: |
        This extension allows applying the model on a bunch of questions at once and recover answers in a text file
version: 1.0

# UI metadata
has_ui: true

# backend metadata
can_trigger_the_model : 

# Conditionning override
override_current_personality: true
adds_conditionning: false
conditionning_text: "Respond to my questions."
prefix_text: "Q:"
suffix_text: "A:"

# Send commands to model
sends_commands_to_model: true

# Recover model output
uses_model_output : true
recover_word_by_word : false
recover_generated_text : true
```

The extension should have a extension.py file on its root that implements Extensions interface:

