-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextract_reviewer.py
95 lines (75 loc) · 3.25 KB
/
extract_reviewer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from typing import Optional
from modules.model_loader import ModelLoader
from modules.prompt_manager import PromptManager
class ExtractReviewer:
"""
A class to handle the review and final review of extracted data sections using an AI model.
Attributes:
model_loader (ModelLoader): An instance of ModelLoader for loading the AI model.
prompt_manager (PromptManager): An instance of PromptManager for managing prompts.
"""
def __init__(self, model_loader: ModelLoader, prompt_manager: PromptManager):
"""
Initializes the ExtractReviewer with a model loader and a prompt manager.
Args:
model_loader (ModelLoader): An instance of ModelLoader.
prompt_manager (PromptManager): An instance of PromptManager.
"""
self.model_loader = model_loader
self.prompt_manager = prompt_manager
def review_section(self, section: str, user_input: Optional[str] = None) -> str:
"""
Reviews a section of extracted data using the AI model.
Args:
section (str): The section of extracted data to review.
user_input (Optional[str]): The user's input for modifications, if any.
Returns:
str: The AI model's response.
"""
prompt = self._get_review_prompt("review_section", section, user_input)
return self._generate_response(prompt)
def final_review(self, updated_section: str) -> str:
"""
Performs a final review of a section after changes have been made.
Args:
updated_section (str): The section of data after user modifications.
Returns:
str: The AI model's response after final review.
"""
prompt = self.prompt_manager.get_prompt(
"final_review", updated_section=updated_section
)
return self._generate_response(prompt)
def _get_review_prompt(
self, prompt_key: str, section: str, user_input: Optional[str] = None
) -> str:
"""
Retrieves and formats the review prompt.
Args:
prompt_key (str): The key for the review prompt.
section (str): The section of extracted data.
user_input (Optional[str]): The user's input for modifications, if any.
Returns:
str: The formatted review prompt.
"""
if user_input is not None:
return self.prompt_manager.get_prompt(
prompt_key, section_data=section, user_input=user_input
)
return self.prompt_manager.get_prompt(prompt_key, section_data=section)
def _generate_response(self, prompt: str) -> str:
"""
Generates a response from the AI model based on the provided prompt.
Args:
prompt (str): The input prompt for the model.
Returns:
str: The AI model's response.
"""
context_window_size = self.model_loader.context_window
if len(prompt) > context_window_size:
response_parts = [
self.model_loader.generate(prompt[i : i + context_window_size])
for i in range(0, len(prompt), context_window_size)
]
return " ".join(response_parts)
return self.model_loader.generate(prompt)