|
import os |
|
from pathlib import Path |
|
import gradio as gr |
|
import requests |
|
import json |
|
|
|
VERSION = "v 1.4.6" |
|
|
|
CHATGLM_MODEL = None |
|
CHATGLM_TOKENIZER = None |
|
LLAMA_MODEL = None |
|
LLAMA_INFERENCER = None |
|
|
|
|
|
|
|
INITIAL_SYSTEM_PROMPT = "You are a helpful assistant. You follow all of the user's instructions and answer all of their questions without going out of your way to answer them. Respond using markdown." |
|
API_HOST = "http://127.0.0.0.1:1337" |
|
COMPLETION_URL = "http://127.0.0.0.1:1337/v1/chat/completions" |
|
BALANCE_API_URL="http://127.0.0.0.1:1337/v1/dashboard/billing/credit_grants" |
|
USAGE_API_URL="http://127.0.0.0.1:1337/v1/dashboard/billing/usage" |
|
HISTORY_DIR = Path("history") |
|
HISTORY_DIR = "history" |
|
TEMPLATES_DIR = "templates" |
|
|
|
|
|
STANDARD_ERROR_MSG = "☹️Произошла ошибка:" |
|
GENERAL_ERROR_MSG = "Произошла ошибка при получении диалога, пожалуйста, проверьте лог бэкенда" |
|
ERROR_RETRIEVE_MSG = "Пожалуйста, проверьте свое интернет-соединение или валидность API-Key." |
|
CONNECTION_TIMEOUT_MSG = "Тайм-аут соединения, не удалось получить диалог." |
|
READ_TIMEOUT_MSG = "Тайм-аут чтения, не удалось получить диалог." |
|
PROXY_ERROR_MSG = "Ошибка прокси, не удалось получить диалог." |
|
SSL_ERROR_PROMPT = "Ошибка SSL, не удалось получить диалог." |
|
NO_APIKEY_MSG = "API key пуст, пожалуйста, проверьте, правильно ли он введен." |
|
NO_INPUT_MSG = "Пожалуйста, введите содержание диалога." |
|
BILLING_NOT_APPLICABLE_MSG = "Информация о биллинге не применима" |
|
|
|
TIMEOUT_STREAMING = 240 |
|
TIMEOUT_ALL = 400 |
|
ENABLE_STREAMING_OPTION = True |
|
HIDE_MY_KEY = False |
|
CONCURRENT_COUNT = 100 |
|
|
|
SIM_K = 5 |
|
INDEX_QUERY_TEMPRATURE = 1.0 |
|
|
|
CHUANHU_TITLE = "NeuroGPT " + VERSION |
|
|
|
CHUANHU_DESCRIPTION = "[ℹ️ Телеграм канал проекта](https://t.me/neurogen_news) <br /> [💰 Поддержать автора](https://boosty.to/neurogen) </br>" |
|
|
|
def get_online_gpt4_models(): |
|
url = "https://status.neuroapi.host/v1/status" |
|
try: |
|
response = requests.get(url) |
|
response.raise_for_status() |
|
data = response.json() |
|
except requests.exceptions.HTTPError as http_err: |
|
print(f"HTTP error occurred: {http_err}") |
|
except requests.exceptions.RequestException as err: |
|
print(f"Error occurred: {err}") |
|
except json.JSONDecodeError: |
|
print(f"Could not decode the response into json") |
|
data = {} |
|
|
|
online_models = set() |
|
|
|
for model in data: |
|
|
|
online_models.add("neuro-" + model) |
|
|
|
return list(online_models) |
|
|
|
def get_online_gpt3_models(): |
|
with open('status.json', 'r') as f: |
|
response = json.load(f) |
|
|
|
online_models = set() |
|
for provider in response["data"]: |
|
model_info = provider["model"] |
|
model_status = provider["status"] |
|
|
|
if model_status == "Active" and model_info.startswith('gpt-3.5'): |
|
online_models.add(model_info) |
|
|
|
return list(online_models) |
|
|
|
|
|
|
|
ONLINE_MODELS = [ |
|
'gpt-3.5-turbo', |
|
] |
|
|
|
NAGA_MODELS = [ |
|
'naga-gpt-3.5-turbo-16k', |
|
'naga-gpt-4', |
|
'naga-llama-2-70b-chat', |
|
|
|
|
|
] |
|
|
|
CHATTY_MODELS = [ |
|
'chatty-gpt-3.5-turbo-16k', |
|
'chatty-gpt-4', |
|
|
|
] |
|
|
|
|
|
PURGPT_MODELS = [ |
|
'purgpt-gpt-3.5-turbo-16k', |
|
'purgpt-gpt-3.5-turbo', |
|
'purgpt-text-davinci-003' |
|
] |
|
|
|
DAKU_MODELS = [ |
|
'daku-gpt-3.5-turbo-16k', |
|
'daku-gpt-4', |
|
'daku-gpt-4-32k', |
|
'daku-claude-2', |
|
'daku-claude-2-100k', |
|
'daku-codellama-34b', |
|
'daku-llama-2-70b' |
|
] |
|
|
|
NEURO_MODELS = get_online_gpt4_models() |
|
|
|
if os.environ.get('HIDE_OTHER_PROVIDERS', 'false') == 'true': |
|
MODELS = ONLINE_MODELS + NEURO_MODELS |
|
else: |
|
MODELS = ONLINE_MODELS + NEURO_MODELS + DAKU_MODELS |
|
|
|
if os.environ.get('SHOW_ALL_PROVIDERS', 'false') == 'true': |
|
MODELS = ONLINE_MODELS + NEURO_MODELS + NAGA_MODELS + DAKU_MODELS+ PURGPT_MODELS |
|
else: |
|
MODELS = ONLINE_MODELS + NEURO_MODELS + DAKU_MODELS |
|
|
|
DEFAULT_MODEL = 0 |
|
|
|
os.makedirs("history", exist_ok=True) |
|
|
|
MODEL_TOKEN_LIMIT = { |
|
"gpt-3.5-turbo": 4096, |
|
"gpt-3.5-turbo-16k": 16384, |
|
"gpt-3.5-turbo-0301": 4096, |
|
"gpt-3.5-turbo-0613": 4096, |
|
"gpt-4": 8192, |
|
"gpt-4-0314": 8192, |
|
"gpt-4-0613": 8192, |
|
"gpt-4-32k": 32768, |
|
"neuro-gpt-4": 8192, |
|
"neuro-gpt-4-0314": 8192, |
|
"neuro-gpt-4-0613": 8192, |
|
"neuro-gpt-4-32k": 32768, |
|
"neuro-gpt-4-32k-0613": 32768, |
|
"gpt-4-32k-poe": 32768, |
|
"gpt-3.5-turbo-16k-openai": 16384, |
|
"gpt-3.5-turbo-16k-poe": 16384, |
|
"gpt-4": 8192, |
|
"gpt-4-0613": 8192, |
|
"gpt-4-poe": 8192, |
|
'claude-2': 100000, |
|
"claude-instant-100k": 100000, |
|
"claude-2-100k": 100000, |
|
'naga-gpt-3.5-turbo-16k': 16384, |
|
'naga-gpt-4': 8192, |
|
'naga-llama-2-70b-chat': 4096, |
|
'chatty-gpt-3.5-turbo-16k': 16384, |
|
'chatty-gpt-4': 8192, |
|
'purgpt-gpt-3.5-turbo-16k': 16384, |
|
'purgpt-gpt-3.5-turbo': 4096, |
|
'purgpt-text-davinci-003': 4096, |
|
'naga-text-davinci-003': 4096, |
|
'text-davinci-003': 4096, |
|
'daku-gpt-4': 8192, |
|
'daku-gpt-4-32k': 32768, |
|
'daku-claude-2': 100000, |
|
'daku-claude-2-100k': 100000, |
|
'daku-codellama-34b': 4096, |
|
'daku-llama-2-70b': 4096, |
|
} |
|
|
|
TOKEN_OFFSET = 1000 |
|
DEFAULT_TOKEN_LIMIT = 4096 |
|
REDUCE_TOKEN_FACTOR = 0.5 |
|
|
|
REPLY_LANGUAGES = [ |
|
"Русский", |
|
"English" |
|
] |
|
|
|
|
|
WEBSEARCH_PTOMPT_TEMPLATE = """\ |
|
Web search results: |
|
|
|
{web_results} |
|
Current date: {current_date} |
|
|
|
Instructions: Using the provided web search results, write a comprehensive reply to the given query. Make sure to cite results using [[number](URL)] notation after the reference. If the provided search results refer to multiple subjects with the same name, write separate answers for each subject. |
|
Query: {query} |
|
Reply in {reply_language} |
|
""" |
|
|
|
PROMPT_TEMPLATE = """\ |
|
Context information is below. |
|
--------------------- |
|
{context_str} |
|
--------------------- |
|
Current date: {current_date}. |
|
Using the provided context information, write a comprehensive reply to the given query. |
|
Make sure to cite results using [number] notation after the reference. |
|
If the provided context information refer to multiple subjects with the same name, write separate answers for each subject. |
|
Use prior knowledge only if the given context didn't provide enough information. |
|
Answer the question: {query_str} |
|
Reply in {reply_language}. Respond using Markdown. |
|
""" |
|
|
|
REFINE_TEMPLATE = """\ |
|
The original question is as follows: {query_str} |
|
We have provided an existing answer: {existing_answer} |
|
We have the opportunity to refine the existing answer |
|
(only if needed) with some more context below. |
|
------------ |
|
{context_msg} |
|
------------ |
|
Given the new context, refine the original answer to better |
|
Reply in {reply_language} |
|
If the context isn't useful, return the original answer. |
|
""" |
|
|
|
SUMMARIZE_PROMPT = """Write a concise summary of the following: |
|
|
|
{text} |
|
|
|
CONCISE SUMMARY IN RUSSIAN:""" |
|
|
|
ALREADY_CONVERTED_MARK = "<!-- ALREADY CONVERTED BY PARSER. -->" |
|
|
|
small_and_beautiful_theme = gr.themes.Soft( |
|
primary_hue=gr.themes.Color( |
|
c50="#EBFAF2", |
|
c100="#CFF3E1", |
|
c200="#A8EAC8", |
|
c300="#77DEA9", |
|
c400="#3FD086", |
|
c500="#02C160", |
|
c600="#06AE56", |
|
c700="#05974E", |
|
c800="#057F45", |
|
c900="#04673D", |
|
c950="#2E5541", |
|
name="small_and_beautiful", |
|
), |
|
secondary_hue=gr.themes.Color( |
|
c50="#576b95", |
|
c100="#576b95", |
|
c200="#576b95", |
|
c300="#576b95", |
|
c400="#576b95", |
|
c500="#576b95", |
|
c600="#576b95", |
|
c700="#576b95", |
|
c800="#576b95", |
|
c900="#576b95", |
|
c950="#576b95", |
|
), |
|
neutral_hue=gr.themes.Color( |
|
name="gray", |
|
c50="#f6f7f8", |
|
|
|
c100="#F2F2F2", |
|
c200="#e5e7eb", |
|
c300="#d1d5db", |
|
c400="#B2B2B2", |
|
c500="#808080", |
|
c600="#636363", |
|
c700="#515151", |
|
c800="#393939", |
|
|
|
c900="#2B2B2B", |
|
c950="#171717", |
|
), |
|
radius_size=gr.themes.sizes.radius_sm, |
|
).set( |
|
|
|
button_primary_background_fill_dark="*primary_600", |
|
|
|
|
|
button_primary_border_color_dark="*primary_600", |
|
button_primary_text_color="wihte", |
|
button_primary_text_color_dark="white", |
|
button_secondary_background_fill="*neutral_100", |
|
button_secondary_background_fill_hover="*neutral_50", |
|
button_secondary_background_fill_dark="*neutral_900", |
|
button_secondary_text_color="*neutral_800", |
|
button_secondary_text_color_dark="white", |
|
|
|
|
|
|
|
block_title_background_fill_dark="*primary_900", |
|
block_label_background_fill_dark="*primary_900", |
|
input_background_fill="#F6F6F6", |
|
chatbot_code_background_color="*neutral_950", |
|
chatbot_code_background_color_dark="*neutral_950", |
|
) |
|
|