ruvnet/RuView · warning · HTTPException
min_confidence must be between 0.0 and 1.0
Error message
min_confidence must be between 0.0 and 1.0
What it means
Raised as HTTP 400 by the QueryFilters dependency at dependencies.py:388 when min_confidence is supplied outside the closed interval [0.0, 1.0]. Confidence is a probability fraction in this system, not a percentage; None (parameter omitted) skips the check entirely.
Source
Thrown at archive/v1/src/api/dependencies.py:388
class QueryFilters:
"""Common query filters."""
def __init__(
self,
start_time: Optional[str] = None,
end_time: Optional[str] = None,
min_confidence: Optional[float] = None,
activity: Optional[str] = None
):
self.start_time = start_time
self.end_time = end_time
self.min_confidence = min_confidence
self.activity = activity
# Validate confidence
if min_confidence is not None:
if not 0.0 <= min_confidence <= 1.0:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="min_confidence must be between 0.0 and 1.0"
)
def get_query_filters(
start_time: Optional[str] = None,
end_time: Optional[str] = None,
min_confidence: Optional[float] = None,
activity: Optional[str] = None
) -> QueryFilters:
"""Get query filters."""
return QueryFilters(
start_time=start_time,
end_time=end_time,
min_confidence=min_confidence,
activity=activity
)View on GitHub (pinned to 4685618388)
Solutions
- Convert percentages to fractions before sending (80 percent becomes 0.8)
- Clamp the value client-side to [0.0, 1.0]
- Omit min_confidence entirely when no filtering is wanted — None is accepted
Example fix
# before
params = {'min_confidence': slider_percent}
# after
params = {'min_confidence': slider_percent / 100.0} Defensive patterns
Strategy: validation
Validate before calling
def to_confidence(value):
c = float(value) / 100.0 if float(value) > 1.0 else float(value)
return round(min(1.0, max(0.0, c)), 4)
params = {'min_confidence': to_confidence(slider_percent)} Type guard
def is_valid_confidence(c) -> bool:
return c is None or (isinstance(c, (int, float)) and 0.0 <= c <= 1.0) Try / catch
resp = await client.get('/api/v1/detections', params=params)
if resp.status_code == 400 and 'min_confidence' in resp.json().get('detail', ''):
params.pop('min_confidence', None) # drop the filter and retry unfiltered
resp = await client.get('/api/v1/detections', params=params) Prevention
- Store confidence as a 0..1 fraction in client state; convert only at the UI layer
- Omit min_confidence when no filter is wanted — None is accepted
- Guard against NaN before sending
When it happens
Trigger: A filtered listing endpoint called with ?min_confidence=1.2, ?min_confidence=-0.1, or a percentage like ?min_confidence=80 (anything not in [0.0, 1.0]).
Common situations: A 0-100 UI slider value is sent without dividing by 100; a caller sends 5 meaning '5 percent'; a NaN serializes to an out-of-range float.
Related errors
- Page must be >= 1
- Size must be >= 1
- Size must be <= {max_size}
- End time must be after start time
- Query range cannot exceed 7 days
AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16).
Data as JSON: /api/errors/7c17dcffeee2e4c7.
Report an issue: GitHub.