Taurangela's picture
Add files from GitHub repository
5ffdc5b
import os
from dotenv import load_dotenv
from langchain_groq import ChatGroq
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import gradio as gr
load_dotenv()
class TranslatorApp:
def __init__(self, groq_api_key, google_api_key, openai_api_key):
self.groq_chain = None
self.google_chain = None
self.openai_chain = None
try:
self.groq_chatbot = self._initialize_chatbot(groq_api_key, "llama3-70b-8192", ChatGroq)
self.groq_chain = self._create_translation_chain(self.groq_chatbot)
except Exception as e:
print(f"Initialization Error for Groq: {e}")
try:
self.google_chatbot = self._initialize_chatbot(google_api_key, "gemini-1.5-pro", ChatGoogleGenerativeAI)
self.google_chain = self._create_translation_chain(self.google_chatbot)
except Exception as e:
print(f"Initialization Error for Google: {e}")
try:
self.openai_chatbot = self._initialize_chatbot(openai_api_key, "gpt-4o", ChatOpenAI)
self.openai_chain = self._create_translation_chain(self.openai_chatbot)
except Exception as e:
print(f"Initialization Error for OpenAI: {e}")
def _initialize_chatbot(self, api_key, model_name, chatbot_class):
if not api_key:
raise ValueError(f"API key for {chatbot_class.__name__} is missing.")
init_params = {
"api_key": api_key,
"temperature": 0,
"max_tokens": None,
"timeout": None,
"max_retries": 2,
}
# Adjust the parameter name based on the chatbot class
if chatbot_class == ChatGoogleGenerativeAI:
init_params["model"] = model_name
else:
init_params["model_name"] = model_name
try:
return chatbot_class(**init_params)
except TypeError as e:
raise TypeError(f"Error initializing {chatbot_class.__name__}: {e}")
def _create_translation_chain(self, chatbot):
try:
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are a helpful assistant that translates {input_language} to {output_language}."),
("human", "{input}")
]
)
return prompt | chatbot | StrOutputParser()
except Exception as e:
print(f"Error creating translation chain: {e}")
raise
def _translate(self, chain, input_language, output_language, input_text):
try:
if chain is None:
return "Translation chain not available."
return chain.invoke({
"input_language": input_language,
"output_language": output_language,
"input": input_text,
})
except Exception as e:
return f"Error: {e}"
def perform_translations(self, model_name, input_language, output_language, input_text):
chain_map = {
"Groq": self.groq_chain,
"Google": self.google_chain,
"OpenAI": self.openai_chain,
}
selected_chain = chain_map.get(model_name)
if selected_chain:
return self._translate(selected_chain, input_language, output_language, input_text)
return "Invalid model selected."
class GradioInterface:
def __init__(self, translator_app):
self.translator = translator_app
self._create_interface()
def _create_interface(self):
def translate_text(model_name, input_text, input_language, output_language):
return self.translator.perform_translations(model_name, input_language, output_language, input_text)
self.interface = gr.Interface(
fn=translate_text,
inputs=[
gr.Dropdown(
choices=["Groq", "Google", "OpenAI"],
label="Choose Translation Model",
value="Groq"
),
gr.Textbox(label="Input Text"),
gr.Textbox(label="Input Language", value="English"),
gr.Textbox(label="Output Language", value="German"),
],
outputs=[
gr.Textbox(label="Translation"),
],
title="Multilingual Translator",
description="Translate text between different languages using your chosen chatbot model."
)
def launch(self):
self.interface.launch(share=True) # Set share=True to create a public link
# Main execution
if __name__ == "__main__":
try:
groq_api_key = os.getenv("GROQ_API_KEY")
google_api_key = os.getenv("GOOGLE_API_KEY")
openai_api_key = os.getenv("OPENAI_API_KEY")
if not all([groq_api_key, google_api_key, openai_api_key]):
raise ValueError("One or more API keys are missing.")
translator = TranslatorApp(groq_api_key, google_api_key, openai_api_key)
gradio_app = GradioInterface(translator)
gradio_app.launch()
except Exception as e:
print(f"Error: {e}")