from llm.context import LLMContext from llm.config import LLMConfig from extraccion.schemas_entidades import ( Acciones, Expectativa, Opinion, Temas, Estrategias, Factores, Entidades, Competencias, Herramientas, Mecanismos, Opiniones, Expectativas, ) import yaml import os # Cargar la configración de prompts desde el archivo .yaml def load_prompts_config(file_path): with open(file_path, "r") as file: prompts_config = yaml.safe_load(file) return prompts_config path_prompts = "extraccion/prompts.yaml" prompts_config = load_prompts_config(path_prompts) context = LLMContext() def extractor_pre_1(respuesta: str) -> Acciones: prompt = prompts_config["prompts"]["pregunta_1"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Acciones) acciones = llm_so.invoke(prompt) lista_acciones = acciones.acciones for accion in lista_acciones: print("-" * 100) print(accion.accion) print("-" * 100) return acciones def extractor_pre_2(respuesta: str) -> Acciones: prompt = prompts_config["prompts"]["pregunta_2"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Acciones) acciones = llm_so.invoke(prompt) lista_acciones = acciones.acciones for accion in lista_acciones: print("-" * 100) print(accion.accion) print("-" * 100) return acciones # El caso de este agente debe analizar se bien posteriormente para afinar bien el schema de datos def extractor_pre_3(respuesta: str) -> Temas: prompt = prompts_config["prompts"]["pregunta_3"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Temas) temas = llm_so.invoke(prompt) lista_temas = temas.temas for tema in lista_temas: print("-" * 100) print(tema.tema) print("-" * 100) return temas def extractor_pre_4(respuesta: str) -> Temas: prompt = prompts_config["prompts"]["pregunta_4"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Temas) temas = llm_so.invoke(prompt) lista_temas = temas.temas for tema in lista_temas: print("-" * 100) print(tema.tema) print("-" * 100) return temas def extractor_pre_5(respuesta: str) -> Estrategias: prompt = prompts_config["prompts"]["pregunta_5"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Estrategias) estrategias = llm_so.invoke(prompt) lista_estrategias = estrategias.estrategias for estrategia in lista_estrategias: print("-" * 100) print(estrategia.estrategia) print("-" * 100) return estrategias def extractor_pre_6(respuesta: str) -> Mecanismos: prompt = prompts_config["prompts"]["pregunta_6"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Mecanismos) mecanismos = llm_so.invoke(prompt) lista_mecanismos = mecanismos.mecanismos for mecanismo in lista_mecanismos: print("-" * 100) print(mecanismo.mecanismo) print("-" * 100) return mecanismos def extractor_pre_7(respuesta: str) -> Estrategias: prompt = prompts_config["prompts"]["pregunta_7"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Estrategias) estrategias = llm_so.invoke(prompt) lista_estrategias = estrategias.estrategias for estrategia in lista_estrategias: print("-" * 100) print(estrategia.estrategia) print("-" * 100) return estrategias def extractor_pre_8(respuesta: str) -> Factores: prompt = prompts_config["prompts"]["pregunta_8"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-sonnet-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Factores) factores = llm_so.invoke(prompt) lista_factores = factores.factores for factor in lista_factores: print("-" * 100) print(factor.factor) print("-" * 100) return factores def extractor_pre_9(respuesta: str) -> Entidades: prompt = prompts_config["prompts"]["pregunta_9"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Entidades) entidades = llm_so.invoke(prompt) lista_entidades = entidades.entidades for entidad in lista_entidades: print("-" * 100) print(entidad.entidad) print("-" * 100) return entidades def extractor_pre_10(respuesta: str) -> Competencias: prompt = prompts_config["prompts"]["pregunta_10"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Competencias) competencias: Competencias = llm_so.invoke(prompt) print("\n Competencias extraídas:") print(f"Básicas: {competencias.basicas}") print(f"Socioemocionales: {competencias.socioemocionales}") print(f"Ciudadanas: {competencias.ciudadanas}") print(f"Siglo XXI: {competencias.siglo_xxi}") return competencias def extractor_pre_11(respuesta: str) -> Herramientas: prompt = prompts_config["prompts"]["pregunta_11"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Herramientas) herramientas = llm_so.invoke(prompt) lista_herramientas = herramientas.herramientas for herramienta in lista_herramientas: print("-" * 100) print(herramienta.herramienta) print("-" * 100) return herramientas def extractor_pre_12(respuesta: str) -> Opiniones: prompt = prompts_config["prompts"]["pregunta_12"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Opiniones) opiniones = llm_so.invoke(prompt) lista_opiniones = opiniones.opiniones for opinion in lista_opiniones: print("-" * 100) print(opinion.opinion) print("-" * 100) return opiniones def extractor_pre_13(respuesta: str) -> Expectativas: prompt = prompts_config["prompts"]["pregunta_13"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Expectativas) expectativas = llm_so.invoke(prompt) lista_expectativas = expectativas.expectativas for expectativa in lista_expectativas: print("-" * 100) print(expectativa.expectativa) print("-" * 100) return expectativas def extractor_pre_14(respuesta: str) -> Opiniones: prompt = prompts_config["prompts"]["pregunta_14"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Opiniones) opiniones = llm_so.invoke(prompt) lista_opiniones = opiniones.opiniones for opinion in lista_opiniones: print("-" * 100) print(opinion.opinion) print("-" * 100) return opiniones def extractor_pre_15(respuesta: str) -> Opiniones: prompt = prompts_config["prompts"]["pregunta_14"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Opiniones) opiniones = llm_so.invoke(prompt) lista_opiniones = opiniones.opiniones for opinion in lista_opiniones: print("-" * 100) print(opinion.opinion) print("-" * 100) return opiniones respuesta = """ A la fecha no conocemos si se ha realizado o no, ya que no hemos tenido conocimiento si el rector las conoce o está gestionando. Desde el núcleo de ciencias naturales en el año 2022 se realizó una alianza con cornare y la UMATA, dicha invitación a participar se hizo por la página de la secretaria departamental, donde a partir de un infograma explicaba paso a paso como participar y además contaba con linea telefónica. """ # extractor_pre_15(respuesta)