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()