Coverage for vorlagellm/chains.py: 82.14%
28 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-10-24 03:22 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-10-24 03:22 +0000
1from langchain.schema.output_parser import StrOutputParser
2import re
5from .prompts import build_prompt, build_source_prompt, build_corresponding_text_prompt
8def parse_result(output:str) -> tuple[str,str]:
9 components = re.split(r'---+', output)
10 if len(components) < 2:
11 readings = output
12 justification = output
13 else:
14 readings = components[0]
15 justification = "".join(components[1:]).strip()
17 readings = [int(i)-1 for i in re.findall(r'\d+', readings)] # readings listed from 1 onwards
18 return readings, justification
21def strip_hyphens(text:str) -> str:
22 return re.sub(r'---+.*', '', text).strip()
26def build_chain(llm, doc_language: str, apparatus_language: str, initiate_response:bool=False):
27 prompt = build_prompt(doc_language=doc_language, apparatus_language=apparatus_language, initiate_response=initiate_response)
29 return prompt | llm | StrOutputParser() | parse_result
32def build_source_chain(llm, doc_language: str, apparatus_language: str, notes:str, initiate_response:bool=False):
33 prompt = build_source_prompt(doc_language=doc_language, apparatus_language=apparatus_language, notes=notes, initiate_response=initiate_response)
35 return prompt | llm | StrOutputParser() | parse_result
38def print_prompt(prompt):
39 print(prompt.to_string())
40 return prompt
43def build_corresponding_text_chain(llm, doc_language: str, apparatus_language: str, verbose:bool=False, initiate_response:bool=False):
44 prompt = build_corresponding_text_prompt(doc_language=doc_language, apparatus_language=apparatus_language, initiate_response=initiate_response)
45 if verbose:
46 prompt = prompt | print_prompt
48 # llm_with_fallback = llm.bind(stop=["----"]).with_fallbacks([llm])
50 return prompt | llm | StrOutputParser() | strip_hyphens