Spaces:
Runtime error
Runtime error
import gradio as gr | |
import os | |
import google.generativeai as genai | |
import time | |
# Configuration | |
token = os.environ.get("TOKEN") | |
genai.configure(api_key=token) | |
generation_config = { | |
"temperature": 1, | |
"max_output_tokens": 8192, | |
} | |
safety_settings = [ | |
{ | |
"category": "HARM_CATEGORY_HARASSMENT", | |
"threshold": "BLOCK_NONE" | |
}, | |
{ | |
"category": "HARM_CATEGORY_HATE_SPEECH", | |
"threshold": "BLOCK_NONE" | |
}, | |
{ | |
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", | |
"threshold": "BLOCK_NONE" | |
}, | |
{ | |
"category": "HARM_CATEGORY_DANGEROUS_CONTENT", | |
"threshold": "BLOCK_NONE" | |
}, | |
] | |
model = genai.GenerativeModel( | |
model_name="gemini-1.5-flash-002", | |
generation_config=generation_config, | |
safety_settings=safety_settings | |
) | |
source_languages = ["Francais", "English", "Spanish"] | |
#target_languages = ['nzebi', 'Fang(ntumu)','Fang(complet)', 'gisir', 'dikota', 'yipunu', 'akele', 'Ghétsogo', 'Shimo', 'omyene_nkomi', 'isangu', 'Liwanzi'] | |
target_languages = ['Fang(ntumu)','dikota'] | |
lang_files = { | |
'nzebi': 'Inzèbi.txt', | |
'gisir': 'Gisir.txt', | |
'dikota': 'dikota.txt', | |
'yipunu': 'yipunu.pdf', | |
'Fang(complet)':'document_modifie.pdf', | |
'omyene_nkomi': 'Omyènè_Nkomi.txt', | |
'Fang(ntumu)': 'Fang(ntumu).txt' | |
} | |
def main_fang(query): | |
return "En maintenance" | |
async def translate(input_text, source, target): | |
if target == 'yipunu': | |
try: | |
pdf_path = lang_files[target] | |
d = time.time() | |
if not os.path.exists(pdf_path): | |
return f"Erreur: Le fichier {pdf_path} n'existe pas." | |
sample_file = genai.upload_file(path=pdf_path, display_name="yipunu-reference") | |
s = time.time() | |
print(s-d) | |
prompt = f""" | |
Using the provided Yipunu language reference PDF, translate the following text: | |
Input text: {input_text} | |
Please provide only the translation without any additional explanation. | |
""" | |
print(input_text) | |
content = [sample_file, prompt] | |
response = model.generate_content(content, request_options={"timeout": 600}) | |
genai.delete_file(sample_file.name) | |
print(response.text) | |
return response.text | |
except Exception as e: | |
return f"Erreur lors de la traduction: {str(e)}" | |
elif target == 'Fang(complet)': | |
try: | |
pdf_path = lang_files[target] | |
d = time.time() | |
if not os.path.exists(pdf_path): | |
return f"Erreur: Le fichier {pdf_path} n'existe pas." | |
sample_file = genai.upload_file(path=pdf_path, display_name="yipunu-reference") | |
s = time.time() | |
print(s-d) | |
prompt = f""" | |
Using the provided Fang language reference PDF, translate the following text: | |
Input text: {input_text} | |
Please provide only the translation without any additional explanation. | |
""" | |
print(input_text) | |
content = [sample_file, prompt] | |
response = model.generate_content(content, request_options={"timeout": 600}) | |
genai.delete_file(sample_file.name) | |
print(response.text) | |
return response.text | |
except Exception as e: | |
return f"Erreur lors de la traduction: {str(e)}" | |
else: | |
chemin_fichier = lang_files[target] | |
with open(chemin_fichier, 'r', encoding='utf-8') as fichier: | |
contenu_langue_arrivee = fichier.read() | |
tt = f""" | |
contexte: {contenu_langue_arrivee} | |
Utillisez les éléments de contexte suivants pour répondre à la question à la fin. | |
Si vous ne connaissez pas la réponse, traduisez ce que vous pouvez et reecriver | |
les autre comme ca, n'essayez pas d'inventer une réponse. Je veux que tu agisses | |
comme un traducteur {target}. Je parle en français et tu traduis en {target} en | |
te basant sur le contexte. Je ne veux aucune explication. Juste la réponse. | |
Traduit ca < {input_text} > | |
""" | |
print(input_text) | |
response = model.generate_content(tt) | |
print(response.text) | |
return response.text | |
with gr.Blocks(theme=gr.themes.Default()) as demo: | |
gr.HTML(""" | |
<style> | |
/* Global styles */ | |
body { | |
background-color: #ffffff; | |
margin: 0; | |
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; | |
} | |
/* Header bar */ | |
.header-bar { | |
background-color: #ffd1dc; | |
padding: 1rem; | |
margin-bottom: 2rem; | |
box-shadow: 0 2px 4px rgba(0,0,0,0.05); | |
} | |
h1 { | |
text-align: center; | |
color: #333333; | |
font-size: 2em; | |
font-weight: 600; | |
margin: 0; | |
} | |
/* Container styles */ | |
.gradio-container { | |
max-width: 1200px; | |
margin: 0 auto; | |
padding: 0 1rem; | |
} | |
/* Form elements */ | |
.input-textbox, .output-textbox { | |
border: 1px solid #e0e0e0 !important; | |
border-radius: 4px !important; | |
background-color: white !important; | |
transition: border-color 0.2s ease; | |
} | |
.input-textbox:focus, .output-textbox:focus { | |
border-color: #ffd1dc !important; | |
outline: none !important; | |
} | |
.gr-button { | |
background-color: #ffd1dc !important; | |
border: none !important; | |
color: #333333 !important; | |
padding: 0.75rem 1.5rem !important; | |
border-radius: 4px !important; | |
font-weight: 500 !important; | |
transition: background-color 0.2s ease !important; | |
margin: 1rem auto !important; | |
display: block !important; | |
} | |
.gr-button:hover { | |
background-color: #ffbfcf !important; | |
} | |
.gr-dropdown { | |
border: 1px solid #e0e0e0 !important; | |
border-radius: 4px !important; | |
background-color: white !important; | |
} | |
/* Labels */ | |
label { | |
color: #333333 !important; | |
font-weight: 500 !important; | |
margin-bottom: 0.5rem !important; | |
} | |
/* Spacing */ | |
.block { | |
margin-bottom: 1.5rem; | |
} | |
</style> | |
<div class="header-bar"> | |
<h1>BOMA LANGUE</h1> | |
</div> | |
""") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
source_language_dropdown = gr.Dropdown( | |
choices=source_languages, | |
value="Francais", | |
label="Langue source", | |
allow_custom_value=True, | |
) | |
input_textbox = gr.Textbox( | |
lines=5, | |
placeholder="Entrez le texte à traduire", | |
label="Texte source", | |
) | |
with gr.Column(scale=1): | |
target_language_dropdown = gr.Dropdown( | |
choices=target_languages, | |
value="dikota", | |
label="Langue cible", | |
allow_custom_value=True, | |
) | |
translated_textbox = gr.Textbox( | |
lines=5, | |
placeholder="Traduction", | |
label="Texte traduit", | |
) | |
with gr.Row(): | |
btn = gr.Button("Traduire ⇄") | |
btn.click( | |
translate, | |
inputs=[input_textbox, source_language_dropdown, target_language_dropdown], | |
outputs=translated_textbox | |
) | |
if __name__ == "__main__": | |
demo.launch() |