|
|
|
|
|
import os |
|
|
import requests |
|
|
import gradio as gr |
|
|
|
|
|
|
|
|
HF_TOKEN = os.environ.get("HF_TOKEN") |
|
|
MODEL = "Qwen/Qwen3-Next-80B-A3B-Thinking:together" |
|
|
|
|
|
headers = {"Authorization": f"Bearer {HF_TOKEN}"} |
|
|
|
|
|
def call_model(prompt): |
|
|
url = f"https://api-inference.huggingface.co/models/{MODEL}" |
|
|
payload = { |
|
|
"inputs": prompt, |
|
|
"parameters": { |
|
|
"max_new_tokens": 400, |
|
|
"temperature": 0.9, |
|
|
"top_p": 0.95 |
|
|
} |
|
|
} |
|
|
try: |
|
|
r = requests.post(url, headers=headers, json=payload, timeout=60) |
|
|
r.raise_for_status() |
|
|
data = r.json() |
|
|
except requests.exceptions.RequestException as e: |
|
|
return f"⚠️ Błąd połączenia: {str(e)}" |
|
|
except Exception as e: |
|
|
return f"⚠️ Nieoczekiwany błąd: {str(e)}" |
|
|
|
|
|
if isinstance(data, dict) and data.get("error"): |
|
|
return "⚠️ Błąd modelu: " + data.get("error") |
|
|
if isinstance(data, list) and data and isinstance(data[0], dict): |
|
|
return data[0].get("generated_text", str(data)) |
|
|
if isinstance(data, dict): |
|
|
return data.get("generated_text", str(data)) |
|
|
return str(data) |
|
|
|
|
|
def generate_posts(temat, ton, platforma): |
|
|
prompt = f""" |
|
|
Jesteś ekspertem od pisania angażujących postów na social media w języku polskim. |
|
|
Temat: {temat} |
|
|
Platforma: {platforma} |
|
|
Ton: {ton} |
|
|
Twoje zadanie: |
|
|
Wygeneruj 3 różne warianty posta. Każdy wariant podaj w tym formacie: |
|
|
--- |
|
|
Wariant X: |
|
|
1) Hook: (1 krótkie, chwytliwe zdanie) |
|
|
2) Treść: (dostosowana do platformy – |
|
|
• TikTok/Instagram: max 3 zdania, dynamiczne, z emoji |
|
|
• Facebook: 3–5 zdań, angażujące, lekkie |
|
|
• LinkedIn: 6–8 zdań, profesjonalne, z wartością merytoryczną) |
|
|
3) Hashtagi: (10 propozycji, oddzielone przecinkami, bez polskich znaków) |
|
|
4) CTA: (1 krótka linia zachęcająca do działania) |
|
|
5) Sugestia wizualna: (jedno zdanie, opis pomysłu na zdjęcie/wideo) |
|
|
--- |
|
|
Pisz konkretnie, naturalnym językiem, bez powtarzania instrukcji. |
|
|
""" |
|
|
out = call_model(prompt) |
|
|
return out |
|
|
|
|
|
iface = gr.Interface( |
|
|
fn=generate_posts, |
|
|
inputs=[ |
|
|
gr.Textbox(label="🎯 Temat", placeholder="Wpisz temat..."), |
|
|
gr.Dropdown(["motywacyjny", "informacyjny", "sprzedażowy", "edukacyjny"], label="🎙 Ton", value="motywacyjny"), |
|
|
gr.Dropdown(["TikTok", "Instagram", "Facebook", "LinkedIn"], label="📱 Platforma", value="LinkedIn") |
|
|
], |
|
|
outputs=gr.Textbox(label="✨ Wygenerowane posty", lines=25), |
|
|
title="🤖 Generator Postów AI — po polsku", |
|
|
description="Podaj temat, wybierz ton i platformę. Agent wygeneruje 3 gotowe propozycje.", |
|
|
theme="soft", |
|
|
allow_flagging="never" |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
iface.launch() |