File size: 4,812 Bytes
a936419
40ce5ac
085ef0b
40ce5ac
1605c68
eb28548
0a61873
085ef0b
40ce5ac
0963c3d
cd1062c
085ef0b
cb7bc65
 
6ad3993
cb7bc65
ee8bb54
cb7bc65
 
40ce5ac
cb7bc65
 
ee3485c
6111834
cd1062c
0a61873
 
 
 
 
 
cd1062c
 
 
 
 
 
 
 
 
 
 
 
 
ccb48c5
 
cd1062c
 
d139e05
cd1062c
67a4ea7
cd1062c
 
ccb48c5
cd1062c
 
0a90f51
 
cd1062c
0a61873
cd1062c
 
 
0a61873
ee3485c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51f5b3e
ee3485c
 
6578e3e
eb28548
c230eb4
618e915
7405511
 
618e915
 
 
c4d944b
eb7082a
 
c4d944b
2664ac6
 
 
0a61873
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
085ef0b
79b0e5e
85deaff
c4d944b
 
5399f24
75cc043
573de21
40ce5ac
 
085ef0b
 
cd1062c
e5d9b98
085ef0b
0a61873
236847e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0a61873
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import gradio as gr
import requests
import os
import json
import google.generativeai as genai
from bs4 import BeautifulSoup
from groq import Groq
# Load environment variables
genai.configure(api_key=os.environ["geminiapikey"])
read_key = os.environ.get('HF_TOKEN', None)
cx="77f1602c0ff764edb"

custom_css = """
#md {
    height: 400px;  
    font-size: 30px;
    background: #202020;
    padding: 20px;
    color: white;
    border: 1 px solid white;
}
"""

api_key = os.getenv('groq')
google_api_key = os.getenv('google_search')
if api_key is None:
    raise ValueError("groq_whisper environment variable is not set")

# Initialize the Groq client
client = Groq(api_key=api_key)

def perform_search(prompt):
    if prompt.strip() == '':
        return ''  # Return empty string for empty search

    # URL der Google Custom Search API
    url = f"https://www.googleapis.com/customsearch/v1?key={google_api_key}&cx={cx}&q={prompt}"

    try:
        # HTTP GET-Anfrage an die Google Custom Search API
        response = requests.get(url)
        response.raise_for_status()  # Wirft eine Exception, wenn die Anfrage fehlschlägt

        # JSON-Antwort parsen
        data = response.json()
        
        # Extrahiere die Suchergebnisse
        items = data.get('items', [])
        
        results = [item['snippet'] for item in items]
        #return results[0]
        # Kombiniere die Ergebnisse zu einem String
        result_text = '\n'.join(results)
        return result_text
        # Formuliere die Antwort
        search_query = f"{prompt} antworte kurz und knapp. antworte auf deutsch. du findest die antwort hier: {result_text}"
        result = predict(search_query)
        return result
        return search_query

    except requests.exceptions.RequestException as e:
        print(f"An error occurred: {e}")
        return ''

def predict(prompt):
    generation_config = {
      "temperature": 0.4,
      "top_p": 0.95,
      "top_k": 40,
      "max_output_tokens": 8192,
      "response_mime_type": "text/plain",
    }

    model = genai.GenerativeModel(
      model_name="gemini-2.0-flash-exp",
      generation_config=generation_config,
    )

    chat_session = model.start_chat(
      history=[]
    )
      
    response = chat_session.send_message(f"{prompt}\n antworte immer auf deutsch")
    response_value = response.candidates[0].content.parts[0].text
    return response_value
    
#very simple (and extremly fast) websearch  
def websearch(search_term):  
    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={search_term}"
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.content, 'html.parser')
    response_text = soup.find('body')
    prompt = f"{search_term}\n use this result from a google search to answer the question \n {response_text.text}"
    result = predict(prompt)
    return result
    

def process_audio(file_path):
    try:
        # Open the audio file
        with open(file_path, "rb") as file:
            # Create a translation of the audio file
            translation = client.audio.transcriptions.create(
                file=(os.path.basename(file_path), file.read()),  # Correct passing of filename
                model="whisper-large-v3-turbo",  # Required model to use for translation
                prompt="transcribe",  # Optional
                language="de",  # Optional
                response_format="json",  # Optional
                temperature=0.0  # Optional
            )
            # Return the translation text
            suche = websearch(translation.text)
            result = predict(suche)
            return result
            return translation.text
    except Exception as e:
        return f"An error occurred: {str(e)}"


# Create the Gradio interface
with gr.Blocks(css=custom_css) as demo:
    with gr.Row():
        details_output = gr.Markdown(label="answer", elem_id="md")        
        #details_output = gr.Textbox(label="Ausgabe", value = f"\n\n\n\n")  
    with gr.Row():
        ort_input = gr.Textbox(label="prompt", placeholder="ask anything...")
        #audio_input=gr.Microphone(type="filepath")
    with gr.Row():         
        button = gr.Button("Senden")    

    # Connect the button to the function
    button.click(fn=perform_search, inputs=ort_input, outputs=details_output)   

# Launch the Gradio application
demo.launch()




"""
with gr.Blocks() as speech:  
    with gr.Row():
        sr_outputs = gr.Textbox(label="Antwort")
    with gr.Row():
        sr_inputs = gr.Microphone(type="filepath") 
    sr_inputs.change(process_audio, inputs=sr_inputs, outputs=sr_outputs)

speech.launch()





"""