181 lines
5.9 KiB
Markdown
181 lines
5.9 KiB
Markdown
# Bilingual AI Analysis Implementation
|
|
|
|
## Overview
|
|
|
|
The AI analysis system now generates all text fields in both English and Arabic, providing better support for bilingual users in Saudi Arabia.
|
|
|
|
## Changes Made
|
|
|
|
### 1. AI Service (`apps/core/ai_service.py`)
|
|
|
|
**Updated AI Prompt:**
|
|
- Modified the `analyze_complaint` method to request bilingual output
|
|
- AI now generates all text fields in both English and Arabic
|
|
- System prompt emphasizes bilingual capabilities
|
|
|
|
**New Response Format:**
|
|
```json
|
|
{
|
|
"title_en": "concise title in English summarizing the complaint (max 10 words)",
|
|
"title_ar": "العنوان بالعربية",
|
|
"short_description_en": "2-3 sentence summary in English of the complaint that captures the main issue and context",
|
|
"short_description_ar": "ملخص من 2-3 جمل بالعربية",
|
|
"severity": "low|medium|high|critical",
|
|
"priority": "low|medium|high",
|
|
"category": "exact category name from the list above",
|
|
"subcategory": "exact subcategory name from the chosen category, or empty string if not applicable",
|
|
"department": "exact department name from the hospital's departments, or empty string if not applicable",
|
|
"suggested_action_en": "2-3 specific, actionable steps in English to address this complaint",
|
|
"suggested_action_ar": "خطوات محددة وعمليه بالعربية",
|
|
"reasoning_en": "Brief explanation in English of your classification (2-3 sentences)",
|
|
"reasoning_ar": "شرح مختصر بالعربية"
|
|
}
|
|
```
|
|
|
|
### 2. Complaint Tasks (`apps/complaints/tasks.py`)
|
|
|
|
**Updated `analyze_complaint_with_ai` Task:**
|
|
- Stores bilingual AI results in complaint metadata
|
|
- Updates complaint title from AI's English version
|
|
- Creates bilingual timeline update messages
|
|
- Returns bilingual results
|
|
|
|
**Metadata Structure:**
|
|
```python
|
|
complaint.metadata['ai_analysis'] = {
|
|
'title_en': 'English title',
|
|
'title_ar': 'العنوان بالعربية',
|
|
'short_description_en': 'English summary',
|
|
'short_description_ar': 'ملخص بالعربية',
|
|
'suggested_action_en': 'English action steps',
|
|
'suggested_action_ar': 'خطوات العمل بالعربية',
|
|
'reasoning_en': 'English explanation',
|
|
'reasoning_ar': 'الشرح بالعربية',
|
|
'analyzed_at': 'ISO timestamp',
|
|
'old_severity': 'previous severity',
|
|
'old_priority': 'previous priority',
|
|
'old_category': 'previous category name',
|
|
'old_category_id': 'previous category ID',
|
|
'old_department': 'previous department name',
|
|
'old_department_id': 'previous department ID'
|
|
}
|
|
```
|
|
|
|
**Timeline Update Example:**
|
|
```
|
|
AI analysis complete: Severity=high, Priority=medium, Category=Quality of Care, Department=Nursing
|
|
|
|
اكتمل تحليل الذكاء الاصطناعي: الشدة=high, الأولوية=medium, الفئة=Quality of Care, القسم=Nursing
|
|
```
|
|
|
|
### 3. Complaint Model (`apps/complaints/models.py`)
|
|
|
|
**Added Bilingual Properties:**
|
|
- `title_en` - AI-generated title (English)
|
|
- `title_ar` - AI-generated title (Arabic)
|
|
- `short_description_en` - AI-generated short description (English)
|
|
- `short_description_ar` - AI-generated short description (Arabic)
|
|
- `suggested_action_en` - AI-generated suggested action (English)
|
|
- `suggested_action_ar` - AI-generated suggested action (Arabic)
|
|
- `reasoning_en` - AI-generated reasoning (English)
|
|
- `reasoning_ar` - AI-generated reasoning (Arabic)
|
|
|
|
**Backward Compatibility:**
|
|
- Existing properties `short_description` and `suggested_action` still work
|
|
- They now return the English versions (`short_description_en`, `suggested_action_en`)
|
|
|
|
## Usage Examples
|
|
|
|
### Accessing Bilingual AI Results in Code
|
|
|
|
```python
|
|
complaint = Complaint.objects.get(id=some_id)
|
|
|
|
# Get English version
|
|
title_en = complaint.title_en
|
|
summary_en = complaint.short_description_en
|
|
action_en = complaint.suggested_action_en
|
|
|
|
# Get Arabic version
|
|
title_ar = complaint.title_ar
|
|
summary_ar = complaint.short_description_ar
|
|
action_ar = complaint.suggested_action_ar
|
|
|
|
# Get reasoning
|
|
reasoning_en = complaint.reasoning_en
|
|
reasoning_ar = complaint.reasoning_ar
|
|
```
|
|
|
|
### Accessing Raw Metadata
|
|
|
|
```python
|
|
ai_analysis = complaint.metadata.get('ai_analysis', {})
|
|
|
|
if ai_analysis:
|
|
title_en = ai_analysis.get('title_en', '')
|
|
title_ar = ai_analysis.get('title_ar', '')
|
|
# etc.
|
|
```
|
|
|
|
### Displaying in Templates
|
|
|
|
```html
|
|
<!-- English version -->
|
|
<h2>{{ complaint.title_en }}</h2>
|
|
<p>{{ complaint.short_description_en }}</p>
|
|
|
|
<!-- Arabic version (with RTL) -->
|
|
<h2 dir="rtl">{{ complaint.title_ar }}</h2>
|
|
<p dir="rtl">{{ complaint.short_description_ar }}</p>
|
|
|
|
<!-- Language-aware display -->
|
|
{% if LANGUAGE_CODE == 'ar' %}
|
|
<h2 dir="rtl">{{ complaint.title_ar }}</h2>
|
|
{% else %}
|
|
<h2>{{ complaint.title_en }}</h2>
|
|
{% endif %}
|
|
```
|
|
|
|
## Fields That Are Bilingual
|
|
|
|
- ✅ Title
|
|
- ✅ Short description
|
|
- ✅ Suggested action
|
|
- ✅ Reasoning
|
|
|
|
## Fields That Remain Single Values
|
|
|
|
- Severity (enum code: low/medium/high/critical)
|
|
- Priority (enum code: low/medium/high)
|
|
- Category (reference to existing category)
|
|
- Subcategory (reference to existing subcategory)
|
|
- Department (reference to existing department)
|
|
|
|
## Migration Notes
|
|
|
|
- No database migration required (metadata is JSONField)
|
|
- Existing complaints will have empty `_en` and `_ar` fields until re-analyzed
|
|
- Backward compatible - existing code using `short_description` and `suggested_action` will continue to work
|
|
|
|
## Testing
|
|
|
|
To test bilingual AI analysis:
|
|
|
|
1. Create a new complaint via the public form
|
|
2. Wait for AI analysis (async Celery task)
|
|
3. Check the complaint metadata:
|
|
```python
|
|
complaint = Complaint.objects.latest('created_at')
|
|
print(complaint.metadata['ai_analysis'])
|
|
```
|
|
|
|
Expected output should include both `_en` and `_ar` versions of all text fields.
|
|
|
|
## Future Enhancements
|
|
|
|
Possible future improvements:
|
|
1. Add language preference per user
|
|
2. Auto-display based on user's language setting
|
|
3. Add translation for existing complaints
|
|
4. Support for more languages if needed
|