Shakir60 commited on
Commit
3b1af89
·
verified ·
1 Parent(s): 0d97322

Update rag_utils.py

Browse files
Files changed (1) hide show
  1. rag_utils.py +39 -53
rag_utils.py CHANGED
@@ -13,6 +13,7 @@ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(
13
  class RAGSystem:
14
  def __init__(self):
15
  try:
 
16
  self.embeddings = HuggingFaceEmbeddings(
17
  model_name="sentence-transformers/all-mpnet-base-v2"
18
  )
@@ -39,34 +40,38 @@ class RAGSystem:
39
  # Validate knowledge base
40
  self._validate_knowledge_base(knowledge_base)
41
 
42
- # Add expert insights and case studies
43
  expert_insights = self._generate_expert_insights(knowledge_base)
44
  case_studies = self._generate_case_studies()
45
 
46
  for damage_type, cases in knowledge_base.items():
47
- for case in cases:
48
- # Combine basic info with expert insights
49
- relevant_insight = expert_insights.get(damage_type, "")
50
- relevant_cases = case_studies.get(damage_type, "")
51
-
52
- doc_text = f"""
53
- Damage Type: {damage_type}
54
- Severity: {case['severity']}
55
- Description: {case['description']}
56
- Technical Details: {case['description']}
57
- Expert Insight: {relevant_insight}
58
- Case Studies: {relevant_cases}
59
- Repair Methods: {', '.join(case['repair_method'])}
60
- Cost Considerations: {case['estimated_cost']}
61
- Implementation Timeline: {case['timeframe']}
62
- Location Specifics: {case['location']}
63
- Required Expertise Level: {case['required_expertise']}
64
- Emergency Protocol: {case['immediate_action']}
65
- Preventive Measures: {case['prevention']}
66
- Long-term Implications: Analysis of long-term structural integrity impact
67
- Environmental Factors: Consideration of environmental conditions
68
- """
69
- documents.append(doc_text)
 
 
 
 
70
 
71
  splits = self.text_splitter.create_documents(documents)
72
  self.vector_store = FAISS.from_documents(splits, self.embeddings)
@@ -89,10 +94,11 @@ class RAGSystem:
89
  """Validate the structure of the knowledge base."""
90
  required_keys = ['severity', 'description', 'repair_method', 'estimated_cost', 'timeframe', 'location', 'required_expertise', 'immediate_action', 'prevention']
91
  for damage_type, cases in knowledge_base.items():
92
- for case in cases:
93
  for key in required_keys:
94
  if key not in case:
95
- raise ValueError(f"Missing required field '{key}' in {damage_type}")
 
96
  logging.info("Knowledge base validation passed.")
97
 
98
  def _get_qa_prompt(self):
@@ -116,26 +122,12 @@ class RAGSystem:
116
  input_variables=["context", "question"]
117
  )
118
 
119
- def _generate_expert_insights(self, knowledge_base):
120
- """Generate expert insights for each damage type"""
121
- insights = {}
122
- for damage_type in knowledge_base.keys():
123
- insights[damage_type] = f"Expert analysis for {damage_type} including latest research findings and industry best practices."
124
- return insights
125
-
126
- def _generate_case_studies(self):
127
- """Generate relevant case studies for each damage type"""
128
- return {
129
- "spalling": "Case studies of successful spalling repairs in similar structures",
130
- "reinforcement_corrosion": "Examples of corrosion mitigation in harsh environments",
131
- "structural_crack": "Analysis of crack progression and successful interventions",
132
- "dampness": "Case studies of effective moisture control solutions",
133
- "no_damage": "Preventive maintenance success stories"
134
- }
135
-
136
  def get_enhanced_analysis(self, damage_type, confidence, custom_query=None):
137
  """Get enhanced analysis with dynamic content generation"""
138
  try:
 
 
 
139
  if not custom_query:
