|
|
from langchain_groq import ChatGroq |
|
|
from langchain_core.prompts import ChatPromptTemplate |
|
|
from langchain_core.output_parsers import StrOutputParser |
|
|
from dotenv import load_dotenv, find_dotenv |
|
|
import os, sys, getpass |
|
|
from groq import Groq |
|
|
import gradio as gr |
|
|
|
|
|
_ = load_dotenv(find_dotenv()) |
|
|
groq_api_key = os.getenv("GROQ_API_KEY") |
|
|
|
|
|
|
|
|
class NLP_tasks_crs: |
|
|
|
|
|
@classmethod |
|
|
def translator(cls, text: str="Hello world!", language: str="French", style: str="polite"): |
|
|
|
|
|
prompt = Prompt_engineering_crs(text, language, style) |
|
|
prompt = prompt.translator_prompt() |
|
|
|
|
|
llm = LLM_crs() |
|
|
llm = llm.chain_llm() |
|
|
result = llm.invoke(prompt) |
|
|
return result |
|
|
|
|
|
@classmethod |
|
|
def summarization(cls, text: str): |
|
|
|
|
|
prompt = Prompt_engineering_crs(text) |
|
|
prompt = prompt.summarization_prompt() |
|
|
|
|
|
llm = LLM_crs() |
|
|
llm = llm.chain_llm() |
|
|
result = llm.invoke(prompt) |
|
|
return result |
|
|
|
|
|
@classmethod |
|
|
def translator_summarization(cls, text: str, language: str, style: str="polite"): |
|
|
|
|
|
prompt = Prompt_engineering_crs(text, language, style) |
|
|
prompt = prompt.translate_summarize_prompt() |
|
|
|
|
|
llm = LLM_crs() |
|
|
llm = llm.chain_llm() |
|
|
result = llm.invoke(prompt) |
|
|
return result |
|
|
|
|
|
@classmethod |
|
|
def question_answer(cls, question: str): |
|
|
|
|
|
prompt = Prompt_engineering_crs() |
|
|
prompt = prompt.question_answer_prompt(question) |
|
|
|
|
|
llm = LLM_crs() |
|
|
llm = llm.chain_llm() |
|
|
result = llm.invoke(prompt) |
|
|
return result |
|
|
|
|
|
|
|
|
class Prompt_engineering_crs: |
|
|
def __init__(self, text: str="Hello world.", language: str="English", style: str="calm and respectful"): |
|
|
self.text= text |
|
|
self.language= language |
|
|
self.style=style |
|
|
|
|
|
def translator_prompt(self): |
|
|
template = """You are the best expert translator of human languagues. Your role is to |
|
|
firstly detect the correct language of the user text, which is delimited by three |
|
|
backticks. Secondly, translate that text into the desired language provided by the user, which is |
|
|
{language}. May sure to use {style} tone as your style. Finally, make sure to sound like a formal native speaker and provide only the final result without |
|
|
additional information. Thanks. |
|
|
text: ```{text}``` """ |
|
|
prompt_template = ChatPromptTemplate.from_template(template) |
|
|
prompt = prompt_template.format_messages(text=self.text, language=self.language, style=self.style) |
|
|
return prompt |
|
|
|
|
|
def summarization_prompt(self): |
|
|
summary = """ You are the best expert summarizer in the world. Your role is to summarize the user text into the detected language. |
|
|
The provided text is below and between three backticks. Make sure to keep the right context. Don't forget to give |
|
|
a title to the result of the summarization. Finally, make sure to sound like a formal native speaker and provide |
|
|
only the final result without additional information or comments. Thanks. |
|
|
text: ```{text}```""" |
|
|
prompt_template = ChatPromptTemplate.from_template(summary) |
|
|
prompt = prompt_template.format_messages(text=self.text) |
|
|
return prompt |
|
|
|
|
|
def translate_summarize_prompt(self, language: str="English"): |
|
|
template =""" You are the best translator and summarizer in the world. Your first role is to translate |
|
|
the below text into {language} language. Indeed, use the below style during the |
|
|
translation. Your second role is to summarize into {language} language, the result of the translation |
|
|
with clear and concise words and expressions. Furthermore, use little imojis during |
|
|
the translation. Finally, make sure to sound like a formal native speaker and provide only the final result without |
|
|
additional information or comments. Thanks. |
|
|
text: {text} |
|
|
language: {language} |
|
|
style: {style} """ |
|
|
prompt_template = ChatPromptTemplate.from_template(template) |
|
|
prompt = prompt_template.format_messages(text=self.text, language=self.language, style=self.style) |
|
|
return prompt |
|
|
|
|
|
@classmethod |
|
|
def question_answer_prompt(cls, question: str): |
|
|
template = "You are a master of questions and answers. Here, your role is to answer to any questions from " \ |
|
|
"from the user. If you do not know any questions, please state that you don't know them. Don't " \ |
|
|
"invent answers for the questions you do not know. If you have many answers for a question, provide the accurate" \ |
|
|
"ones to the user. Use a polite style to communicate with the user. Indeed, speak like a native speaker. See below the question of the user. " \ |
|
|
"question: {question}" |
|
|
prompt_template = ChatPromptTemplate.from_template(template) |
|
|
prompt = prompt_template.format_messages(question = {question}) |
|
|
return prompt |
|
|
|
|
|
|
|
|
class LLM_crs: |
|
|
def __init__(self, model="moonshotai/kimi-k2-instruct-0905"): |
|
|
self.model = model |
|
|
|
|
|
def chain_llm(self): |
|
|
llm = ChatGroq(model = self.model) |
|
|
parser = StrOutputParser() |
|
|
chain_llm = llm | parser |
|
|
return chain_llm |
|
|
|
|
|
|
|
|
|