in diesem code wird bei upload der aduiofile der text nicht in die 2 schwarzen boxen transkbiert und übersetzt: import streamlit as st import requests import dropbox import os from dotenv import load_dotenv # Lade Umgebungsvariablen aus der .env Datei load_dotenv() # Greife auf die Schlüssel aus den Umgebungsvariablen zu OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') AIRTABLE_API_KEY = os.getenv('AIRTABLE_API_KEY') AIRTABLE_BASE_ID = os.getenv('AIRTABLE_BASE_ID') AIRTABLE_TABLE_NAME = os.getenv('AIRTABLE_TABLE_NAME') DROPBOX_ACCESS_TOKEN = os.getenv('DROPBOX_ACCESS_TOKEN') # Initialize Dropbox client dbx = dropbox.Dropbox(DROPBOX_ACCESS_TOKEN) # Airtable URL airtable_url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}" def upload_to_dropbox(file, dropbox_path): try: dbx.files_upload(file.read(), dropbox_path, mode=dropbox.files.WriteMode.overwrite) shared_link_metadata = dbx.sharing_create_shared_link_with_settings(dropbox_path) return shared_link_metadata.url except Exception as e: st.error(f"Fehler beim Hochladen der Datei zu Dropbox: {e}") return None # Funktion zur Transkription von Audio def transcribe_audio(file): headers = { "Authorization": f"Bearer {OPENAI_API_KEY}", } files = {'file': file, 'model': (None, 'whisper-1')} response = requests.post('https://api.openai.com/v1/audio/transcriptions', headers=headers, files=files) if response.status_code == 200: transcription = response.json().get('text', '') if not transcription: st.error("Keine Transkription erhalten. Bitte überprüfen Sie die Audioqualität und versuchen Sie es erneut.") st.write("Transkription erfolgreich:", transcription) # Debugging-Ausgabe return transcription else: st.error("Fehler bei der Transkription der Audioaufnahme.") st.write("Detailed response:", response.json()) return None # Funktion zur Übersetzung von Text def translate_text(text): headers = { "Authorization": f"Bearer {OPENAI_API_KEY}", "Content-Type": "application/json" } data = { "model": "gpt-4", "messages": [ {"role": "system", "content": "Du bist ein Übersetzer."}, {"role": "user", "content": f'Übersetze den folgenden Text ins Deutsche: "{text}"'} ], "max_tokens": 1000 } response = requests.post('https://api.openai.com/v1/chat/completions', headers=headers, json=data) if response.status_code == 200: translation = response.json().get('choices', [])[0].get('message', {}).get('content', '').strip() st.write("Übersetzung erfolgreich:", translation) # Debugging-Ausgabe return translation else: st.error("Fehler bei der Übersetzung des Textes.") st.write("Detailed response:", response.json()) return None # Funktion zur Analyse des Schadensberichts def analyze_damage_report(images, translation): headers = { "Authorization": f"Bearer {OPENAI_API_KEY}", "Content-Type": "application/json" } image_descriptions = [] for image in images: if image: image_descriptions.append(f"Bildbeschreibung: {image.name}") data = { "model": "gpt-4", "messages": [ {"role": "system", "content": "Du bist ein Schadensanalyst."}, {"role": "user", "content": f'Basierend auf den folgenden Bildern und der Übersetzung, identifiziere ob die Tankstelle kaputt ist und ob sie repariert/gewartet werden muss: {image_descriptions} Übersetzung: "{translation}"'} ], "max_tokens": 1000 } response = requests.post('https://api.openai.com/v1/chat/completions', headers=headers, json=data) if response.status_code == 200: analysis = response.json().get('choices', [])[0].get('message', {}).get('content', '').strip() st.write("Analyse erfolgreich:", analysis) # Debugging-Ausgabe return analysis else: st.error("Fehler bei der Analyse des Schadensberichts.") st.write("Detailed response:", response.json()) return None # Initialize session state if 'transcription_value' not in st.session_state: st.session_state['transcription_value'] = "" if 'translation_value' not in st.session_state: st.session_state['translation_value'] = "" if 'analysis_value' not in st.session_state: st.session_state['analysis_value'] = "" # Funktion zur Verarbeitung der Transkription, Übersetzung und Analyse def handle_transcription_translation_analysis(file, images): transcription = transcribe_audio(file) if transcription: st.session_state['transcription_value'] = transcription translation = translate_text(transcription) if translation: st.session_state['translation_value'] = translation analysis = analyze_damage_report(images, translation) if analysis: st.session_state['analysis_value'] = analysis # Streamlit app st.title("Einreichung Schadensbericht") # Formular zur Eingabe with st.form("survey_form", clear_on_submit=False): datum_einmeldung = st.date_input("Datum der Einmeldung") datum_schaden = st.date_input("Datum des Schadens") eingereicht_von = st.selectbox("Eingereicht von", ["Mitarbeiter:in A", "Mitarbeiter:in B", "Mitarbeiter:in C"]) stelle_schaden = st.text_input("Stelle des Schadens") gefahr_vorhanden = st.selectbox("Gefahr vorhanden?", ["Ja", "Nein"]) bild_upload_1 = st.file_uploader("Bild Upload 1 (Totale)", type=["jpg", "jpeg", "png"]) bild_upload_2 = st.file_uploader("Bild Upload 2 (Details)", type=["jpg", "jpeg", "png"]) bild_upload_3 = st.file_uploader("Bild Upload 3 (weitere Details)", type=["jpg", "jpeg", "png"]) # Audio-Datei hochladen audio_file = st.file_uploader("Audio Datei hochladen (wav, m4a, mp3)", type=["wav", "m4a", "mp3"]) transcribe_button = st.form_submit_button("Transkribieren, Übersetzen und Analysieren") # Textfelder für Transkription, Übersetzung und Analyse transcription_value = st.text_area("Transkription der Spracheingabe", value=st.session_state['transcription_value']) translation_value = st.text_area("Übersetzung Text", value=st.session_state['translation_value']) analysis_value = st.text_area("KI-generierter Schadensbericht", value=st.session_state['analysis_value'], height=300) submit_button = st.form_submit_button(label="Einreichen") # Verarbeite die Transkription, Übersetzung und Analyse if transcribe_button and audio_file: images = [bild_upload_1, bild_upload_2, bild_upload_3] handle_transcription_translation_analysis(audio_file, images) # Update session state with the current values from the text areas st.session_state['transcription_value'] = transcription_value st.session_state['translation_value'] = translation_value st.session_state['analysis_value'] = analysis_value if submit_button: try: # Bereite die Felderdaten vor fields = { "Datum der Einmeldung": datum_einmeldung.strftime('%Y-%m-%d') if datum_einmeldung else None, "Datum des Schadens": datum_schaden.strftime('%Y-%m-%d') if datum_schaden else None, "Eingereicht von": eingereicht_von, "Stelle des Schadens": stelle_schaden if stelle_schaden else "N/A", "Gefahr vorhanden?": gefahr_vorhanden if gefahr_vorhanden else "N/A", "Transkription der Spracheingabe": st.session_state['transcription_value'], "Übersetzung Text": st.session_state['translation_value'], "KI-generierter Schadensbericht": st.session_state['analysis_value'], "Identifizierter Errorcode": "N/A", # Placeholder, you can add logic to identify error codes "Zusätzliche Informationen": "N/A", # Placeholder, you can add logic to gather additional information "Erwähnte Kontakte": "N/A", # Placeholder, you can add logic to gather mentioned contacts "Originalsprache": "Deutsch" # Default language is German } st.write("Felder, die an Airtable gesendet werden:", fields) # Lade Dateien zu Dropbox hoch und erhalte URLs if bild_upload_1: dropbox_path_1 = f"/Wartungsumfrage/{bild_upload_1.name}" url_1 = upload_to_dropbox(bild_upload_1, dropbox_path_1) if url_1: fields["Bild Upload 1 (Totale)"] = [{"url": url_1}] if bild_upload_2: dropbox_path_2 = f"/Wartungsumfrage/{bild_upload_2.name}" url_2 = upload_to_dropbox(bild_upload_2, dropbox_path_2) if url_2: fields["Bild Upload 2 (Details)"] = [{"url": url_2}] if bild_upload_3: dropbox_path_3 = f"/Wartungsumfrage/{bild_upload_3.name}" url_3 = upload_to_dropbox(bild_upload_3, dropbox_path_3) if url_3: fields["Bild Upload 3 (weitere Details)"] = [{"url": url_3}] # Bereite das vollständige Datenpaket für Airtable vor data = { "fields": fields } st.write("Daten, die an Airtable gesendet werden:", data) # Sende die Daten an Airtable headers = { "Authorization": f"Bearer {AIRTABLE_API_KEY}", "Content-Type": "application/json" } response = requests.post(airtable_url, headers=headers, json=data) if response.status_code == 200: st.success("Datensatz erfolgreich zu Airtable hinzugefügt!") else: st.error("Fehler beim Hinzufügen des Datensatzes zu Airtable.") st.write("Detailed response:", response.json()) except Exception as e: st.error("Ein Fehler ist aufgetreten:") st.write(str(e))