File size: 6,143 Bytes
e26a955 2ad363a 7aaca67 e26a955 2ad363a 1a0f17a 2ad363a 7aaca67 e26a955 a4fcad4 72c8e9b a4fcad4 1a14bd4 49885a1 8ceb1e8 a4fcad4 7aaca67 e26a955 2ad363a a4fcad4 2ad363a a4fcad4 2ad363a e26a955 a4fcad4 2ad363a 8171d56 2ad363a e26a955 2ad363a a4fcad4 dd4ec62 e26a955 a4fcad4 e26a955 a4fcad4 2ad363a e26a955 2ad363a e26a955 2ad363a e26a955 2ad363a e26a955 2ad363a e26a955 a4fcad4 2ad363a e26a955 2ad363a e26a955 |
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 134 135 136 137 138 139 140 141 142 143 144 145 |
from huggingface_hub import InferenceClient
import gradio as gr
# Подключаем клиента для текстовой модели
client = InferenceClient(
"mistralai/Mistral-7B-Instruct-v0.3"
)
# Подключаем клиента для генерации изображений
image_client = InferenceClient(
"stabilityai/stable-diffusion-2"
)
# Форматируем текстовый запрос
def format_prompt(message, history, genre):
prompt = f"Ты — персонаж в текстовой игре, тебя зовут Рассказчик, взаимодействующий с игроком на русском языке. " \
f"Ты находишься в жанре игры: {genre}. Каждый твой ответ должен продолжать сюжет игры, принимая во внимание прошлые действия игрока и текущую ситуацию. " \
f"Твой стиль общения должен быть интересным и поддерживать атмосферу игры. Ты должен поддерживать динамичность сюжета и постоянно добавлять элементы интерактивности и новых вызовов. " \
f"В начале игры игроку предоставляется информация о мире, его текущем положении и доступных действиях. Он может выбирать из предложенных вариантов или описывать свои действия свободно. " \
f"Важно, чтобы ты адаптировал ответы в зависимости от решений игрока и развивал сюжет на основе их выбора. Каждый ответ должен быть логичным продолжением событий, с описанием последствий выбранных действий." \
f"В жанре Horror нужно вызвать у игрока эффект зловещей долины, и иногда ломать четвёртую стену." \
f"Стиль повествования меняется в зависимости от жанра"
for user_prompt, bot_response in history:
prompt += f"[INST] {user_prompt} [/INST]"
prompt += f" {bot_response}</s> "
prompt += f"[INST] {message} [/INST]"
return prompt
# Генерация текста
def generate(
prompt, history, system_prompt, genre, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,
):
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(f"{system_prompt}, {prompt}", history, genre)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=True)
output = ""
for response in stream:
output += response.token.text
yield output
return output
# Генерация изображений
def generate_image(description):
image = image_client.text_to_image(description, width=512, height=512)
return image.url
# Дополнительные настройки для Gradio
additional_inputs = [
gr.Textbox(
label="System Prompt",
max_lines=1,
interactive=True,
visible=False # Скрыть поле ввода системного запроса
),
gr.Radio(
label="Game Genre",
choices=["Investigation", "Fantasy", "Sci-Fi", "Horror", "Adventure", "Mystery"],
value="Horror", # Жанр по умолчанию
interactive=True,
info="Select the genre of the game",
visible=True # Отображение выбора жанра
),
gr.Slider(
label="Temperature",
value=0.1,
minimum=0.0,
maximum=1.0,
step=0.05,
interactive=True,
info="Higher values produce more diverse outputs",
visible=False # Скрыть слайдер температуры
),
gr.Slider(
label="Max new tokens",
value=1024,
minimum=128,
maximum=8192,
step=64,
interactive=True,
info="The maximum numbers of new tokens",
visible=False # Скрыть слайдер максимального числа токенов
),
gr.Slider(
label="Top-p (nucleus sampling)",
value=0.90,
minimum=0.0,
maximum=1,
step=0.05,
interactive=True,
info="Higher values sample more low-probability tokens",
visible=False # Скрыть слайдер top-p
),
gr.Slider(
label="Repetition penalty",
value=1.2,
minimum=1.0,
maximum=2.0,
step=0.05,
interactive=True,
info="Penalize repeated tokens",
visible=False # Скрыть слайдер штрафа за повторения
),
gr.Textbox(
label="Image Description",
placeholder="Describe the scene or character you want to generate.",
interactive=True
)
]
# Пример выбора
examples = [["Подробнее"], ["Варианты"]]
# Интерфейс Gradio
gr.ChatInterface(
fn=generate,
chatbot=gr.Chatbot(show_label=False, show_share_button=True, show_copy_button=True, likeable=True, layout="panel"),
additional_inputs=additional_inputs,
title="theGame",
examples=examples,
concurrency_limit=20,
).launch(show_api=False)
# Интерфейс для генерации картинок
gr.Interface(
fn=generate_image,
inputs="text",
outputs="image",
title="Image Generator"
).launch()
|