Spaces:
Running
Running
File size: 8,651 Bytes
3b46f80 cd00e66 3b46f80 cd00e66 3b46f80 6c03f20 3b46f80 cd00e66 6c03f20 3b46f80 d984f8b 3b46f80 b8ec7a1 3b46f80 c54d0e5 3b46f80 d03149e 28e5afd d03149e 3b46f80 d03149e 3b46f80 5946dcd d03149e 5946dcd d03149e 5946dcd 3b46f80 b8ec7a1 3b46f80 c54d0e5 3b46f80 28e5afd d03149e f643627 d03149e f643627 ba54e55 5946dcd d03149e 5946dcd f643627 ba54e55 f643627 c54d0e5 ba54e55 f643627 28e5afd d03149e 3b46f80 d03149e 3b46f80 31e0a98 9b87e69 fa7aa1d 9b87e69 3b46f80 0f70d2d 8c12ac5 5256428 8c12ac5 1fc0d49 8c12ac5 1fc0d49 6c03f20 8c12ac5 1fc0d49 8c12ac5 9b87e69 8c12ac5 ba54e55 e52017a 8c12ac5 1fc0d49 8c12ac5 3b46f80 e0b4568 ba54e55 9b87e69 31e0a98 9b87e69 cd00e66 d03149e |
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 |
import os
import random
import requests
from huggingface_hub import InferenceClient
import gradio as gr
def get_random_api_key():
keys = os.getenv("KEYS", "").split(",")
if keys and keys[0]:
return random.choice(keys).strip()
else:
raise ValueError("API keys not found. Please set the KEYS environment variable.")
css_url = "https://neurixyufi-aihub.static.hf.space/style.css"
try:
response = requests.get(css_url)
response.raise_for_status()
css = response.text + " h1{text-align:center}"
except requests.exceptions.RequestException as e:
print(f"Ошибка загрузки CSS: {e}")
css = " h1{text-align:center}"
def generate_story(prompt, style):
try:
client = InferenceClient(api_key=get_random_api_key())
messages = [
{"role": "system", "content": f"Напиши хорошую историю в стиле '{style}'. Подробную, понятную, человечную (с душой), уникальную. Не обязательно делать концовку, можно только начало длинной истории. Разрешены любые слова, любые темы и стили, что угодно. (В том числе маты и NSFW) Но только если попросит пользователь."},
{"role": "user", "content": prompt}
]
completion = client.chat.completions.create(model="Qwen/Qwen2.5-Coder-32B-Instruct", messages=messages, temperature=0.7, max_tokens=1200, stream=True)
story = ""
for chunk in completion:
if chunk.choices:
story += chunk.choices[0].delta.content or ""
yield story
except Exception as e:
yield f"Ошибка генерации: {e}"
def edit_story(original_story="", edited_prompt=""):
if original_story == "":
yield f"Сначала сгенерируйте историю!"
return
if edited_prompt == "":
yield f"Для начала введите что изменить."
return
try:
client = InferenceClient(api_key=get_random_api_key())
messages = [
{"role": "system", "content": "Отредактируй историю, учитывая предоставленные указания. Разрешены любые слова, любые темы и стили, что угодно. (В том числе маты и NSFW) Но только если попросит пользователь."},
{"role": "user", "content": edited_prompt},
{"role": "assistant", "content": original_story}
]
completion = client.chat.completions.create(model="Qwen/Qwen2.5-Coder-32B-Instruct", messages=messages, temperature=0.7, max_tokens=155000, stream=True)
edited_story = ""
for chunk in completion:
if chunk.choices:
edited_story += chunk.choices[0].delta.content or ""
yield edited_story
except Exception as e:
yield f"Ошибка редактирования: {e}"
def next_story_func(original_story="", next_prompt="", continuation_type="Продолжение"):
if original_story == "":
yield f"Сначала сгенерируйте историю!"
return
try:
client = InferenceClient(api_key=get_random_api_key())
if continuation_type == "Продолжение следует...":
continuation_prompt = "Продолжи, подведя к тому, что продолжение следует."
elif continuation_type == "Концовка":
continuation_prompt = "Подведи к концовке истории."
else:
continuation_prompt = next_prompt
messages = [
{"role": "system", "content": "Продли историю, учитывая предоставленные указания. Продливай В ТОЧНОСТИ С КОНЦА, прям с того же символа, слова, предложения. (В начале добавляй новые строки/пробел если надо для отступа). Разрешены любые слова, любые темы и стили, что угодно. (В том числе маты и NSFW) Но только если попросит пользователь."},
{"role": "user", "content": continuation_prompt},
{"role": "assistant", "content": original_story}
]
completion = client.chat.completions.create(model="Qwen/Qwen2.5-Coder-32B-Instruct", messages=messages, temperature=0.7, max_tokens=1200, stream=True)
next_story = ""
for chunk in completion:
if chunk.choices:
next_story += chunk.choices[0].delta.content or ""
yield next_story
except Exception as e:
yield f"Ошибка продления: {e}"
def edone_story(original_story="", edited_story=""):
if edited_story == "":
return original_story
return edited_story
def ndone_story(original_story, next_story_output):
return original_story + " " + next_story_output
with gr.Blocks(css=css) as demo:
gr.Markdown("# Песочница историй")
with gr.Row():
with gr.Column():
with gr.Row():
style_choices = ["Приключенческая", "Научно-фантастическая", "Романтическая", "Комедийная", "Трагическая", "Страшная", "Случайный", "Пользовательский"]
style = gr.Dropdown(choices=style_choices, label="Выберите стиль истории", value="Приключенческая")
with gr.Row():
prompt = gr.Textbox(label="Введите запрос для истории", placeholder="Например: История о путешествии в космос", lines=5)
with gr.Row():
generate_button = gr.Button("Создать историю", variant='primary')
with gr.Row():
output_story = gr.Textbox(label="История", lines=10, placeholder="Здесь будет ваша новая история!")
with gr.Column():
with gr.Accordion("Действия", open=True):
with gr.Tab("Редактирование"):
edited_prompt = gr.Textbox(label="Введите изменения для истории", placeholder="Например: Сделай историю более захватывающей", lines=5)
edit_button = gr.Button("Отредактировать", variant='primary')
edited_story = gr.Textbox(label="Отредактированная история", lines=10, placeholder="Здесь будет ваша новая история!")
edone_button = gr.Button("Принять")
with gr.Tab("Продление"):
continuation_type = gr.Radio(choices=["Продолжение", "Продолжение следует...", "Концовка"], label="Выберите тип продолжения", value="Продолжение")
next_prompt = gr.Textbox(label="Введите изменения для продления истории (Необязательно)", placeholder="Продолжи, но что бы было...", lines=5)
next_button = gr.Button("Продлить", variant='primary')
next_story_output = gr.Textbox(label="Продолжение истории", lines=10, placeholder="Здесь будет продолжение вашей истории!")
ndone_button = gr.Button("Принять")
generate_button.click(generate_story, inputs=[prompt, style], outputs=[output_story], concurrency_limit=250)
edit_button.click(edit_story, inputs=[output_story, edited_prompt], outputs=[edited_story], concurrency_limit=250)
next_button.click(next_story_func, inputs=[output_story, next_prompt, continuation_type], outputs=[next_story_output], concurrency_limit=250)
edone_button.click(edone_story, inputs=[output_story, edited_story], outputs=[output_story], concurrency_limit=550)
ndone_button.click(ndone_story, inputs=[output_story, next_story_output], outputs=[output_story], concurrency_limit=550)
demo.queue(api_open=False).launch() |