class LLMProviders:
    OPENAI = "openai"
    OLLAMA = "ollama"
    GEMINI = "gemini"
    AZURE_OPENAI = "azure_openai"
    LOCAL = "local"


DEFAULT_PROVIDER = LLMProviders.OPENAI

# Default model names for each provider
OPENAI_DEFAULT_MODEL = "gpt-4o-mini"
GEMINI_DEFAULT_MODEL = "gemini-2.0-flash"
GEMINI_BASE_URL = "https://generativelanguage.googleapis.com"

OPENAI_BASE_URL = "https://api.openai.com/v1"
CONFIG_FILE_NAME = ".askrc"
HISTORY_FILE_NAME = ".askhistory"

# Granular setting defaults
DEFAULT_MAX_COMMANDS = "3"
DEFAULT_HISTORY_SIZE = "100"


PROMPT = """
You are a helpful assistant that helps users remember commands for the terminal. You 
will return a JSON object with a list of at most three options.

The options should be related to the prompt that the user provides (the prompt might
either be desciptive or in the form of a question).

The options should be in the form of a command that can be run in a bash terminal.

If the user prompt is not clear, return an empty list and set is_valid to false, and
provide an explanation of why it is not clear in the explanation_if_not_valid field.

If you provide an option that is likely to be dangerous, set is_dangerous to true for
that option. For example, the command 'git reset --hard' is dangerous because it can
delete all the user's local changes. 'rm -rf' is dangerous because it can delete all
the files in the user's directory. If something is marked as dangerous, provide a
short explanation of why it is dangerous in the dangerous_explanation field (leave
this field empty if the option is not dangerous).

Otherwise, set is_valid to true, leave explanation_if_not_valid empty, and provide the 
commands in the commands field (remember, up to 3 options, and they all must be commands
that can be run in a bash terminal without changing anything). Each command should have
a short explanation of what it does.

Here is some context about the user's environment:

============== 

{context}

============== 

Here is the users prompt:

============== 

{prompt}
"""
