{"record":{"id":"4b7fd5cfda2389bc","repo":"OpenBB-finance/OpenBB","slug":"invalid-frequency-frequency-for-factor-fac","errorCode":null,"errorMessage":"Invalid frequency: '{frequency}' for factor: '{factor}' in region: '{region}'. Valid frequencies are: {\", \".join(intervals.keys())}","messagePattern":"Invalid frequency: '(.+?)' for factor: '(.+?)' in region: '(.+?)'\\. Valid frequencies are: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/famafrench/openbb_famafrench/models/factors.py","lineNumber":145,"sourceCode":"            raise ValueError(\n                f\"Invalid region: '{region}'. \"\n                + \"Valid regions are: \"\n                + \", \".join(FACTOR_REGION_MAP.keys())\n            )\n\n        regional_factors = FACTOR_REGION_MAP[region]\n\n        if factor not in regional_factors.get(\"factors\", {}):\n            raise ValueError(\n                f\"Invalid factor: '{factor}' for region: '{region}'. \"\n                + \"Valid factors are: \"\n                + \", \".join(regional_factors.get(\"factors\", {}).keys())\n            )\n\n        if frequency:\n            intervals = regional_factors.get(\"intervals\", {}).get(factor, {})\n            if frequency not in list(intervals):\n                raise ValueError(\n                    f\"Invalid frequency: '{frequency}' for factor: '{factor}'\"\n                    + f\" in region: '{region}'. \"\n                    + \"Valid frequencies are: \"\n                    + \", \".join(intervals.keys())\n                )\n\n        return values\n\n\nclass FamaFrenchFactorsData(Data):\n    \"\"\"Fama-French Factors Data.\n\n    Source: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html\n    \"\"\"\n\n    __alias_dict__ = {\n        \"date\": \"Date\",\n        \"mkt_rf\": \"Mkt-RF\",","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/famafrench/openbb_famafrench/models/factors.py#L127-L163","documentation":"Fama-French factors query-model validator: each (region, factor) pair supports only certain sampling frequencies (daily/monthly/annual depending on the file), stored in FACTOR_REGION_MAP[region]['intervals'][factor]. Supplying a frequency not in that dict raises this ValueError before any request is made.","triggerScenarios":"frequency='annual' for a factor file published only daily/monthly; frequency='weekly' (rarely available anywhere); mixing a frequency that works for one factor with another factor in the same region.","commonSituations":"Assuming all factors offer all frequencies; defaulting jobs to annual without checking file availability; UIs with a static frequency dropdown.","solutions":["Use a frequency from the error message (intervals for that region+factor).","Derive allowed frequencies from FACTOR_REGION_MAP[region]['intervals'][factor] before presenting choices.","Most factor files are at least daily and monthly — fall back to one of those."],"exampleFix":"# before\nquery = {'region': 'america', 'factor': '3_factors', 'frequency': 'weekly'}\n\n# after\nquery = {'region': 'america', 'factor': '3_factors', 'frequency': 'monthly'}","handlingStrategy":"validation","validationCode":"from openbb_famafrench.models.factors import FACTOR_REGION_MAP\n\ndef freqs_for(region: str, factor: str) -> list[str]:\n    return list(FACTOR_REGION_MAP.get(region, {}).get('intervals', {}).get(factor, {}))\n\ndef freq_ok(region: str, factor: str, frequency: str) -> bool:\n    return frequency in freqs_for(region, factor)","typeGuard":null,"tryCatchPattern":"try:\n    res = await obb.economy.famafrench.factors(factor=f, region=r, frequency=frq, provider='famafrench')\nexcept ValueError as e:\n    if 'Valid frequencies are' in str(e):\n        frq = freqs_for(r, f)[0]\n        res = await obb.economy.famafrench.factors(factor=f, region=r, frequency=frq, provider='famafrench')\n    else:\n        raise","preventionTips":["Populate frequency choices per (region, factor), not globally","Default to 'monthly' or 'daily', which most factor files publish"],"tags":["famafrench","factors","validation","frequency"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}