vn6295337's picture
Initial commit: Instant SWOT Agent
0c591a7
"""
Strategic confidence calculation service.
Computes confidence scores based on analysis quality and data coverage.
"""
def calculate_confidence(score: float, sources_available: list, sources_failed: list) -> dict:
"""
Calculate strategic confidence based on score and data coverage.
Args:
score: Quality score from critic (0-10)
sources_available: List of successfully fetched data sources
sources_failed: List of failed data sources
Returns:
Dictionary with:
- confidence: Overall confidence percentage (0-100)
- readiness: Human-readable readiness label
- level: Confidence level (high/medium/low)
- score_contribution: Points from quality score
- data_contribution: Points from data coverage
"""
# Base confidence from score (0-10 -> 0-60%)
score_confidence = (score / 10) * 60 if isinstance(score, (int, float)) else 30
# Data coverage bonus (0-40%)
total_sources = len(sources_available) + len(sources_failed)
if total_sources > 0:
coverage = len(sources_available) / total_sources
data_confidence = coverage * 40
else:
data_confidence = 20
total_confidence = score_confidence + data_confidence
# Determine readiness label
if total_confidence >= 75 and len(sources_failed) == 0:
readiness = "Board-ready"
level = "high"
elif total_confidence >= 60:
readiness = "Review recommended"
level = "medium"
else:
readiness = "Exploratory"
level = "low"
return {
"confidence": round(total_confidence),
"readiness": readiness,
"level": level,
"score_contribution": round(score_confidence),
"data_contribution": round(data_confidence)
}