Spaces:
Running
Running
File size: 9,878 Bytes
3b46f80 200784b 3b46f80 cd00e66 3b46f80 6c03f20 3b46f80 cd00e66 6c03f20 3b46f80 200784b dd23f35 200784b 7a7b8ac 200784b dd23f35 200784b dd23f35 200784b d984f8b 3b46f80 2df7ab7 3b46f80 200784b dd23f35 200784b 3b46f80 d03149e 3b46f80 5946dcd 3b46f80 c54d0e5 3b46f80 286bbdd 3b46f80 dd23f35 200784b f643627 d03149e f643627 ba54e55 f643627 ba54e55 f643627 d278742 ba54e55 286bbdd f643627 dd23f35 200784b 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 140 141 142 143 144 |
import os
import random
import requests
import gradio as gr
import json
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}"
API_URL = "https://text.pollinations.ai/openai"
MODEL_NAME = "gemini" # Или какая у вас модель
TEMPERATURE = 0.7
MAX_TOKENS = 1200
def call_pollinations_api(messages, temperature=TEMPERATURE, max_tokens=MAX_TOKENS, stream=False): # stream=False
"""Calls the Pollinations API with the given messages."""
headers = {
"Content-Type": "application/json"
}
data = {
"model": MODEL_NAME,
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens,
"stream": stream
}
response = requests.post(API_URL, headers=headers, data=json.dumps(data))
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
return response
def generate_story(prompt, style):
try:
messages = [
{"role": "system", "content": f"Напиши хорошую историю в стиле '{style}'. Подробную, понятную, человечную (с душой), уникальную. Не обязательно делать концовку, можно только начало длинной истории. Разрешены любые слова, любые темы и стили, что угодно. (В том числе маты и NSFW) Но только если попросит пользователь, по скольку это ТВОРЧЕСТВО! Не в коем случае не пиши подобное: 'Хорошо, вот ваш текст:', всегда пиши текст, без лишних комментариев."},
{"role": "user", "content": prompt}
]
response = call_pollinations_api(messages)
full_response = response.json() # Получаем JSON-ответ целиком
print("Полный ответ от API:", json.dumps(full_response, indent=2, ensure_ascii=False)) # Выводим отформатированный JSON
story = full_response["choices"][0]["message"]["content"] if "choices" in full_response and len(full_response["choices"]) > 0 else "Ответ не получен или структура ответа не соответствует ожидаемой."
yield story
except requests.exceptions.RequestException as e:
yield f"Ошибка API запроса: {e}"
except Exception as e:
yield f"Ошибка генерации: {e}"
def edit_story(original_story="", edited_prompt=""):
try:
messages = [
{"role": "system", "content": "Отредактируй историю, учитывая предоставленные указания. Разрешены любые слова, любые темы и стили, что угодно. (В том числе маты и NSFW) Но только если попросит пользователь."},
{"role": "user", "content": edited_prompt},
{"role": "user", "content": f"История: ```\n{original_story}\n```"}
]
response = call_pollinations_api(messages, max_tokens=32760, stream=False)
full_response = response.json()
print("Полный ответ от API (edit):", json.dumps(full_response, indent=2, ensure_ascii=False))
edited_story = full_response["choices"][0]["message"]["content"] if "choices" in full_response and len(full_response["choices"]) > 0 else "Ответ не получен или структура ответа не соответствует ожидаемой."
yield edited_story
except requests.exceptions.RequestException as e:
yield f"Ошибка API запроса: {e}"
except Exception as e:
yield f"Ошибка редактирования: {e}"
def next_story_func(original_story="", next_prompt="", continuation_type="Продолжение"):
try:
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": "user", "content": f"История: ```\n{original_story}\n```"}
]
response = call_pollinations_api(messages, stream=False)
full_response = response.json()
print("Полный ответ от API (next):", json.dumps(full_response, indent=2, ensure_ascii=False))
next_story = full_response["choices"][0]["message"]["content"] if "choices" in full_response and len(full_response["choices"]) > 0 else "Ответ не получен или структура ответа не соответствует ожидаемой."
yield next_story
except requests.exceptions.RequestException as e:
yield f"Ошибка API запроса: {e}"
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() |