Upload content_generator.py with huggingface_hub
Browse files- content_generator.py +17 -24
content_generator.py
CHANGED
|
@@ -191,36 +191,29 @@ def generate_single_post(news_context, exclude_posts=None):
|
|
| 191 |
"""
|
| 192 |
tones = [
|
| 193 |
"Провокативний стратег (гарячі тейки, злам стереотипів)",
|
| 194 |
-
"Глибокий аналітик (ро
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
prompt_template = settings.get("PROMPT_SINGLE", "")
|
| 196 |
|
| 197 |
prompt = prompt_template.format(
|
| 198 |
news_context=news_context,
|
| 199 |
exclude_str=exclude_str,
|
| 200 |
tone=tone
|
| 201 |
-
)
|
| 202 |
-
- Заголовки: Пиши заголовки-крючки (hook), що чіпляють увагу, а не нудні заголовки-новини.
|
| 203 |
-
- Посилання: КАТЕГОРИЧНО ЗАБОРОНЕНО вставляти будь-які URL або посилання в полі description. Посилання на джерело має повертатися виключно окремо в ключі source_url.
|
| 204 |
-
- Хештеги: КАТЕГОРИЧНО ЗАБОРОНЕНО використовувати масові теги (#AI, #Crypto, #ШІ, #Технології). Використовуй лише 1-2 вузьких тега максимум (наприклад, #DeFiУкраїна, #LLMбезпека, #ХарківTech). Розташовуй теги строго в самому кінці тексту.
|
| 205 |
-
|
| 206 |
-
2. РОЛЬ: ART DIRECTOR & UI/UX DESIGNER (Візуал)
|
| 207 |
-
- Дизайн фону: Ти створюєш преміальні промпти для генерації зображень (Flux.1). Ти ідеально відчуваєш композицію, тому завжди вимагаєш \"clean negative space\" для читабельності тексту.
|
| 208 |
-
- Копірайт для карток: Заголовок картки — до 4 слів (punchy). Тези — до 8 слів, тільки саме \"м'ясо\".
|
| 209 |
-
|
| 210 |
-
Поверни результат строго у форматі JSON із наступними ключами:
|
| 211 |
-
{{
|
| 212 |
-
\"category\": \"одна з трьох категорій: 'AI', 'Business' або 'Crypto'\",
|
| 213 |
-
\"bg_prompt\": \"англійською мовою детальний промпт для генерації фону (Flux.1). Premium dark aesthetics, volumetric lighting, glowing elements, background only, smooth clean negative space, absolutely no text\",
|
| 214 |
-
\"card_title\": \"короткий заголовок (до 4 слів, без води)\",
|
| 215 |
-
\"card_bullets\": [
|
| 216 |
-
\"теза 1 (чіткий факт до 8 слів)\",
|
| 217 |
-
\"теза 2 (висновок або інсайт до 8 слів)\"
|
| 218 |
-
],
|
| 219 |
-
\"description\": \"Супровідний текст посту (до 400 символів). Жива мова з власною позицією, без шаблонів. Жодних посилань/URL у цьому тексті! Строго 1-2 вузьких тега в самому кінці.\",\n \"source_url\": \"коротке посилання на першоджерело новини (обов\'язково)\"
|
| 220 |
-
}}
|
| 221 |
-
|
| 222 |
-
Повертай ТІЛЬКИ чистий JSON-об'єкт.
|
| 223 |
-
"""
|
| 224 |
|
| 225 |
print("[Content Generator] Генерация одиночного поста (Persona Skills)...")
|
| 226 |
raw_res = generate_text_via_gemini(prompt)
|
|
|
|
| 191 |
"""
|
| 192 |
tones = [
|
| 193 |
"Провокативний стратег (гарячі тейки, злам стереотипів)",
|
| 194 |
+
"Глибокий аналітик (розкладає по поличках складні речі)",
|
| 195 |
+
"Інсайдер-візіонер (розповідає про майбутнє як про доконаний факт)"
|
| 196 |
+
]
|
| 197 |
+
import random
|
| 198 |
+
tone = random.choice(tones)
|
| 199 |
+
|
| 200 |
+
exclude_str = ""
|
| 201 |
+
if exclude_posts:
|
| 202 |
+
exclude_items = []
|
| 203 |
+
for i, post_text in enumerate(exclude_posts):
|
| 204 |
+
post_preview = post_text.replace('\n', ' ').strip()[:150]
|
| 205 |
+
exclude_items.append(f"- {post_preview}...")
|
| 206 |
+
exclude_list_str = "\n".join(exclude_items)
|
| 207 |
+
exclude_str = f"\nКАТЕГОРИЧНО ЗАБОРОНЕНО обирати теми або новини, про які вже було опубліковано останні пости:\n{exclude_list_str}\nБудь ласка, обери повністю іншу новину з контексту, яка не має жодного відношення до вищеперелічених тем та новин!"
|
| 208 |
+
|
| 209 |
+
settings = settings_manager.load_settings()
|
| 210 |
prompt_template = settings.get("PROMPT_SINGLE", "")
|
| 211 |
|
| 212 |
prompt = prompt_template.format(
|
| 213 |
news_context=news_context,
|
| 214 |
exclude_str=exclude_str,
|
| 215 |
tone=tone
|
| 216 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 217 |
|
| 218 |
print("[Content Generator] Генерация одиночного поста (Persona Skills)...")
|
| 219 |
raw_res = generate_text_via_gemini(prompt)
|