google_search / app.py
mgokg's picture
Update app.py
fb8edb4 verified
raw
history blame
11.9 kB
import gradio as gr
import requests
from bs4 import BeautifulSoup
from gradio_client import Client
from urllib.parse import urljoin
import pandas as pd
from io import StringIO
import json
import groq
import os
google_api_key = os.getenv('google_search')
API_URL = "https://blavken-flowiseblav.hf.space/api/v1/prediction/fbc118dc-ec00-4b59-acff-600648958be3"
api_key = os.getenv('groq')
client = groq.Client(api_key=api_key)
custom_css = """
#md {
height: 200px;
font-size: 30px;
background: #121212;
padding: 20px;
color: white;
border: 1 px solid white;
font-size:10px;
}
"""
def perplexica_search(payloads):
client = Client("mgokg/PerplexicaApi")
result = client.predict(
prompt=f"{payloads}",
optimization_mode="balanced",
api_name="/question"
)
return result
def query(payload):
response = requests.post(API_URL, json=payload)
return response.json()
def google_search(payloads):
output = query({
"question": f"{payloads}",
})
#search_query = f"{payloads} antworte kurz und knapp. antworte auf deutsch. du findest die antwort hier:\n {output}"
texte=""
for o in output:
texte +=o
return output
scheme = """
{"name":"","email":"","website":""}
"""
def llama(messages):
client = Client("mgokg/selenium-screenshot-gradio")
result = client.predict(
message=f"{messages}",
api_name="/predict"
)
return result
client = Client("AiActivity/AI-Assistant")
result = client.predict(
message={"text":f"instruction: return a valid json object only, no comments or explanaition, fill in the missing information. use this json scheme.\n {scheme}\n leave blank if information is not verfügbar. here is the information for the values:\n{message}","files":[]},
api_name="/chat"
)
print(result)
def llm(message):
message = f'return a json object with the keys: name,email,phone,website \n the values can be found here, leave blank if value is not available:\n {message} \n return a json object only. no text, no explanaition'
try:
completion = client.chat.completions.create(
model="llama3-70b-8192",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": f"{message}"}
],
)
return completion.choices[0].message.content
except Exception as e:
return f"Error in response generation: {str(e)}"
def qwen(jsondata):
client = Client("Qwen/Qwen2.5-72B-Instruct")
result = client.predict(
query= f'return a json object with the keys: name,email,phone,website for each verein \n the values can be found here, leave blank if value is not available:\n {jsondata} \n return a json object only. no text, no explanaition',
history=[],
system="You are Qwen, created by Alibaba Cloud. You are a helpful assistant.",
api_name="/model_chat"
)
return result
def list_of_clubs(ort):
base_url = "https://vereine-in-deutschland.net"
all_links_text = []
initial_url = f"{base_url}/vereine/Bayern/{ort}"
try:
response = requests.get(initial_url)
response.raise_for_status()
soup = BeautifulSoup(response.content, 'html.parser')
# Determine the last page
link_element = soup.select_one('li.page-item:nth-child(8) > a:nth-child(1)')
last_page = 10
if link_element and 'href' in link_element.attrs:
href = link_element['href']
last_page = int(href.split('/')[-1])
# Loop through all pages and collect links
for page_number in range(1, last_page + 1):
page_url = f"{base_url}/vereine/Bayern/{ort}/p/{page_number}"
response = requests.get(page_url)
response.raise_for_status()
soup = BeautifulSoup(response.content, 'html.parser')
target_div = soup.select_one('div.row-cols-1:nth-child(4)')
if target_div:
texts = [a.text for a in target_div.find_all('a', href=True)]
all_links_text.extend(texts)
else:
print(f"Target div not found on page {page_number}")
except Exception as e:
return str(e), []
all_links_text = all_links_text[0::2]
return all_links_text
def process_ort(ort):
#links_text = list_of_clubs(ort)
#return links_text
linkstext = [
"ASV Ebensfeld",
"Blumen- und Gartenfreunde Döringstadt",
"Draisdorfer Gartenfreunde",
"Ebensfelder Karnevals Gesellschaft",
"Ebensfelder Pfützenhüpfer",
"Freiwillige Feuerwehr Döringstadt",
"Freiwillige Feuerwehr Ebensfeld e. V.",
"Freiwillige Feuerwehr Eggenbach e. V.",
"Freiwillige Feuerwehr Messenfeld-Neudorf",
"Freiwillige Feuerwehr Pferdsfeld",
"Fliegender Frauenstammtisch",
"Freie Wähler Ebensfeld",
"Freie Wähler Kellbachgrund",
"Garten- und Blumenfreunde Unterneuses",
"Gartenbauverein Oberbrunn",
"Gartenfreunde Birkach",
"Gesangverein Liederkranz 1874 Ebensfeld",
"Junglandverein Kleukheim e. V.",
"Kivuko e. V.",
"Kutzenberger Vereine für psychosoziale Hilfe e. V.",
"MainTheater e. V.",
"Musikvereinigung Ebensfeld e. V.",
"Neusicher Raubtiere",
"Obst- und Gartenbauverein Eggenbach und Umgebung",
"Oldtimerfreunde Pferdsfeld und Umgebung",
"Ortskulturring Prächting-Dittersbrunn e. V.",
"Reservistenkameradschaft Ebensfeld",
"Schleiereulen Unterbrunn",
"Seniorengemeinschaft Landkreis Lichtenfels e. V.",
"SPD Ebensfeld",
"Sport Club Dö-City e.V",
"Scharfschützengesellschaft Bad Staffelstein/ Ebensfeld e.V.",
"TSV Ebensfeld",
"TSV Kelbachgrund Kleukheim",
"Verein für Garten- und Landschaftspflege Ebensfeld",
"Wasserwacht Ebensfeld",
"Wilden Früchtla",
"BB-Freie Wähler Marktgraitz",
"CSU Marktgraitz",
"DLRG Stpkt. Marktgraitz OV Burgkunstadt e.V.",
"1. FC Marktgraitz 1911 e. V.",
"Film- und Fotoclub",
"Freiwillige Feuerwehr Marktgraitz e.V.",
"Geflügelzuchtverein Marktgraitz",
"Gemütlichkeitsverein Marktgraitz",
"Gesangsverein Marktgraitz",
"Jagdgenossenschaft Marktgraitz",
"Kath. Frauenbund",
"Musikverein Blaskapelle Marktgraitz",
"Obst- und Gartenbauverein Marktgraitz",
"Soldatenkameradschaft u. Schießgruppe 1876 Marktgraitz",
"SPD Marktgraitz",
"Turnverein Marktgraitz 1862 e.V.",
"VdK-Ortsverband Marktgraitz",
"CSU Ortsverband Marktzeuln",
"Dorfgemeinschaft Zettlitz",
"FC Horb am Main 1924 e. V.",
"Freiwillige Feuerwehr Horb am Main",
"Freiwillige Feuerwehr Marktzeuln",
"Freunde des historischen Marktzeuln e. V.",
"Geflügelzuchtverein 1927 Marktzeuln e. V.",
"Jagdgenossenschaft Marktzeuln",
"Musikverein Marktzeuln 1969 e. V.",
"Pfeifenclub Marktzeuln",
"Reit- und Fahrverein Marktzeuln e. V.",
"Schützengesellschaft von 1820 e. V. Marktzeuln",
"SPD-Ortsverein Marktzeuln",
"Sportfischer Hochstadt-Marktzeuln 1979 e. V.",
"TSV 1861 Marktzeuln e. V.",
"Unabhängige Bürger Marktzeuln e. V.",
"VdK Ortsverband Marktzeuln",
"1. FC Altenkunstadt",
"1. FC Altenkunstadt - Altliga",
"1. FC Altenkunstadt/1. FC Woffendorf",
"1. FC Baiersdorf",
"1. FC Woffendorf",
"1. FC Woffendorf - Altliga",
"Bayern-Fan-Club Burkheim",
"Bayern Fanclub Nepomuk",
"BMW-Club-Obermain",
"Bonsai Freunde Altenkunstadt und Umgebung eV",
"Bürgerverein Spiesberg",
"Colloquium Historicum Wirsbergense",
"CSU-Ortsverband AltenkunstadtCSU-Ortsverband Altenkunstadt",
"Deutsch-Französische Gesellschaft Obermain",
"Dorfgemeinschaftsverein Zeublitz",
"DPSG Stamm St. Kilian",
"Evang. Frauenhilfe Altenkunstadt",
"Evang. Kirchenchor Altenkunstadt",
"FC Bayern Fanclub \"Baiersdorf/Ofr.\"",
"FCN-Fanclub Altenkunstadt",
"FCN-Fanclub \"Kunstadt\"",
"FFW Altenkunstadt e. V.",
"FFW Baiersdorf",
"FFW Burkheim",
"FFW Maineck",
"FFW Pfaffendorf",
"FFW Prügel",
"FFW Spiesberg",
"FFW Strössendorf e. V.",
"FFW Woffendorf",
"FFW Zeublitz",
"Filialkirchenstiftung Pfaffendorf",
"Frauenunion Ortsverband Altenkunstadt",
"Freie Bürger der Ortsteile",
"Freie Wählergemeinschaft",
"Garten- und Naturfreunde Prügel",
"Gartenbauverein Burkheim",
"Gartenbauverein Zeublitz",
"Gartenhobbyverein Altenkunstadt",
"Geflügelzuchtverein Altenkunstadt",
"Gesangverein Lyra Altenkunstadt",
"Gesangverein Maineck",
"HG Kunstadt",
"Haus- und Grundbesitzerverein Altenkunstadt",
"IG Ortskapelle Woffendorf",
"Jacky Jones Whiskey Bomber",
"JU Altenkunstadt",
"Junge Bürger e.V.",
"Junge Wähler Union",
"Kapellenbauverein Baiersdorf",
"Kapellenbauverein Burkheim",
"Kapellenbauverein Zeublitz",
"Kath. Casino Altenkunstadt",
"Kath. Frauenkreis Altenkunstadt",
"Kath. Kirchenchor Altenkunstadt",
"Kulturverein Altenkunstadt e. V.",
"Lucky Darts e.V.",
"Malteser Hilfsdienst",
"Markgrafenclub Strössendorf",
"Modellfluggruppe PHOENIX e. V.",
"Musikverein Altenkunstadt",
"Obst- und Gartenbauverein Baiersdorf",
"Obst- und Gartenbauverein Pfaffendorf",
"Obst- und Gartenbauverein Spiesberg",
"Obst- und Gartenbauverein Strössendorf",
"Obst- und Gartenbauverein Woffendorf",
"Pfadfinderfreunde St. Kilian",
"Posaunenchor Strössendorf",
"RV Concordia Altenkunstadt",
"RV Viktoria Maineck",
"Seniorenclub 72 Altenkunstadt",
"Singgemeinschaft Altenkunstadt",
"Ski- und Wanderfreunde Kordigast",
"SPD-Frauengruppe",
"SPD-Ortsverein",
"Sportfischer Wilde Knaben Strössendorf",
"Tribblmörsi Strössendorf",
"Trimm-Dich-Club Woffendorf",
"TTC Strö-Main e. V.",
"TTV 45 Altenkunstadt 1997",
"TV Altenkunstadt",
"TV Strössendorf",
"VdK Ortsverband Altenkunstadt",
"VdK Ortsverband Burkheim",
"Verein Kommunale Zusammenarbeit am Obermain e.V.",
"Wasserwacht Altenkunstadt",
"Zimmerstutzen-Schützengesellschaft"
]
vereine = []
for verein in linkstext:
prompt=f"{verein}",
result = llama(prompt)
vereine.append(result)
print(result)
#data = json.loads(vereine)
#df = pd.DataFrame(vereine)
return vereine
for verein in links_text:
client = Client("mgokg/gemini-2.0-flash-exp")
result = client.predict(
prompt=f"impressum {verein}",
api_name="/perform_search"
)
#json_object = llm(result)
"""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
url = f"https://www.google.com/search?q=impressum {verein}"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
impressum_div = soup.find('body')
contact_detailes = impressum_div.text
json_object = llm(contact_detailes)
"""
vereine.append(result)
#dicts = [json.loads(item) for item in vereine]
#df = pd.DataFrame(dicts)
#return df
return vereine
# Create the Gradio interface
with gr.Blocks(css=custom_css) as demo:
with gr.Row():
#details_output = gr.DataFrame(label="Ausgabe", elem_id="md")
details_output = gr.Textbox(label="Ausgabe")
with gr.Row():
ort_input = gr.Textbox(label="Ort eingeben", placeholder="ask anything...")
with gr.Row():
button = gr.Button("Senden")
# Connect the button to the function
button.click(fn=process_ort, inputs=ort_input, outputs=details_output)
# Launch the Gradio application
demo.launch()