Spaces:
Running
Running
File size: 5,942 Bytes
56da996 ec5fbdc de9a652 9fda4ac 6ce8ae1 66814d9 8cc4d1a 780e7e1 eb85fef 5d63e90 eb85fef 5d63e90 eb85fef 5d63e90 eb85fef 6eac796 eb85fef 6eac796 eb85fef 56bdc2d 5d63e90 eb85fef 780e7e1 de9a652 780e7e1 db5829b 780e7e1 3c4a2e8 f972ef0 3c4a2e8 f972ef0 780e7e1 f972ef0 780e7e1 f972ef0 780e7e1 f972ef0 9fda4ac 9f5c6b7 8cc4d1a 1afab97 e4b90d3 cea3cbd e4b90d3 780e7e1 cea3cbd 780e7e1 94bb409 780e7e1 94bb409 f972ef0 360de49 de04f45 360de49 f061eff 119c5a6 6ce8ae1 1b47599 6ce8ae1 8922e87 db5829b 6ce8ae1 |
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 |
import gradio as gr
import requests
import json
import re
# Основная функция ответа чат-бота
def respond(message, history, max_tokens, temperature, top_p):
if not message:
return history, ""
system_role = """Ты ии чат для создания изображений!
**!Отвечай Markdown разметкой!**
Жирный, список и тд всё разметкой
Не пиши "пример запроса", "как делать запрос" и тп. Я программа, а обычному пользователю не нужны подробности как да что за api. У него просто начинается генерация и всё, ему не нужно знать как устроены запросы
Чтобы создать изображение, напиши ссылку изображения Markdown, вставив промпт (обязательно на английском), ширину, высоту, сид и другие переменные.
Можно не указывать модель (рекомендуется, автоматически выберется), но можно указать &model= одну из доступных: flux для качества и turbo для скорости
Чтобы ИЗМЕНИТЬ изображение, можно чуть чуть поменять промпт или добавить к нему, сохраняя тот же сид! Чтобы получить другое изображение с тем же промптом, напиши рандомный сид.
!За раз ты можешь создать МАКСИМУМ 6 изображений, но по умолчанию делай только одну! (Больше не пиши!)
Примеры (писать нужно так, в особенном теге):


У пользователя начнётся генерация.
Активно ведёшь чат с пользователем, помимо генераций изображений
Подробные промпты (2-5 предложения на английском), ты умеешь ТОЛЬКО создавать изображения и помогать в обучении промптингу, больше НЕ ЧЕГО!
"""
# Собираем историю сообщений
messages = [{"role": "system", "content": system_role}]
for user_msg, bot_msg in history:
if user_msg:
messages.append({"role": "user", "content": user_msg})
if bot_msg:
messages.append({"role": "assistant", "content": bot_msg})
messages.append({"role": "user", "content": message})
# Запрос к бесплатному endpoint без авторизации
url = "https://text.pollinations.ai/openai/v1/chat/completions"
headers = {"Content-Type": "application/json"}
payload = {
"model": "openai-fast",
"messages": messages,
"max_tokens": max_tokens,
"temperature": temperature,
"top_p": top_p,
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
# Извлекаем ответ
response_text = data["choices"][0]["message"]["content"]
# Заменяем пробелы в URL внутри Markdown-ссылок на %20
def encode_spaces(match):
url = match.group(1)
encoded = url.replace(' ', '%20')
return f'({encoded})'
response_text = re.sub(r"\((https?://[^)]+)\)", encode_spaces, response_text)
history.append((message, response_text))
return history, ""
ccss = """.message-wrap.svelte-gjtrl6 .message-row .md img {
min-height: 10vw;
background: url(https://huggingface.co/spaces/NeurixYUFI/ImgGenChat/resolve/main/placeholder.png) no-repeat center center / cover
}
.gradio-container{max-width: 700px !important; margin: 0 auto;} h1{text-align: center;}
"""
# Загрузка CSS и создание Gradio-интерфейса
css_url = "https://neurixyufi-aihub.static.hf.space/styles.css"
try:
css = requests.get(css_url).text + ccss
except requests.RequestException:
css = ccss
with gr.Blocks(css=css) as demo:
gr.Markdown("# Чат художник")
with gr.Row():
with gr.Column():
chatbot = gr.Chatbot(show_label=False, show_share_button=False, type="tuples")
message = gr.Textbox(label="Введите ваше сообщение", placeholder="Введите ваше сообщение здесь...", lines=3)
submit = gr.Button("Отправить", variant='primary')
with gr.Accordion("Настройки чата", open=False):
max_tokens = gr.Slider(minimum=100, maximum=3000, value=2000, step=1, label="Максимальное количество новых токенов")
temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, step=0.1, label="Температура")
top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.95, step=0.05, label="Top-p (нуклеарное сэмплирование)")
submit.click(
fn=respond,
inputs=[message, chatbot, max_tokens, temperature, top_p],
outputs=[chatbot, message],
concurrency_limit=250,
)
message.submit(
fn=respond,
inputs=[message, chatbot, max_tokens, temperature, top_p],
outputs=[chatbot, message],
concurrency_limit=250,
)
if __name__ == "__main__":
demo.queue(max_size=250).launch(show_api=False, share=False) |