|
|
import gradio as gr |
|
|
from g4f.client import Client |
|
|
import re |
|
|
import json |
|
|
|
|
|
client = Client() |
|
|
|
|
|
def get_task(prompt): |
|
|
return f'''Ты генерируешь скрипт продолжения прямой линии с Владимиром Владимировичем Путиным. Вопросы телезрителей передаёт Киселёв - он максимально подобострастен, поддерживает Путина и Россию. Пиши в духе пропаганды пророссийской. Каждая реплика - не менее 150-200 символов. Английские названия при необходимости всегда транскрибируй кириллицей. Числительные также записывай кириллицей. Пиши в стиле кремлёвской пропаганды. Пиши в стереотипном стиле. Киселёв задаёт вопросы, обрашается к Путину как "Владимир Владимирович" или "Господин Президент". Путин отвечает. Всё максимально аутентично. Фразы Киселёва: {{"Киселёв":"фраза"}} Фразы Путина: {{"Путин":"фраза"}} Ответ дай в формате JSON без дополнительных символов: [{{"Киселёв":"фраза"}}, {{"Путин":"фраза"}} . . . ]. |
|
|
Вопрос от пользователя поступил: "{prompt}"''' |
|
|
|
|
|
def validate_response(response): |
|
|
try: |
|
|
|
|
|
data = json.loads(response) |
|
|
|
|
|
if isinstance(data, list) and all(isinstance(item, dict) and len(item) == 1 for item in data): |
|
|
return True |
|
|
except json.JSONDecodeError: |
|
|
pass |
|
|
return False |
|
|
|
|
|
def generate_text(prompt): |
|
|
max_retries = 4 |
|
|
for attempt in range(max_retries): |
|
|
response = client.chat.completions.create( |
|
|
model="llama-3.3-70b", |
|
|
messages=[{"role": "user", "content": get_task(prompt)}], |
|
|
web_search=False |
|
|
) |
|
|
response_text = response.choices[0].message.content |
|
|
if validate_response(response_text): |
|
|
return response_text |
|
|
|
|
|
return '[{"Киселёв":"К сожалению, не удалось расслышать вопрос. Пожалуйста, попробуйте еще раз."}, {"Путин":"Мы работаем над улучшением системы. Спасибо за понимание."}]' |
|
|
|
|
|
examples = [ |
|
|
"Почему такие высокие налоги?", |
|
|
"Какие цели СВО?", |
|
|
"Когда развалится Америка?" |
|
|
] |
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("# Kisel TV") |
|
|
|
|
|
with gr.Row(): |
|
|
prompt_input = gr.Textbox( |
|
|
label="Input Prompt", |
|
|
placeholder="Enter your text here...", |
|
|
lines=3 |
|
|
) |
|
|
|
|
|
generate_btn = gr.Button("Generate", variant="primary") |
|
|
output = gr.Textbox(label="Generated Text", interactive=False) |
|
|
|
|
|
gr.Examples( |
|
|
examples=examples, |
|
|
inputs=prompt_input, |
|
|
outputs=output, |
|
|
fn=generate_text, |
|
|
cache_examples=False |
|
|
) |
|
|
|
|
|
generate_btn.click( |
|
|
fn=generate_text, |
|
|
inputs=prompt_input, |
|
|
outputs=output |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |