{"record":{"id":"0625562094913d4c","repo":"BerriAI/litellm","slug":"mavvrik-focus-frequency-frequency-is-not-suppo","errorCode":null,"errorMessage":"MAVVRIK_FOCUS_FREQUENCY='{frequency}' is not supported. Only 'daily' is allowed -- the Mavvrik ingestion protocol stores one file per calendar date (metrics/YYYY-MM-DD). Hourly or interval exports would overwrite each other within the same day.","messagePattern":"MAVVRIK_FOCUS_FREQUENCY='(.+?)' is not supported\\. Only 'daily' is allowed -- the Mavvrik ingestion protocol stores one file per calendar date \\(metrics/YYYY-MM-DD\\)\\. Hourly or interval exports would overwrite each other within the same day\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/integrations/mavvrik_focus/mavvrik_focus_logger.py","lineNumber":89,"sourceCode":"\n\ndef _is_empty_metrics_marker(marker: object | None) -> bool:\n    if marker is None:\n        return True\n    if isinstance(marker, (int, float)):\n        return marker == 0\n    if isinstance(marker, str):\n        return not marker.strip()\n    return False\n\n\nclass MavvrikFocusLogger(FocusLogger):\n    \"\"\"FOCUS-based export logger that routes to the Mavvrik destination.\"\"\"\n\n    def __init__(self, **kwargs: Any) -> None:\n        frequency: Final = os.getenv(\"MAVVRIK_FOCUS_FREQUENCY\", \"daily\").lower()\n        if frequency != \"daily\":\n            raise ValueError(\n                f\"MAVVRIK_FOCUS_FREQUENCY='{frequency}' is not supported. \"\n                \"Only 'daily' is allowed -- the Mavvrik ingestion protocol stores one \"\n                \"file per calendar date (metrics/YYYY-MM-DD). Hourly or interval \"\n                \"exports would overwrite each other within the same day.\"\n            )\n        super().__init__(\n            provider=\"mavvrik\",\n            export_format=\"csv\",\n            frequency=\"daily\",\n            prefix=\"mavvrik_focus_exports\",\n            destination_config={\n                \"api_key\": os.getenv(\"MAVVRIK_API_KEY\"),\n                \"api_endpoint\": os.getenv(\"MAVVRIK_API_ENDPOINT\"),\n                \"connection_id\": os.getenv(\"MAVVRIK_CONNECTION_ID\"),\n            },\n            **kwargs,\n        )\n        raw: Final = os.getenv(\"MAVVRIK_FOCUS_MAX_ROWS\")","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/integrations/mavvrik_focus/mavvrik_focus_logger.py#L71-L107","documentation":"MavvrikFocusLogger (a FOCUS-format cost export callback) reads MAVVRIK_FOCUS_FREQUENCY and only accepts 'daily' (case-insensitive; it is lowercased before comparison). Anything else raises ValueError at construction with an explanation: the Mavvrik ingestion protocol stores exactly one file per calendar date under metrics/YYYY-MM-DD, so hourly or interval exports would silently overwrite each other within the same day.","triggerScenarios":"Setting MAVVRIK_FOCUS_FREQUENCY to any value other than 'daily' (e.g. MAVVRIK_FOCUS_FREQUENCY=hourly, 'weekly', '1h', or even 'Daily ' with odd casing is fine after .lower() but 'DAILY-ish' is not) and then enabling the mavvrik FOCUS export callback, which instantiates MavvrikFocusLogger at startup.","commonSituations":"Operators templating a generic FREQUENCY env var across integrations (e.g. a shared 'hourly' export cadence) that leaks into the Mavvrik-specific variable; copy-pasting example config from another exporter that supports hourly; attempting sub-daily cost granularity without knowing Mavvrik's one-file-per-day protocol; leaving a placeholder value like 'CHANGEME' in the env.","solutions":["Remove MAVVRIK_FOCUS_FREQUENCY entirely — the default is already 'daily' and is the only supported value","Or explicitly set it correctly: export MAVVRIK_FOCUS_FREQUENCY=daily","If you genuinely need sub-daily exports, that is not supported by the Mavvrik destination; file a feature request rather than working around the validation"],"exampleFix":"# before\nMAVVRIK_FOCUS_FREQUENCY=hourly\n# after (or just delete the line — 'daily' is the default)\nMAVVRIK_FOCUS_FREQUENCY=daily","handlingStrategy":"validation","validationCode":"import os\n\nfreq = os.getenv('MAVVRIK_FOCUS_FREQUENCY', 'daily').lower()\nif freq != 'daily':\n    raise SystemExit(\n        f\"MAVVRIK_FOCUS_FREQUENCY={freq!r} unsupported; only 'daily' is valid \"\n        '(Mavvrik stores one file per calendar date)'\n    )","typeGuard":null,"tryCatchPattern":"try:\n    logger = MavvrikFocusLogger()\nexcept ValueError as e:\n    # config bug, not transient: fix the env value, do not retry\n    raise RuntimeError(f'Mavvrik FOCUS export misconfigured: {e}') from e","preventionTips":["Do not template a generic FREQUENCY variable into MAVVRIK_FOCUS_FREQUENCY","Omit the variable entirely unless you need to document the daily cadence explicitly","Add a config-lint step that rejects values outside each integration's supported enum","Note the protocol constraint (one metrics/YYYY-MM-DD file per day) next to the variable in your env documentation"],"tags":["mavvrik","focus-export","configuration","environment-variables","validation"],"backgroundTag":"invalid-config-value","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}