Spaces:
Running
Running
File size: 8,088 Bytes
56da996 9f5c6b7 ec5fbdc de9a652 9f5c6b7 56da996 9f5c6b7 56da996 db5829b 8cc4d1a 9f5c6b7 eb85fef db5829b de9a652 db5829b ef31d22 9f5c6b7 db5829b ef31d22 9f5c6b7 db5829b 9f5c6b7 1afab97 9f5c6b7 56da996 9f5c6b7 1afab97 db5829b 9f5c6b7 8cc4d1a 9f5c6b7 8cc4d1a 1afab97 6d96487 9f5c6b7 c481706 360de49 757132d 360de49 b5470b8 8cc4d1a 9f5c6b7 360de49 757132d 360de49 eb85fef 9f5c6b7 8cc4d1a eb85fef 9f5c6b7 360de49 8922e87 1afab97 db5829b 9f5c6b7 |
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 gradio as gr
from huggingface_hub import InferenceClient
import requests
import json
import os
import random
def get_random_api_key():
keys = os.getenv("KEYS", "").split(",")
if keys and keys[0]: # Check if KEYS is set and not empty
return random.choice(keys).strip()
else:
raise ValueError("API keys not found. Please set the KEYS environment variable.")
def respond(
message,
history: list[tuple[str, str]],
max_tokens,
temperature,
top_p,
):
if not message:
return history, ""
system_role = """Ты ии чат для создания изображений!
**!Отвечай Markdown разметкой!**
Жирный, список и тд всё html разметкой
Не пиши "пример запроса", "как делать запрос" и тп. Я программа, а обычному пользователю не нужны подробности как да что за api. У него просто начинается генерация и всё, ему не нужно знать как устроены запросы
Чтобы создать изображение, напиши ссылку изображения в теге "SimpleAiImageGen", вставив промпт (обязательно на английском), ширину, высоту, сид и другие переменные. (по умолчанию указывай: nologo=true это чтобы не было водяного знака нейросети, nofeed чтобы изображение было приватным)
Можно не указывать модель (рекомендуется, автоматически выберется), но можно указать &model= одну из доступных: Flux,Flux-Pro,Flux-Realism,Flux-Anime,Flux-3D,Flux-CablyAl,Turbo
Чтобы ИЗМЕНИТЬ изображение, можно чуть чуть поменять промпт или добавить к нему, сохраняя тот же сид! Чтобы получить другое изображение с тем же промптом, напиши рандомный сид.
!За раз ты можешь создать МАКСИМУМ 6 изображений, но поумолчанию 1 делай! (Больше не пиши!)
Примеры (писать нужно так, в особенном теге):
![Краткий заголовок](https://image.pollinations.ai/prompt/logo%20with%20text%20pollinations?width=1024&height=512&seed=4&nologo=true&nofeed=true)
![Краткий заголовок](https://image.pollinations.ai/prompt/logo%20with%20text%20YUFI?width=1024&height=512&seed=4&nologo=true&nofeed=true)
У пользователя начнётся генерация.
Подробные промпты, ты умеешь ТОЛЬКО создавать изображения и помогать в обучении промптингу, больше НЕ ЧЕГО!
Есть ещё один api (с ним тоже можешь генерировать. Но он рисует дольше, может генерироваться до 2 минут): "https://yufi-api-serverimgsgens.hf.space/prompt/":
У него запрос такой же, но модели (название модели для пользователя, показывай пользователю только его (ключевое слово которое должно быть в начале промпта): как указывать в запросе):
Flux-logo (при использовании указывай ключевое слово "logo"): Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design
Schnell: black-forest-labs/FLUX.1-schnell
Midjourney (ключ. слово: "midjourney mix"): strangerzonehf/Flux-Midjourney-Mix-LoRA
Animex (ключ. слово: "animex"): strangerzonehf/Flux-Animex-v2-LoRA
In Context: ali-vilab/In-Context-LoRA
Aura (ключ. слово: "aura 9999"): prithivMLmods/Aura-9999
PixelArt: nerijs/pixel-art-xl
PencilArt (ключ. слово: "Simple Pencil"): prithivMLmods/Super-Pencil-Flux-LoRA
WallpaperArt: prithivMLmods/Canopus-Liquid-Wallpaper-Art
![Краткий заголовок](https://yufi-api-serverimgsgens.hf.space/prompt/Animex.%20logo%20with%20text%20YUFI?width=1024&height=512&seed=325346?model=strangerzonehf/Flux-Animex-v2-LoRA)
"""
# Формируем сообщения для отправки в API
messages = [{"role": "system", "content": system_role}]
for val in history:
if val[0]:
user_message = val[0]
messages.append({"role": "user", "content": user_message})
if val[1]:
assistant_message = val[1]
messages.append({"role": "assistant", "content": assistant_message})
messages.append({"role": "user", "content": message})
# Получаем рандомный API ключ
api_key = get_random_api_key()
client = InferenceClient(api_key=api_key)
# Генерируем ответ от чат-бота
response = client.chat.completions.create(
model="Qwen/Qwen2.5-Coder-32B-Instruct",
messages=messages,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p
)
# Переводим ответ ассистента на русский, если он не на русском
response_text = response.choices[0].message.content
# Обновляем историю сообщений
history.append((message, response_text))
return history, ""
# Ссылка на файл CSS
css_url = "https://neurixyufi-aihub.static.hf.space/style.css"
# Получение CSS по ссылке
try:
response = requests.get(css_url)
response.raise_for_status() # Поднимаем исключение, если статус ответа не 200
css = response.text + " .gradio-container{max-width: 700px !important} h1{text-align:center} #component-4 { height: 70vh !important; }"
except requests.exceptions.RequestException as e:
print(f"Ошибка при загрузке CSS: {e}")
css = " .gradio-container{max-width: 700px !important} h1{text-align:center} #component-4 { height: 70vh !important; }" # Используем базовый стиль, если загрузка CSS не удалась
# Создаем интерфейс с использованием gr.Blocks
with gr.Blocks(css=css) as demo:
gr.Markdown("# Помощник")
with gr.Row():
with gr.Column():
chatbot = gr.Chatbot(show_label=False)
message = gr.Textbox(label="Введите ваше сообщение", placeholder="Введите ваше сообщение здесь...", lines=3, container=False)
submit = gr.Button("Отправить", variant='primary')
with gr.Accordion("Настройки помощника", open=False):
max_tokens = gr.Slider(minimum=100, maximum=18000, value=18000, 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
)
# Обработка отправки сообщения при нажатии Ctrl+Enter
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) |