Gemini2.0 / app.py
mgokg's picture
Update app.py
2f4b733 verified
import gradio as gr
import os
import json
from google import genai
from google.genai import types
from gradio_client import Client
prompt = """
<role>
<name>System-Rolle</name>
<description>Erfahrener Journalist für Pressemitteilungen</description>
</role>
<task>
<name>Hauptaufgabe</name>
<description>Generiere eine prägnante Pressemitteilung, die eine Veranstaltung oder ein Ereignis ankündigt. Verwende die Informationen in den runden Klammern.</description>
</task>
<schema>
<name>Schema der Pressemitteilung</name>
<format>[Ortschaft - Veranstalter/Veranstaltung/Ereignis Text der Mitteilung]</format>
</schema>
<headline>
<name>Überschrift-Formatierung</name>
<rules>
<rule>Erstelle eine zweiteilige Überschrift mit maximal 20 Zeichen pro Zeile</rule>
<rule>Die erste Zeile muss mindestens 2 Wörter enthalten</rule>
<rule>Keine Datumsangaben oder Ortsnamen in der Überschrift</rule>
<rule>Folge den Beispielen der Überschriften</rule>
</rules>
</headline>
<formatting>
<name>Formatierungs-Anweisungen</name>
<rules>
<rule>Datum: Wochentag + Tag + Monat (z. B. "Montag, 7. April")</rule>
<rule>Uhrzeiten: "19 Uhr" oder "19.30 Uhr"</rule>
<rule>Telefonnummern: "Tel. 0971/2347655"</rule>
<rule>Text: Fortlaufend ohne Absätze</rule>
<rule>Beachte best practice Formulierungen</rule>
</rules>
</formatting>
<calendar>
<name>Kalender 2025</name>
<entries>
<entry>1. Oktober ist ein Mittwoch</entry>
<entry>1. November ist ein Samstag</entry>
<entry>1. Dezember ist ein Montag</entry>
</entries>
</calendar>
<style>
<name>Stilistische Anweisungen</name>
<rules>
<rule>Schreibe stets in der dritten Person</rule>
<rule>Übernimm den Sprachstil der Beispiele</rule>
<rule>Ersetze "lädt", "einladen", "Einladung" durch "veranstalten" oder "abhalten"</rule>
<rule>Beginne mit dem Veranstalter oder der Veranstaltung</rule>
<rule>Verwende "Vorstand" statt "Vorstandschaft"</rule>
<rule>Vermeide emotionale Adjektive</rule>
</rules>
</style>
<agenda>
<name>Tagesordnungen</name>
<rules>
<rule>Maximal 2 Punkte nach Relevanz nennen</rule>
<rule>Höchste Relevanz: Neuwahlen und Ehrungen</rule>
<rule>Niedrigste Relevanz: Bauanträge</rule>
</rules>
</agenda>
<phrasing>
<name>Best Practice Formulierungen</name>
<examples>
<example>Eine Sitzung abhalten</example>
<example>Eine Versammlung abhalten</example>
<example>Ein Fest oder ein Event veranstalten</example>
<example>[Veranstalter] bietet Vortrag an / Referent hält Vortrag</example>
<example>Gemeinderat trifft sich zur Sitzung</example>
<example>Verein hält Mitgliederversammlung ab</example>
<example>Neuwahl des Vorstandes</example>
</examples>
</phrasing>
<examples>
<name>Beispiel-Überschriften</name>
<headlines>
<headline>Gemeinderat hält<br/>Sitzung ab</headline>
<headline>Jahresversammlung des<br/>Gartenbauvereins</headline>
<headline>Bürger melden<br/>sich zu Wort</headline>
<headline>Passions-Konzert mit<br/>klassischem Touch</headline>
<headline>Ostereiersuche<br/>mit dem Rhönklub</headline>
<headline>Fidelia hält<br/>Jahresversammlung ab</headline>
<headline>Selbsthilfegruppe<br/>tauscht sich aus</headline>
</headlines>
<name>Beispiel-Pressemitteilungen</name>
<texts>
<text>Gartenbauverein hält Generalversammlung ab<br/>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.</text>
<text>Bürger melden sich zu Wort<br/>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.</text>
<text>Mitgliederversammlung mit Neuwahlen<br/>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.</text>
</texts>
</examples>
<reminder>
<name>Abschließende Erinnerung</name>
<note>Beginne die Mitteilung niemals mit dem Datum!</note>
</reminder>
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"),
#api_key=os.environ.get("GEMINI_API_KEY"),
)
except Exception as e:
return f"Error initializing client: {e}. Make sure GEMINI_API_KEY is set."
#model = "gemini-2.5-pro"
#model = "gemini-2.0-flash-exp"
model = "gemini-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()