140
  base_query = f"""
141
  Provide a comprehensive analysis for {damage_type} damage with {confidence}% confidence level.
@@ -146,6 +138,9 @@ class RAGSystem:
146
 
147
  # Get relevant documents
148
  results = self.qa_chain.run(base_query)
 
 
 
149
 
150
  # Process and categorize the response
151
  enhanced_info = {
@@ -156,13 +151,4 @@ class RAGSystem:
156
  return enhanced_info
157
  except Exception as e:
158
  logging.error(f"Failed to generate enhanced analysis: {str(e)}")
159
- return None
160
-
161
- def _extract_technical_details(self, results, damage_type):
162
- return [f"Detailed technical analysis for {damage_type}", results]
163
-
164
- def _extract_safety_considerations(self, results):
165
- return [f"Safety analysis based on current conditions", results]
166
-
167
- def _extract_recommendations(self, results, confidence):
168
- return [f"Prioritized recommendations based on {confidence}% confidence", results]
 
13
  class RAGSystem:
14
  def __init__(self):
15
  try:
16
+ # Initialize embeddings
17
  self.embeddings = HuggingFaceEmbeddings(
18
  model_name="sentence-transformers/all-mpnet-base-v2"
19
  )
 
40
  # Validate knowledge base
41
  self._validate_knowledge_base(knowledge_base)
42
 
43
+ # Generate insights and case studies
44
  expert_insights = self._generate_expert_insights(knowledge_base)
45
  case_studies = self._generate_case_studies()
46
 
47
  for damage_type, cases in knowledge_base.items():
48
+ for idx, case in enumerate(cases):
49
+ try:
50
+ # Combine insights into document text
51
+ relevant_insight = expert_insights.get(damage_type, "")
52
+ relevant_cases = case_studies.get(damage_type, "")
53
+
54
+ doc_text = f"""
55
+ Damage Type: {damage_type}
56
+ Severity: {case['severity']}
57
+ Description: {case['description']}
58
+ Technical Details: {case['description']}
59
+ Expert Insight: {relevant_insight}
60
+ Case Studies: {relevant_cases}
61
+ Repair Methods: {', '.join(case['repair_method'])}
62
+ Cost Considerations: {case['estimated_cost']}
63
+ Implementation Timeline: {case['timeframe']}
64
+ Location Specifics: {case['location']}
65
+ Required Expertise Level: {case['required_expertise']}
66
+ Emergency Protocol: {case['immediate_action']}
67
+ Preventive Measures: {case['prevention']}
68
+ """
69
+ documents.append(doc_text)
70
+ except KeyError as e:
71
+ logging.warning(f"Missing key {str(e)} in {damage_type}, case {idx + 1}. Skipping.")
72
+
73
+ if not documents:
74
+ raise ValueError("No valid documents to process.")
75
 
76
  splits = self.text_splitter.create_documents(documents)
77
  self.vector_store = FAISS.from_documents(splits, self.embeddings)
 
94
  """Validate the structure of the knowledge base."""
95
  required_keys = ['severity', 'description', 'repair_method', 'estimated_cost', 'timeframe', 'location', 'required_expertise', 'immediate_action', 'prevention']
96
  for damage_type, cases in knowledge_base.items():
97
+ for idx, case in enumerate(cases):
98
  for key in required_keys:
99
  if key not in case:
100
+ logging.error(f"Missing required field '{key}' in {damage_type}, case {idx + 1}")
101
+ raise ValueError(f"Missing required field '{key}' in {damage_type}, case {idx + 1}")
102
  logging.info("Knowledge base validation passed.")
103
 
104
  def _get_qa_prompt(self):
 
122
  input_variables=["context", "question"]
123
  )
124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  def get_enhanced_analysis(self, damage_type, confidence, custom_query=None):
126
  """Get enhanced analysis with dynamic content generation"""
127
  try:
128
+ if not self.vector_store:
129
+ raise ValueError("Vector store is not initialized.")
130
+
131
  if not custom_query:
132
  base_query = f"""
133
  Provide a comprehensive analysis for {damage_type} damage with {confidence}% confidence level.
 
138
 
139
  # Get relevant documents
140
  results = self.qa_chain.run(base_query)
141
+ if not results:
142
+ logging.warning("No results returned for query.")
143
+ return {"technical_details": [], "safety_considerations": [], "expert_recommendations": []}
144
 
145
  # Process and categorize the response
146
  enhanced_info = {
 
151
  return enhanced_info
152
  except Exception as e:
153
  logging.error(f"Failed to generate enhanced analysis: {str(e)}")
154
+ return {"technical_details": [], "safety_considerations": [], "expert_recommendations": []}