import os from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma from langchain_google_genai import ChatGoogleGenerativeAI from langchain.prompts import PromptTemplate from langchain.chains import LLMChain class GeminiLLM(): def __init__(self): self.ACCESS_TOKEN = os.getenv('GOOGLE_GEMINI_TOKEN') self.model_name = "gemini-pro" def getEmbeddingsModel(self): self.embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2") return self.embeddings def getRetriver(self, documents ): vectorstore = Chroma.from_documents( documents = documents, embedding = self.embeddings, persist_directory = "chroma_db_dir", # Local mode with in-memory storage only collection_name="sermon_lab_ai" ) retriever = vectorstore.as_retriever( search_kwargs={"k": 3} ) return (retriever, vectorstore) def getLLM(self ): if os.getenv('GOOGLE_GEMINI_TOKEN') is None: raise ValueError("GOOGLE_GEMINI_TOKEN environment variable not set") else: os.environ["GOOGLE_API_KEY"] = os.getenv('GOOGLE_GEMINI_TOKEN') self.llm = ChatGoogleGenerativeAI( model = self.model_name, temperature = 0.7, top_k = 40, top_p = 1 ) return self.llm class SermonGeminiPromptTemplate(): # Example of {BIBLE_VERSICLE} # BIBLE_VERSICLE = Juan 1:1-18 custom_prompt_template_gemini = """ Usted es pastor evangélico que está preparando un sermón para su comunidad sobre {SERMON_TOPIC} Necesito que me ayudes a encontrar los versículos más relevantes de la Biblia que se relacionen con este tema. Por favor, proporcióname una lista de {CANT_VERSICULOS} versículos clave, citando el libro, capítulo y versículo. También incluye una breve frase que resuma el significado de cada versículo en relación con el tema. Asegúrate de que los versículos provengan de diferentes libros de la Biblia para tener una perspectiva amplia. Formatea la salida en una lista con viñetas. Gracias por tu ayuda. Context: {context} Solo devuelve la respuesta útil a continuación y nada más y responde siempre en español Respuesta útil: """ custom_prompt_template_gemini_buildSermonStart = """ Usted es pastor evangélico que está preparando un sermón para su comunidad. Necesito que me ayudes a elaborar un sermón sobre los versículos de la biblia en {BIBLE_VERSICLE} con la estructura: * Introducción: * Cuerpo del Sermón: * Conclusión: Context: {context} """ custom_prompt_template_gemini_buildSermonFronContext = """ Usted es pastor evangélico que está preparando un sermón para su comunidad. {SERMON_IDEA} Context: {context} Ahora ayúdame a desarrollar el sermón siguiente estas mismas ideas """ custom_prompt_template_gemini_buildSermonPrepare = """ Usted es pastor evangélico que está preparando un sermón para su comunidad. {SERMON_CONTEXT} Context: {context} Usando el texto anterior responde a la pregunta: {question} """ custom_prompt_template_gemini_buildSermonQuestion = """ Usted es pastor evangélico que está preparando un sermón para su comunidad. {SERMON_IDEA} Context: {context} Elabora una guía de preguntas que facilite la discusión bíblica en un grupo pequeño de estudio bíblico de adultos a partir del sermón en el texto anterior """ custom_prompt_template_gemini_buildSermonReflections = """ Usted es pastor evangélico que está preparando un sermón para su comunidad. {SERMON_IDEA} Context: {context} Elaborar una serie de 5 reflexiones a partir del sermón en el texto anterior """ sermonPromptMenuGemini = { 'BUILD_INIT': custom_prompt_template_gemini, 'BUILD_EMPTY': custom_prompt_template_gemini_buildSermonStart, 'BUILD_FROM_IDEA': custom_prompt_template_gemini_buildSermonFronContext, 'BUILD_QUESTION': custom_prompt_template_gemini_buildSermonQuestion, 'BUILD_REFLECTIONS': custom_prompt_template_gemini_buildSermonReflections, 'BUILD_PREPARE_QUESTIONS': custom_prompt_template_gemini_buildSermonPrepare } def __init__(self ): self.model_name = 'gemini-pro' def getSermonPromptTemplates(self): return self.sermonPromptMenuGemini def getSermonPromptTemplate(self, sermon_id): if not sermon_id in self.sermonPromptMenuGemini.values(): return None return self.sermonPromptMenuGemini[sermon_id]