code: def create_budget(
      self,
      total_budget: float,
      user: str,
      duration: Optional[
          Literal["daily", "weekly", "monthly", "yearly"]
      ] = None,
      created_at: float = time.time(),
  ):
      self.user_dict[user] = {"total_budget": total_budget}
      if duration is None:
          return self.user_dict[user]
  
      if duration == "daily":
          duration_in_days = 1
      elif duration == "weekly":
          duration_in_days = 7
      elif duration == "monthly":
          duration_in_days = 28
      elif duration == "yearly":
          duration_in_days = 365
      else:
          raise ValueError(
              """duration needs to be one of ["daily", "weekly", "monthly", "yearly"]"""
          )
      self.user_dict[user] = {
          "total_budget": total_budget,
          "duration": duration_in_days,
          "created_at": created_at,
          "last_updated_at": created_at,
      }
      self._save_data_thread()  # [Non-Blocking] Update persistent storage without blocking execution
      return self.user_dict[user]
  
imports: import os, json, time
  import litellm
  from litellm.utils import ModelResponse
  import requests, threading
  from typing import Optional, Union, Literal
label_desc: Use image node_id 4 for calling the BudgetManager obj's underlying member method code with example usage: obj.create_budget(total_budget, user, duration, created_at) and returns: self, self