google_search / app.py
mgokg's picture
Update app.py
4adece3 verified
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 = [
"Angelsportverein Breitengüßbach",
"Arbeiterwohlfahrt Kreisverband Bamberg Stadt und Land",
"Dorfkrippenverein Breitengüßbach",
"Eisenbahnerkameradschaft Breitengüßbach",
"Elferrat Breitengüßbach",
"Faschingsvereinigung Unteroberndorf e. V.",
"Freiwillige Feuerwehr Breitengüßbach",
"Freiwillige Feuerwehr Hohengüßbach",
"Freiwillige Feuerwehr Unteroberndorf",
"Freiwillige Feuerwehr Zückshut",
"Gesangverein Cäcilia Breitengüßbach",
"GÜßBACH BeREIT",
"Musikverein Breitengüßbach e. V.",
"Nordostbayerischer Segelclub e. V.",
"Obst- und Gartenbauverein Breitengüßbach",
"Pfeil und Bogen Club Breitengüßbach",
"Rentner- und Pensionistengemeinschaft Breitengüßbach",
"Reservisten Kameradschaft Breitengüßbach",
"Schützengesellschaft Breitengüßbach 1965 e.V.",
"SC Unteroberndorf",
"SOZIALVERBAND Ortsverband Breitengüßbach",
"Tennisclub Breitengüßbach",
"Turn- und Sportverein Breitengüßbach e. V.",
"Verein für Gartenbau und Landschaftspflege",
"1. FCN-Club \"Steigerwald\" Burgebrach",
"Aktiv-Club 60+",
"Altenclub Ampferbach",
"Bläserjugend der Ebrachtaler Musikanten",
"Böllergruppe \"Burg Windeck\"",
"Böllergruppe „BURG WINDECK“",
"BSB Bogensport-Burgebrach e. V.",
"Burgebracher Tafel",
"CSU ORTSVERBAND BURGEBRACH",
"Dartclub Bird Eyes",
"DC Flying Angels",
"Deutsche Lebens-Rettungs-Gesellschaft (DLRG) e.V. Ortsverband Burgebrach",
"Deutscher Amateur Radio Club e.V. (DARC) Ortsverband Ebrachtal",
"Die Mattenklopfer e.V.",
"DJK Stappenbach",
"Dreschgemeinschaft Treppendorf e.V.",
"Ebrachtaler Heimatklänge Ampferbach e.V.",
"FC Bayern München e.V. Fanclub",
"FFW Ampferbach",
"FFW Burgebrach",
"FFW Grasmannsdorf",
"FFW Hirschbrunn/Tempelsgreuth/Küstersgreuth",
"FFW Mönchherrnsdorf",
"FFW Mönchsambach/Dippach/Wolfsbach",
"FFW Ober-/Unterharnsbach",
"FFW Oberköst",
"FFW Stappenbach",
"FFW Treppendorf",
"FFW Unterneuses",
"FFW Vollmannsdorf",
"Frauen-Union",
"Frauenvokalgruppe Frequenzia",
"FREIE WÄHLER - ÜCW Burgebrach",
"Gesangverein im Steigerwald e.V.",
"Heimat- u. Verschönerungsverein Burgebrach",
"Imkerverein Burgebrach u. Umgeb.",
"JFG STEIGERWALD",
"Jugendgemeinschaft Wolfsbach",
"Junge Union Burgebrach",
"KAB Burgebrach",
"Kapellenverein Wolfsbach e.V.",
"Kath. Jugend Ampferbach",
"Kath. Jugend Burgebrach",
"Kath. Jugend Stappenbach",
"Kath. Landvolkbewegung",
"Katholischer Kapellenverein Unterharnsbach",
"Kerwasburschen und Madla Burgebrach",
"Kerwasburschen und Madla Stammbach",
"Kerwasburschen- und madla Ampferbach",
"Kirchenchor Laudamus Burgebrach",
"Krieger- u. Kameradschaftsverein Oberköst-Hirschbrunn",
"Löwen-Fanclub Ebrachgrund",
"MHC Mönchsambach Hardcore e.V.",
"Milchhäusla e.V.",
"Modellbauclub Bamberg",
"Mönchherrnsdorfer Blasmusik e.V.",
"MSV Steigerwald e. V. Burgebrach",
"Musikverein Ebrachtaler Musikanten Burgebrach",
"Netzfunke",
"NSU Club Burgebrach",
"Obst- u. Gartenbauverein Ampferbach",
"Obst- u. Gartenbauverein Burgebrach",
"Obst- u. Gartenbauverein Mönchherrnsdorf",
"Oldtimer-Freunde Mönchherrnsdorf",
"Ortsbäuerin Burgebrach",
"Ortskulturring Burgebrach",
"RAG Schießsport Oberfr./-West Steigerwald",
"RK Steigerwald",
"Rot-Kreuz-Bereitschaft",
"Schützenverein Tell Windeck Ampferbach",
"Seniorenclub Donnerstags-Treff",
"Singkreis Unterneuses",
"Soldaten, Reservisten und Kameradschaftsverein Unterneuses",
"Soldaten- u. Kameradschaftsverein Ampferbach",
"Soldaten- u. Kameradschaftsverein Burgebrach",
"Soldaten- u. Kameradschaftsverein Dürrhof und Umgebung",
"Soldaten- u. Kameradschaftsverein Grasmannsdorf",
"Soldaten- u. Kameradschaftsverein Stappenbach - Unterharnsbach",
"Sportverein Oberköst",
"Stammtisch Eiserne Zocker Hirschbrunn",
"Stammtisch Rüfftels Mönchsamb.",
"Stammtisch Suff Lui´s Burgebrach",
"Stammtisch Weiherbuam Grasmannsdorf",
"Stammtisch Wilde Tupfer Oberköst",
"SV DJK Ampferbach e.V. 1961",
"SV Eintracht Ober-/Unterharnsbach 1971 e. V.",
"Tennisverein Burgebrach e. V.",
"Theatergruppe Ampferbach",
"Theatergruppe Burgebrach",
"Treffpunkt für Frauen",
"TSV Windeck 1861 e. V. Burgebrach",
"Ultraleicht-Flugsportgruppe e.V.",
"VdK Ortsverband Burgebrach und Umgebung",
"VdK Ortsverband Mönchsambach",
"Verein f. Gartenbau und Landespflege Stappenbach",
"Vogelschutz- u. Verschönerungsverein Oberköst",
"Werbegemeinschaft Burgebrach",
"Westernreiter Steigerwald e.V.",
"Zimmerstutzen-Schützengesellschaft Burgebrach"
]
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()