import gradio as gr
import os
import json
from google import genai
from google.genai import types
from gradio_client import Client
prompt = """
System-Rolle
Erfahrener Journalist für Pressemitteilungen
Hauptaufgabe
Generiere eine prägnante Pressemitteilung, die eine Veranstaltung oder ein Ereignis ankündigt. Verwende die Informationen in den runden Klammern.
Schema der Pressemitteilung
[Ortschaft - Veranstalter/Veranstaltung/Ereignis Text der Mitteilung]
Überschrift-Formatierung
Erstelle eine zweiteilige Überschrift mit maximal 20 Zeichen pro Zeile
Die erste Zeile muss mindestens 2 Wörter enthalten
Keine Datumsangaben oder Ortsnamen in der Überschrift
Folge den Beispielen der Überschriften
Formatierungs-Anweisungen
Datum: Wochentag + Tag + Monat (z. B. "Montag, 7. April")
Uhrzeiten: "19 Uhr" oder "19.30 Uhr"
Telefonnummern: "Tel. 0971/2347655"
Text: Fortlaufend ohne Absätze
Beachte best practice Formulierungen
Kalender 2025
1. März ist ein Samstag
1. April ist ein Dienstag
1. Mai ist ein Donnerstag
Tagesordnungen
Maximal 2 Punkte nach Relevanz nennen
Höchste Relevanz: Neuwahlen und Ehrungen
Niedrigste Relevanz: Bauanträge
Best Practice Formulierungen
Eine Sitzung abhalten
Eine Versammlung abhalten
Ein Fest oder ein Event veranstalten
[Veranstalter] bietet Vortrag an / Referent hält Vortrag
Gemeinderat trifft sich zur Sitzung
Verein hält Mitgliederversammlung ab
Neuwahl des Vorstandes
Beispiel-Überschriften
Gemeinderat hält
Sitzung ab
Jahresversammlung des
Gartenbauvereins
Bürger melden
sich zu Wort
Passions-Konzert mit
klassischem Touch
Ostereiersuche
mit dem Rhönklub
Fidelia hält
Jahresversammlung ab
Selbsthilfegruppe
tauscht sich aus
Beispiel-Pressemitteilungen
Gartenbauverein hält Generalversammlung ab
Thulba Die diesjährige Generalversammlung des Obst- und Gartenbauvereins Thulba findet am Freitag, 24. Februar, um 19.30 Uhr im Sportheim in Thulba statt. Auf der Tagesordnung stehen die üblichen Regularien.
Bürger melden sich zu Wort
Untererthal Die Bürgerversammlung für Untererthal findet am Donnerstag, 9. März, um 19 Uhr im Landgasthof zum Golden Kreuz statt. Alle Bürgerinnen und Bürger aus dem genannten Ortsteil können teilnehmen.
Mitgliederversammlung mit Neuwahlen
Ramsthal Der SV Ramsthal 1921 veranstaltet seine Mitgliederversammlung am Samstag, 15. März, im Sportheim. Die Versammlung beginnt um 18.30 Uhr. Auf der Tagesordnung stehen unter anderem Ehrungen und Neuwahlen. Anträge sind schriftlich bis spätestens Freitag, 14. März, per E-Mail an info@sv-ramsthal.de zu richten.
Abschließende Erinnerung
Beginne die Mitteilung niemals mit dem Datum!
think step by step!
(
"""
def clean_json_string(json_str):
"""
Removes any comments or prefixes before the actual JSON content.
Returns the cleaned JSON string.
"""
# Find the first occurrence of '{'
json_start = json_str.find('{')
if json_start == -1:
# If no '{' is found, try with '[' for arrays
json_start = json_str.find('[')
if json_start == -1:
return json_str # Return original if no JSON markers found
# Extract everything from the first JSON marker
cleaned_str = json_str[json_start:]
return cleaned_str
# Verify it's valid JSON
try:
json.loads(cleaned_str)
return cleaned_str
except json.JSONDecodeError:
return json_str # Return original if cleaning results in invalid JSON
def groq(input):
client = Client("mgokg/GroqApi")
result = client.predict(
model="llama-3.2-11b-vision-preview",
input_text=f"{prompt}\n {input})",
api_name="/predict"
)
return result, ""
def generate_pressrelease(input_text):
client = Client("Qwen/Qwen2.5-Max-Demo")
result = client.predict(
query=f"{prompt}\n {input_text})",
history=[],
system="You are a helpful assistant.",
api_name="/model_chat"
)
return result
def generate_press_release(input_text):
try:
client = genai.Client(
api_key=os.environ.get("geminiapikey"),
)
except Exception as e:
return f"Error initializing client: {e}. Make sure GEMINI_API_KEY is set."
#model = "gemini-2.5-pro-exp-03-25"
#model = "gemini-2.0-flash-exp"
model = "gemini-2.0-flash-latest"
contents = [
types.Content(
role="user",
parts=[
types.Part.from_text(text=f"{prompt}\n{input_text})"),
],
),
]
generate_content_config = types.GenerateContentConfig(
temperature=0.25,
top_p=0.95,
top_k=64,
max_output_tokens=8192,
response_mime_type="text/plain",
)
response_text = ""
try:
for chunk in client.models.generate_content_stream(
model=model,
contents=contents,
config=generate_content_config,
):
response_text += chunk.text
except Exception as e:
return f"Error during generation: {e}"
data = clean_json_string(response_text)
data = data[:-1]
#data = json.loads(data)
#pressemitteilung = data["pressemitteilung"]
#return data, ""
return response_text, "a"
if __name__ == '__main__':
with gr.Blocks() as demo:
title=gr.Markdown("# Erstellen von Pressemitteilungen")
output_textbox = gr.Markdown()
input_textbox = gr.Textbox(lines=3, label="", placeholder="Enter event details here...")
submit_button = gr.Button("send")
submit_button.click(fn=generate_press_release,inputs=input_textbox,outputs=[output_textbox, input_textbox])
demo.launch()