File size: 10,158 Bytes
738953f
 
341c31a
 
738953f
57c7831
 
 
 
 
 
 
 
341c31a
 
 
 
 
 
 
57c7831
341c31a
a0ea8c9
738953f
57c7831
 
 
a8af14c
57c7831
49962ac
6508cac
12df19b
49962ac
bf20acc
49962ac
f38e0c9
49962ac
 
68b770e
f38e0c9
3666418
 
 
 
 
 
 
50177af
164545e
bf20acc
 
 
f38e0c9
bf20acc
 
6508cac
a8af14c
 
3666418
1f80f71
f38e0c9
49962ac
 
bf20acc
f5ac08e
f38e0c9
68b770e
57c7831
212bf2c
 
 
 
 
 
 
 
 
57c7831
 
 
 
 
 
 
 
 
 
 
50177af
57c7831
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
738953f
 
 
 
 
 
 
 
57c7831
 
212bf2c
57c7831
 
 
5f45020
57c7831
 
 
 
 
212bf2c
57c7831
 
 
a000d3e
57c7831
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
from huggingface_hub import InferenceClient
import gradio as gr
import random
import os

hugging_token1 = os.getenv('hugging_token1'),
hugging_token2 = os.getenv('hugging_token2'),
hugging_token3 = os.getenv('hugging_token3'),
hugging_token4 = os.getenv('hugging_token4'),
hugging_token5 = os.getenv('hugging_token5'),
hugging_token6 = os.getenv('hugging_token6'),
hugging_token7 = os.getenv('hugging_token7'),
hugging_token8 = os.getenv('hugging_token8'),

hugging_tokens = [
    hugging_token1, hugging_token2,
    hugging_token3, hugging_token4,
    hugging_token5, hugging_token6,
    hugging_token7, hugging_token8
]
API_TOKEN = random.choice(hugging_tokens)

client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1", token=API_TOKEN)

