boma-page / app.py
Docfile's picture
Update app.py
c770c96 verified
from flask import Flask, render_template, request, jsonify
import os
import google.generativeai as genai
import time
import asyncio
import telegram
app = Flask(__name__)
# Configuration
token = os.environ.get("TOKEN")
if not token:
raise ValueError("La variable d'environnement TOKEN n'est pas définie.")
BOT_TOKEN = "7126991043:AAEzeKswNo6eO7oJA49Hxn_bsbzgzUoJ-6A"
CHAT_ID = "-1002081124539"
bot = telegram.Bot(token=BOT_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-2.0-flash-exp",
generation_config=generation_config,
safety_settings=safety_settings
)
source_languages = ["Francais", "English", "Spanish"]
target_languages = ['nzebi', 'Fang(ntumu)','Fang(complet)','dikota','yipunu(léger)', 'yipunu', 'omyene_nkomi']
lang_files = {
'nzebi': 'Inzèbi.txt',
'gisir': 'Gisir.txt',
'dikota': 'dd.txt',
'yipunu': 'yipunu.pdf',
'yipunu(léger)':'yipunu_free.txt',
'Fang(complet)':'document_modifie.pdf',
'akele': 'Akélé.txt',
'Ghétsogo': 'Ghétsogo.txt',
'Shimo': 'Shimo.txt',
'omyene_nkomi': 'Omyènè_Nkomi.txt',
'isangu': 'Isangu.txt',
'Liwanzi': 'Liwanzi.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. et si tu ne trouve pas l'équivalent d'un mot réécris le tout simplement.
"""
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
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
input_text = request.form['input_text']
source_language = request.form['source_language']
target_language = request.form['target_language']
translated_text = asyncio.run(translate(input_text, source_language, target_language))
return jsonify({'translated_text': translated_text})
return render_template('traduction.html', source_languages=source_languages, target_languages=target_languages)
@app.route('/free', methods=['GET', 'POST'])
def free():
if request.method == 'POST':
french_word = request.form['french_word']
translated_word = request.form['translated_word']
target_language = request.form['target_language']
audio_file = request.files.get('audio_file')
message = f"Nouvelle soumission :\nFrançais : {french_word}\nTraduction ({target_language}) : {translated_word}"
bot.send_message(chat_id=TELEGRAM_GROUP_ID, text=message)
if audio_file:
bot.send_audio(chat_id=TELEGRAM_GROUP_ID, audio=audio_file)
return render_template('free.html', source_languages=source_languages, target_languages=target_languages, message_sent = True)
return render_template('free.html', source_languages=source_languages, target_languages=target_languages)
if __name__ == '__main__':
app.run(debug=True)