enricorampazzo's picture
fixed Dockerfile and package imports
e382003
from form.form import work_categories
from local_storage.entities import SavedDetails
from enums.enums import Questions
class LlmParser:
@classmethod
def parse_verification_prompt_answers(cls, llm_answer:str, details: list[SavedDetails] | None)\
-> dict[Questions, str | None]:
print(f"llm answer: {llm_answer}")
answers = {}
for d in details:
answers.update(d.to_answers())
unanswered_questions = sorted([k.value for k in Questions.values() if k not in answers])
unanswered_questions = iter(unanswered_questions)
i = 0
question_id = next(unanswered_questions)
lines = [l for l in llm_answer.split("\n") if len(l.strip()) > 0 and not l.strip().endswith("?")]
while i < len(lines):
if question_id is None:
break
line = lines[i].strip()
if len(line) == 0:
i += 1
elif "null" in lines[i]:
answers[Questions(question_id)] = None
i += 1
question_id = next(unanswered_questions, None)
elif ":" in lines[i]:
answers[Questions(question_id)] = line.split(":")[1]
i += 1
question_id = next(unanswered_questions, None)
else:
answers[Questions(question_id)] = line
i += 1
question_id = next(unanswered_questions, None)
return answers
@classmethod
def parse_get_categories_answer(cls, category_answer) -> list[str]:
categories = []
for category in category_answer.split(";"):
categories.extend([k for k, v in work_categories.items() if category.lower() in v.lower()])
return categories