Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/ai-service/api/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ async def process_ocr(
metrics.logger.info(f"OCR Inference completed in {inference_latency:.4f}s")

processing_time_ms = int((time.time() - start_time) * 1000)
model_version = settings.groq_model if settings.get_active_provider() == "groq" else settings.openai_model

return OCRResponse(
success=True,
Expand All @@ -88,17 +89,21 @@ async def process_ocr(
processing_time_ms=processing_time_ms,
),
processing_time_ms=processing_time_ms,
model_version=model_version,
)

except HTTPException:
raise
except Exception as e:
processing_time_ms = int((time.time() - start_time) * 1000)
model_version = settings.groq_model if settings.get_active_provider() == "groq" else settings.openai_model
return OCRResponse(
success=False,
error={
"code": "processing_error",
"message": str(e),
},
processing_time_ms=processing_time_ms,
model_version=model_version,
)

6 changes: 5 additions & 1 deletion app/ai-service/api/v1/anonymize.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ async def anonymize_text(request: AnonymizeRequest):

try:
result = _main.pii_scrubber_service.anonymize(request.text)
return AnonymizeResponse(success=True, **result)
from config import settings
active_p = settings.get_active_provider()
model_version = settings.groq_model if active_p == "groq" else settings.openai_model
return AnonymizeResponse(success=True, model_version=model_version, **result)
except Exception as e:
logger.error(f"Anonymization failed: {str(e)}", exc_info=True)
raise HTTPException(status_code=500, detail="Failed to anonymize text")

19 changes: 17 additions & 2 deletions app/ai-service/api/v1/humanitarian.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,22 @@ async def verify_humanitarian_claim(request: HumanitarianVerificationRequest):
)
else:
raise exc
return HumanitarianVerificationResponse(success=True, **result)
from config import settings
provider = result.get("provider")
if provider == "openai":
model_version = settings.openai_model
elif provider == "groq":
model_version = settings.groq_model
else:
# Default fallback to active provider model or settings.openai_model
active_p = settings.get_active_provider()
model_version = settings.groq_model if active_p == "groq" else settings.openai_model

return HumanitarianVerificationResponse(success=True, model_version=model_version, **result)
except Exception as e:
logger.error("Humanitarian verification failed: %s", str(e), exc_info=True)
return HumanitarianVerificationResponse(success=False, error=str(e))
from config import settings
active_p = settings.get_active_provider()
model_version = settings.groq_model if active_p == "groq" else settings.openai_model
return HumanitarianVerificationResponse(success=False, error=str(e), model_version=model_version)

5 changes: 5 additions & 0 deletions app/ai-service/api/v1/ocr.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ async def process_ocr(
metrics.logger.info(f"OCR Inference completed in {inference_latency:.4f}s")

processing_time_ms = int((time.time() - start_time) * 1000)
model_version = settings.groq_model if settings.get_active_provider() == "groq" else settings.openai_model

return OCRResponse(
success=True,
Expand All @@ -99,17 +100,21 @@ async def process_ocr(
processing_time_ms=processing_time_ms,
),
processing_time_ms=processing_time_ms,
model_version=model_version,
)

except HTTPException:
raise
except Exception as e:
processing_time_ms = int((time.time() - start_time) * 1000)
model_version = settings.groq_model if settings.get_active_provider() == "groq" else settings.openai_model
return OCRResponse(
success=False,
error={
"code": "processing_error",
"message": str(e),
},
processing_time_ms=processing_time_ms,
model_version=model_version,
)

3 changes: 2 additions & 1 deletion app/ai-service/schemas/anonymization.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Dict
from typing import Dict, Optional

from pydantic import BaseModel, Field

Expand All @@ -20,3 +20,4 @@ class AnonymizeResponse(BaseModel):
original_length: int
pii_summary: PIISummary
token_counts: Dict[str, int] = Field(default_factory=dict)
model_version: Optional[str] = None
39 changes: 20 additions & 19 deletions app/ai-service/schemas/humanitarian.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
from typing import Any, Dict, List, Literal, Optional
from pydantic import BaseModel, Field


class HumanitarianVerificationRequest(BaseModel):
aid_claim: str = Field(min_length=10, description="Aid claim to verify")
supporting_evidence: List[str] = Field(default_factory=list)
context_factors: Dict[str, Any] = Field(default_factory=dict)
provider_preference: Literal["auto", "test", "openai", "groq"] = "auto"
timeout: Optional[float] = Field(default=None, description="Request-level timeout in seconds for provider call")


class HumanitarianVerificationResponse(BaseModel):
success: bool
provider: Optional[str] = None
model: Optional[str] = None
prompt_variant: Optional[str] = None
verification: Optional[Dict[str, Any]] = None
error: Optional[str] = None
from typing import Any, Dict, List, Literal, Optional
from pydantic import BaseModel, Field


class HumanitarianVerificationRequest(BaseModel):
aid_claim: str = Field(min_length=10, description="Aid claim to verify")
supporting_evidence: List[str] = Field(default_factory=list)
context_factors: Dict[str, Any] = Field(default_factory=dict)
provider_preference: Literal["auto", "test", "openai", "groq"] = "auto"
timeout: Optional[float] = Field(default=None, description="Request-level timeout in seconds for provider call")


class HumanitarianVerificationResponse(BaseModel):
success: bool
provider: Optional[str] = None
model: Optional[str] = None
prompt_variant: Optional[str] = None
verification: Optional[Dict[str, Any]] = None
error: Optional[str] = None
model_version: Optional[str] = None
24 changes: 24 additions & 0 deletions app/ai-service/schemas/humanitarian_verification_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from typing import Any, Dict, List, Literal, Optional
from pydantic import BaseModel, Field


class HumanitarianVerificationDetailsV2(BaseModel):
verdict: Literal["credible", "partially_credible", "inconclusive", "not_credible"] = Field(description="The verification verdict")
confidence: float = Field(ge=0.0, le=1.0, description="Confidence score between 0.0 and 1.0")
summary: str = Field(description="Neutral summary of the claim verification")
criteria_assessment: Optional[List[Dict[str, Any]]] = Field(default=None, description="Detailed assessment mapping to Sphere criteria")
risk_flags: Optional[List[str]] = Field(default=None, description="Identified risk flags")
missing_information: Optional[List[str]] = Field(default=None, description="List of missing information needed")
recommended_next_steps: Optional[List[str]] = Field(default=None, description="Recommended next steps")


class HumanitarianVerificationResponseV2(BaseModel):
success: bool
provider: Optional[str] = None
model: Optional[str] = None
prompt_variant: Optional[str] = None
verification: Optional[HumanitarianVerificationDetailsV2] = None
error: Optional[str] = None
model_version: Optional[str] = None
stamp: Optional[Dict[str, str]] = None

3 changes: 3 additions & 0 deletions app/ai-service/schemas/ocr.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from typing import Optional
from pydantic import BaseModel, Field


Expand All @@ -17,3 +18,5 @@ class OCRResponse(BaseModel):
data: OCRData | None = None
error: dict[str, str] | None = None
processing_time_ms: int
model_version: Optional[str] = None

Loading
Loading