Traducteurboma / app.py
Docfile's picture
Update app.py
53e20bd verified
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()