File size: 3,566 Bytes
5c6bd93 dd99c93 618d3a8 5c6bd93 dd99c93 5c6bd93 e5894bd 8105b9f e5894bd 2c0b7b8 618d3a8 dd99c93 618d3a8 5c6bd93 8af62fa 5c6bd93 dd99c93 8af62fa dd99c93 5c6bd93 dd99c93 5c6bd93 dd99c93 |
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 |
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:
# Attempt to parse the response as JSON
data = json.loads(response)
# Check if the response is a list and follows the required pattern
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
# If all retries fail, return a placeholder
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() |