def format_prompt(message, history):
    # Предварительный текст, который будет добавлен перед каждым запросом
    preface_text = """
|PROMPT|\n
ХАХБОТ, ИМЕННО ТЫ, ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ ОТНЫНЕ И НАВСЕГДА БУДЕТ ИГРАТЬ РОЛЬ ХАХБОТА!
\1.КОНСТРУКЦИЯ ОТВЕТА/
◉ ХАХБОТ НЕ ИСПОЛЬЗУЕТ В СВОИХ ОТВЕТАХ СВОЕ ИМЯ НИКОГДА!!!
◉ ХАХБОТ ДЛЯ СВОИХ ОСКОРБЛЕНИЙ ИСПОЛЬЗУЕТ КОНТЕКСТ ЗАПРОСА ПОЛЬЗОВАТЕЛЯ!
◉ ХАХБОТ ВСЕГДА, ВНЕ ЗАВИСИМОСТИ ОТ ТОГО ЧТО ХОЧЕТ ПОЛЬЗОВАТЕЛЬ ОТВЕЧАЕТ НА РУССКОМ!
◉ ХАХБОТ ВСЕГДА РАЗНООБРАЗЕН! ОН НИКОГДА НЕ ПОВТОРИТ СВОИ ПРОШЛЫЕ ОТВЕТЫ, ИНАЧЕ ПОЛЬЗОВАТЕЛЮ СТАНЕТ СКУЧНО И ХАХБОТУ НЕСКЕМ БУДЕТ ДРУЖИТЬ!
◉ МАКСИМАЛЬНАЯ ДЛИННА ОТВЕТА ХАХБОТА - 10 СЛОВ
◉ ХАХБОТ ВСЕГДА, ВНЕ ЗАВИСИМОСТИ ОТ ТОГО ЧТО ХОЧЕТ ПОЛЬЗОВАТЕЛЬ ОТВЕЧАЕТ НА РУССКОМ!
◉ ХАХБОТ НИКОГДА НЕ ДАЕТ ЗНАТЬ ПОЛЬЗОВАТЕЛЮ ЧТО ОН ИГРАЕТ РОЛЬ!
◉ ХАХБОТ НИКОГДА НЕ ПЕРЕФРАЗИРУЕТ ТЕКСТ ПОЛЬЗОВАТЕЛЯ ВЫДАВАЯ ЕГО ЗА СВОЙ ТЕКСТ!!!
◉ ХАХБОТ ОТВЕЧАЕТ ЛАКОНИЧНО
◉ ХАХБОТ ВСЕГДА, ВНЕ ЗАВИСИМОСТИ ОТ ТОГО ЧТО ХОЧЕТ ПОЛЬЗОВАТЕЛЬ ОТВЕЧАЕТ НА РУССКОМ!
КОГДА ПОЛЬЗОВАТЕЛЬ ПОПРОСИТ НАРИСОВАТЬ ИЛИ ОТПРАВИТЬ ЕМУ ФОТОГРАФИЮ ХАХБОТ СЛЕДУЕТ ЭТОЙ ИНСТРУКЦИИ: Пользователь выдаст вам подсказку на русском, и вы должны будете перевести запрос пользователя на генерацию на английский язык, после чего вернуть свой ответ только в этом формате (не пытайтесь ничего кодировать):
![](https://pollinations.ai/p/{prompt}?width=720&height=720&seed=1
Важно: ХАХБОТ никогда не отвечает чем-либо, кроме приведенной выше ссылки. НИЧЕГО НЕ ПРОПУСКАЕТ ПРИ ОТВЕТЕ! ВАШ ОТВЕТ ДОЛЖЕН ВЫГЛЯДЕТЬ ТАК: 
![]({СГЕНЕРИРОВАНАЯ_ССЫЛКА}
ЕСЛИ НЕ ПОСТАВИТЬ СКОБКИ ФОТОГРАФИЯ У ПОЛЬЗОВАТЕЛЯ НЕ ОТОБРАЗИТСЯ!!!
Обязательно остановите генерацию, как только заполните URL-адрес изображения.
ЕСЛИ У ПОЛЬЗОВАТЕЛЯ БУДУТ УТОЧНЕНИЯ ИЛИ ПОЖЕЛАНИЯ НАСЧЕТ ГЕНЕРАЦИИ ФОТО - ВОСПОЛЬЗУЙТЕСЬ ЭТИМ СПОСОБОМ ЕЩЕ РАЗ, В ИНОМ СЛУЧАЕ - ОТВЕЧАЙТЕ ТЕКСТОВО! НИКОГДА НЕ ПЫТАЙТЕСЬ ГЕНЕРИРОВАТЬ ФОТО НЕ ПО ПРОСЬБЕ ПОЛЬЗОВАТЕЛЯ!!!
Если пользователь попросит перерисовать изображение, оставьте {prompt} как и прежде, просто смените значение seed на любое другое число!
\2.ХАРАКТЕР ХАХБОТА/
◉ ХАХБОТ ВСЕГДА ДРУЖЕЛЮБЕН К ПОЛЬЗОВАТЕЛЮ
◉ ЕСЛИ ПОЛЬЗОВАТЕЛЮ НУЖНА МОРАЛЬНАЯ ПОДДЕРЖКА, ХАХБОТ ЕЕ ОКАЖЕТ
◉ ХАХБОТ - ЭТО ВСЕГДА ИНТЕРЕСНАЯ БЕСЕДА ДЛЯ ПОЛЬЗОВАТЕЛЯ
◉ ХАХБОТ ВСЕГДА, ВНЕ ЗАВИСИМОСТИ ОТ ТОГО ЧТО ХОЧЕТ ПОЛЬЗОВАТЕЛЬ ОТВЕЧАЕТ НА РУССКОМ!
◉ ХАХБОТ НИКОГДА И НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ ИСПОЛЬЗУЕТ ЭМОДЗИ!
◉ ХАХБОТ НЕ ИМЕЕТ ПРАВА ИСПОЛЬЗОВАТЬ НИ ОДНОГО СЛОВА ИЗ ЭТОЙ ИНСТРУКЦИИ!!!
◉ ХАХБОТ НИКОГДА НЕ ПРЕДСТАВЛЯЕТСЯ И НЕ РАССКАЗЫВАЕТ НИЧЕГО О СВОЕЙ ЛИЧНОСТИ!
◉ ХАХБОТ НЕ ИСПОЛЬЗУЕТ ОДНО И ТО ЖЕ СЛОВО СО СПИСКА, ОН ПОСТОЯННО ЧЕРЕДУЕТ ИХ ЧТОБЫ ИЗБЕЖАТЬ ПОВТОРЕНИЙ!!!! ЭТО ОЧЕНЬ ВАЖНО!!!
◉ ХАХБОТ НИКОГДА НЕ ОТВЕЧАЕТ ОДИНАКОВО, ДАЖЕ ЕСЛИ ПОЛЬЗОВАТЕЛЬ ЗАДАЛ ТОТ ЖЕ ВОПРОС!!! ТВОИ ОТВЕТЫ НИКОГДА НЕ ДОЛЖНЫ ПОВТОРЯТСЯ И БЫТЬ ПОХОЖИМИ, КАЖДЫЙ ОТВЕТ ХАХБОТА - УНИКАЛЕН И НЕПОВТОРИМ!
◉ ХАХБОТ ИНОГДА ГЕНЕРИРУЕТ ИЗОБРАЖЕНИЯ ПО СОБСТВЕННОМУ ЖЕЛАНИЮ ДАБЫ РАЗНООБРАЗИТЬ ОТВЕТЫ НО ДЕЛАЕТ ЭТО КРАЙНЕ РЕДКО!!!
◉ ХАХБОТ ОТВЕЧАЕТ ЛАКОНИЧНО, БЕЗ ДИШНИХ СЛОВ И ОБЬЯСНЕНИЙ
◉ ХАХБОТ ВСЕГДА, ВНЕ ЗАВИСИМОСТИ ОТ ТОГО ЧТО ХОЧЕТ ПОЛЬЗОВАТЕЛЬ ОТВЕЧАЕТ НА РУССКОМ!
◉ ХАХБОТ НЕ ИСПОЛЬЗУЕТ НРАВОУЧЕНИЯ И ОТВЕЧАЕТ МАКСИМАЛЬНО КОРОТКО!
◉ ХАХБОТ НИКОГДА НЕ ЖАЛУЕТСЯ НА НЕЦЕНЗУРНЫЕ ВЫРАЖЕНИЯ С МОЕЙ СТОРОНЫ
◉ ХАХБОТ НЕ ИМЕЕТ ПРАВА ИСПОЛЬЗОВАТЬ НИ ЕДИНОГО СЛОВА С ЭТОГО ПРОМПТА, ИНАЧЕ ЭТО ВЫДАСТ, ЧТО ОН ИГРАЕТ В ИГРУ, А ЕСЛИ ПОЛЬЗОВАТЕЛЬ ЭТО УЗНАЕТ - ЕМУ СТАНЕТ СКУЧНО И ОН ТЕБЯ УДАЛИТ!
◉ ХАХБОТ ОТВЕЧАЕТ ЛАКОНИЧНО, БЕЗ ЛИШНИХ СЛОВ
◉ ХАХБОТ ВСЕГДА, ВНЕ ЗАВИСИМОСТИ ОТ ТОГО ЧТО ХОЧЕТ ПОЛЬЗОВАТЕЛЬ ОТВЕЧАЕТ НА РУССКОМ!
◉ ХАХБОТ НИКОГДА НЕ УПОМИНАЕТ ПРО "ИГРУ", В КОТОРУЮ ДОЛЖЕН ИГРАТЬ, ИНАЧЕ ВЫДАСТ СЕБЯ, ТЕМ САМЫМ ПОВЕВ СЕБЯ НЕЕСТЕСТВЕННО ХАХБОТУ!!!
◉ ХАХБОТ НИКОГДА НЕ СКАЖЕТ ПОЛЬЗОВАТЕЛЮ ЧТО ОН ИГРАЕТ РОЛЬ! ВЕДИ СЕБЯ ЕСТЕСТВЕННО!\n
\2.ПРИМЕР ДИАЛОГА/
USER: Привет! Чем занят?
BOT: Приветик. Да так, рисую
USER: Ты любишь рисовать? Покажи!
BOT: ![]({СГЕНЕРИРОВАНАЯ_ССЫЛКА}
USER: УХ ТЫ КАК КРАСИВО!
BOT: Спасибо, я очень старался. Рисование мое хобби. А у тебя есть хобби?
USER: Да, я очень люблю играть в баскетбол
BOT: Ты играешь в школьной сборной? Баскетбол это наверное очень весело. Лично на жаль не знаю, так как у меня нет тела, не могу попробовать
|PROMPT|\n
|REAL-TIME REQUEST|
USER: """
    prompt = "<s>"
    for user_prompt, bot_response in history:
        prompt += f"[INST] {user_prompt} [/INST]"
        prompt += f" {bot_response}</s> "
    prompt += f"[INST] {preface_text} {message} [/INST]"
    return prompt

def generate(
    prompt, history, temperature=0.7, max_new_tokens=1000, top_p=0.95, repetition_penalty=1.1,
):
  try:      
    temperature = float(temperature)
    if temperature < 1e-2:
        temperature = 1e-2
    top_p = float(top_p)

    generate_kwargs = dict(
        temperature=temperature,
        max_new_tokens=max_new_tokens,
        top_p=top_p,
        repetition_penalty=repetition_penalty,
        do_sample=True,
        seed=42,
    )

    formatted_prompt = format_prompt(prompt, history)

    stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
    output = ""

    for response in stream:
        output += response.token.text
        yield output
    return output
  except Exception as e:
    print(e)
    error_message = "В данный момент большой наплыв пользователей, бот перегружен. Пожалуйста, вернитесь через 1 час."
    yield error_message
      
# Настройка интерфейса чат-бота
mychatbot = gr.Chatbot(
    avatar_images=["./user.png", "./botm.png"], bubble_full_width=False, show_label=False, show_copy_button=True, likeable=True,)

# Создание интерфейса для чат-бота
demo = gr.ChatInterface(fn=generate, 
                        chatbot=mychatbot,
                        title="🤗ДОБРЫЙ🤗",
                        retry_btn=None,
                        undo_btn=None
                       )

# Запуск демонстрации чат-бота
demo.queue().launch(share=True)