{"record":{"id":"cd15cf937129e0fe","repo":"BerriAI/litellm","slug":"litellm-error-trying-to-use-dynamodb-but-not-tabl","errorCode":null,"errorMessage":"LiteLLM Error, trying to use DynamoDB but not table name passed. Create a table and set `litellm.dynamodb_table_name=<your-table>`","messagePattern":"LiteLLM Error, trying to use DynamoDB but not table name passed\\. Create a table and set `litellm\\.dynamodb_table_name=<your-table>`","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/integrations/dynamodb.py","lineNumber":21,"sourceCode":"\nimport os\nimport traceback\nfrom typing import Any, Final\n\nimport litellm\nfrom litellm._uuid import uuid\n\n\nclass DyanmoDBLogger:\n    # Class variables or attributes\n\n    def __init__(self):\n        # Instance variables\n        import boto3\n\n        self.dynamodb: Any = boto3.resource(\"dynamodb\", region_name=os.environ[\"AWS_REGION_NAME\"])\n        if litellm.dynamodb_table_name is None:\n            raise ValueError(\n                \"LiteLLM Error, trying to use DynamoDB but not table name passed. Create a table and set `litellm.dynamodb_table_name=<your-table>`\"\n            )\n        self.table_name = litellm.dynamodb_table_name\n\n    async def _async_log_event(self, kwargs, response_obj, start_time, end_time, print_verbose):\n        self.log_event(kwargs, response_obj, start_time, end_time, print_verbose)\n\n    def log_event(self, kwargs, response_obj, start_time, end_time, print_verbose):\n        try:\n            print_verbose(f\"DynamoDB Logging - Enters logging function for model {kwargs}\")\n\n            # construct payload to send to DynamoDB\n            # follows the same params as langfuse.py\n            litellm_params: Final = kwargs.get(\"litellm_params\", {})\n            metadata: Final = litellm_params.get(\"metadata\", {}) or {}  # if litellm_params['metadata'] == None\n            messages: Final = kwargs.get(\"messages\")\n            optional_params: Final = kwargs.get(\"optional_params\", {})\n            call_type: Final = kwargs.get(\"call_type\", \"litellm.completion\")","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/integrations/dynamodb.py#L3-L39","documentation":"DynamoDBLogger.__init__ reads the process-global litellm.dynamodb_table_name; if it is None the logger refuses to construct because every log write needs a table. Note __init__ first executes os.environ['AWS_REGION_NAME'], so a missing AWS_REGION_NAME env var fails with KeyError before this ValueError is even reached.","triggerScenarios":"Adding 'dynamodb' to litellm.success_callback (which instantiates DynamoDBLogger on first logged event) without setting litellm.dynamodb_table_name first; setting the attribute after the first request has already triggered logger construction; running the proxy where the setting lives only in a worker that skipped it.","commonSituations":"Enabling DynamoDB logging in a notebook/script and forgetting the global; proxy config setting the table via environment only (this code reads the litellm global, not env); staging works because another path set the global, production fails.","solutions":["Set litellm.dynamodb_table_name = '<your-table>' before any request triggers the callback","Also export AWS_REGION_NAME (and standard AWS credentials) — __init__ requires the env var","Create the DynamoDB table in the target region first","For the LiteLLM proxy, prefer the UI/env config for DynamoDB logging so the global is set at startup"],"exampleFix":"# before\nimport litellm\nlitellm.success_callback = ['dynamodb']\n\n# after\nimport os\nimport litellm\nos.environ['AWS_REGION_NAME'] = 'us-east-1'\nlitellm.dynamodb_table_name = 'litellm-logs'\nlitellm.success_callback = ['dynamodb']","handlingStrategy":"validation","validationCode":"import litellm\n\nif 'dynamodb' in litellm.success_callback:\n    assert litellm.dynamodb_table_name, 'set litellm.dynamodb_table_name before enabling dynamodb callback'\n    assert 'AWS_REGION_NAME' in os.environ, 'set AWS_REGION_NAME for dynamodb logging'","typeGuard":null,"tryCatchPattern":"try:\n    logger = DynamoDBLogger()\nexcept (ValueError, KeyError) as e:\n    logger.warning('dynamodb logging disabled: %s', e)\n    litellm.success_callback.remove('dynamodb')","preventionTips":["Set litellm.dynamodb_table_name and AWS_REGION_NAME in the same startup block that enables the callback","Add a startup config check that fails the process before traffic when dynamodb is enabled without a table","Remember the check reads the litellm global, not the environment — env-only config is not enough here"],"tags":["litellm","dynamodb","logging","configuration","aws"],"backgroundTag":"missing-configuration","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}