in supporting-blog-content/building-multimodal-rag-with-elasticsearch-gotham/src/llm_analyzer.py [0:0]
def analyze_evidence(self, evidence_results):
"""
Analyzes multimodal search results and generates a report
Args:
evidence_results: Dict with results by modality
{
'vision': [...],
'audio': [...],
'text': [...],
'depth': [...]
}
"""
# Format evidence for the prompt
evidence_summary = self._format_evidence(evidence_results)
# final prompt
prompt = f"""
You are a highly experienced forensic detective specializing in multimodal evidence analysis. Your task is to analyze the collected evidence (audio, images, text, depth maps) and conclusively determine the **prime suspect** responsible for the Gotham Central Bank case.
---
### **Collected Evidence:**
{evidence_summary}
### **Task:**
1. **Analyze all the evidence** and identify cross-modal connections.
2. **Determine the exact identity of the criminal** based on behavioral patterns, visual/auditory/textual clues, and symbolic markers.
3. **Justify your conclusion** by explaining why this suspect is definitively responsible.
4. **Assign a confidence score (0-100%)** to your conclusion.
---
### **Final Output Format (Strictly Follow This Format):**
- **Prime Suspect:** [Full Name or Alias]
- **Evidence Supporting Conclusion:** [Detailed breakdown of visual, auditory, textual, and behavioral evidence]
- **Behavioral Patterns:** [Key actions, motives, and criminal signature]
- **Confidence Level:** [0-100%]
- **Next Steps (if any):** [What additional evidence would further confirm the identity? If none, state "No further evidence required."]
If there is **insufficient evidence**, specify exactly what is missing and suggest what additional data would be needed for a conclusive identification.
This report must be **direct and definitive**—avoid speculation and provide a final, actionable determination of the suspect's identity.
"""
try:
response = self.client.chat.completions.create(
model="gpt-4-turbo-preview",
messages=[
{
"role": "system",
"content": "You are a forensic detective specialized in multimodal evidence analysis.",
},
{"role": "user", "content": prompt},
],
temperature=0.2,
max_tokens=1000,
)
report = response.choices[0].message.content
logger.info("\nš Forensic Report Generated:")
logger.info("=" * 50)
logger.info(report)
logger.info("=" * 50)
return report
except Exception as e:
logger.error(f"Error generating report: {str(e)}")
return None