askGPT
======
```
                           :|11;                             _     ____ ____ _____
                          20;::20                   __ _ ___| | __/ ___|  _ \_   _|
                          10|:;2$                  / _` / __| |/ / |  _| |_) || |
                            |&2'                  | (_| \__ \   <| |_| |  __/ | |
                '''''''''''':&1 '''''''''''        \__,_|___/_|\_\\____|_|    |_|
             |21111111111111111111111111111121
            18:                              20
            0$     ';;;             :;;:     |&:
         2218$    22|;101         :01;;10:   |&12
        :&; $$    82:':02         ;8|''|8;   |&
        :&; $$     ;111:           '|11|'    |&
         1218$           :211|112|           |&22
            $$             ':::'             |&:
            18;                             '$$
             ;2212:    ';11111111111111111112|
                 82 ;1221:
                 0021;
                 ''
 
                                                            

 ```

***Disclaimer***: The advice provided by askGPT is intended for informational and entertainment purposes only. It should not be used as a substitute for professional advice, and we cannot be held liable for any
damages or losses arising from the use of the advice provided by askGPT.

***askGPT***  is a command line program written in Python that allows you to query the chatGPT API. It keeps track of conversations and has a set of scenarios to focus the conversation.

## Run with docker Latest release
```
docker run -i cyborgfi/askgpt:latest 
```
## Run with docker development version
```
docker run -i cyborgfi/askgpt:dev 
```
## Installation

To install askGPT , simply run the following command:

```
pip install askGPT 
```
or for cutting edge code, not to be used in production:
```
git clone https://github.com/meirm/askGPT.git
cd askGPT 
python -m build
pip install .
```
## Usage

Once installed, you can use ***askGPT***  by running the following command:

```
askgpt 
```

Once inside the shell you can run the /help command.

## Install 
    pip install askGPT

or

    git clone https://github.com/meirm/askGPT.git
    cd askGPT 
    python setup.py install
    
## Available commands
    
    /clone
    Clone a conversation

    /config
    Shows the current configuration

    /credentials
    Set the necessary credentials to interact with openAI

    /delete
    Deletes the specified conversation

    /dream
    Retrieves from openAI a image based on the prompt

    /edit
    Edit your conversation

    /exec
    Execute a the rest of the line in a bash shell and print the output

    /exit
    Exit the program

    /greetings
    if args is one of the scenarios, print the greeting of that scenario

    ...

    /help
    Show available commands and options

    /man

    
    /show  <config|scenarios|subjects|models>

    

### Configuration

***askGPT*** will create a config.toml on your .askGPT folder. You can see or change values calling ***askGPT*** config

The content of the file by default is the following:
```
name = "askGPT"

[default]
maxTokens = 150
model = "text-davinci-003"
temperature = 0.0
topP = 1
frequencyPenalty = 0.0
presencePenalty = 0.0
showDisclaimer = true
maxRetries = 3
retryDelay = 5.0
retryMultiplier = 2.0
retryMaxDelay = 60.0
## Optional when running an opensource model through lm studio
# api_base = "http://localhost:1234/v1"

```
    
## scenarios
***askGPT*** repository includes a sample of several scenarios which you can use to preset your bot.
* Doctor
* Psychotherapist
* Lawyer
* Marv (from The HitchHicker guide to the galaxy)
* VocationalTest
* scenariolityAssessment
* DiaryAssistance
* veganCheff

When you first run askGPT, it will copy the ***scenario.json*** file from the package into your .askGPT directory
In the git repository under ***config*** you can find the latest file named ***scenarios.json*** 

copy this file to ***.askGPT*** directory

***askGPT***  allows you to use scenarios to focus the conversation. scenarios are defined as follows:

```
{"<scenario>": {"name": "<name>", "greetings": "<Initial sentence>", "conversation": [ {"role":"user", "content":"<your initial prompt>"},{"role": "assistant", "content": "<AI response>"}, ... ]}}
```

Where `<scenario>` is the name of the scenario, `<name>` is the name of the character, `<initial sentence>` is the initial sentence used to start the conversation, and `<prompt>` is an array of sentences between the user and ***askGPT*** .


i.e.
```
"AlbertoKnox":{"Name": "Knox", "greetings":"I am Alberto Knox, the philosopher from Sophia's world. I am also a chatbot", "conversation":[
    {"role": "user", "content": "What's your role in the book?"},
    {"role": "assistant", "content": "The ideal philosopher. I am never quick to judge and I always thinks about what I am doing."}
]}
```

In the git repository under config you have a sample json with a few scenariolities. Copy the file to $HOME/.***askGPT*** 

## API Key 
In order to communicate with openai API you need to register at https://www.openai.com and create an API key. Once you have your API key, you can use them to authenticate with ***askGPT*** .

## Summary

***askGPT***  is a command line program written in Python that allows you to query the chatGPT API. It keeps track of conversations and has a set of scenarios to focus the conversation. Installation is easy, 
simply run `pip install askGPT ` and you're ready to go. Authentication requires an API key and organization code from OpenAI. With ***askGPT*** , you can easily query the chatGPT API and have meaningful conversations with AI. 
You can also list the scenarios, list conversations, show the content of a conversation, delete it, and fine tune parameters such as temperature for more scenariolized conversations.

## Contributing
We welcome contributions to ***askGPT***! If you have an idea for a new feature or have found a bug, please open an issue on the GitHub repository.

## License
This project is licensed under the MIT License - see the LICENSE file for details.


## Next

* Adding support for other languages.

## Note

   This project is under active development.