mirror of
https://github.com/tiennm99/litellm.git
synced 2026-06-17 18:48:36 +00:00
134 lines
4.5 KiB
Python
134 lines
4.5 KiB
Python
import os
|
|
import re
|
|
|
|
# Define the base directory for the litellm repository and documentation path
|
|
repo_base = "./litellm" # Change this to your actual path
|
|
|
|
# Regular expressions to capture the keys used in os.getenv() and litellm.get_secret()
|
|
getenv_pattern = re.compile(r'os\.getenv\(\s*[\'"]([^\'"]+)[\'"]\s*(?:,\s*[^)]*)?\)')
|
|
get_secret_pattern = re.compile(
|
|
r'litellm\.get_secret\(\s*[\'"]([^\'"]+)[\'"]\s*(?:,\s*[^)]*|,\s*default_value=[^)]*)?\)'
|
|
)
|
|
get_secret_str_pattern = re.compile(
|
|
r'litellm\.get_secret_str\(\s*[\'"]([^\'"]+)[\'"]\s*(?:,\s*[^)]*|,\s*default_value=[^)]*)?\)'
|
|
)
|
|
|
|
# Set to store unique keys from the code
|
|
env_keys = set()
|
|
|
|
# Terminal/environment detection variables that should not be documented
|
|
# These are internal variables used for terminal detection, not user-configurable settings
|
|
EXCLUDED_TERMINAL_VARS = {
|
|
"TERM",
|
|
"TERM_PROGRAM",
|
|
"TERM_PROGRAM_VERSION",
|
|
"TERM_SESSION_ID",
|
|
"VTE_VERSION",
|
|
"KITTY_WINDOW_ID",
|
|
"KONSOLE_VERSION",
|
|
"ITERM_PROFILE",
|
|
"ITERM_PROFILE_NAME",
|
|
"ITERM_SESSION_ID",
|
|
"WEZTERM_VERSION",
|
|
"WT_SESSION",
|
|
"GNOME_TERMINAL_SCREEN",
|
|
"ALACRITTY_SOCKET",
|
|
}
|
|
|
|
# Directories to skip (dependencies, venvs, caches) - only scan litellm source
|
|
SKIP_DIRS = {
|
|
".venv",
|
|
"venv",
|
|
"__pycache__",
|
|
".git",
|
|
"node_modules",
|
|
"site-packages",
|
|
".eggs",
|
|
"dist",
|
|
"build",
|
|
}
|
|
|
|
# Walk through all files in the litellm repo to find references of os.getenv() and litellm.get_secret()
|
|
for root, dirs, files in os.walk(repo_base):
|
|
# Skip dependency/venv directories - prevents picking up env vars from installed packages
|
|
dirs[:] = [d for d in dirs if d not in SKIP_DIRS]
|
|
for file in files:
|
|
if file.endswith(".py"): # Only process Python files
|
|
file_path = os.path.join(root, file)
|
|
with open(file_path, "r", encoding="utf-8") as f:
|
|
content = f.read()
|
|
|
|
# Find all keys using os.getenv()
|
|
getenv_matches = getenv_pattern.findall(content)
|
|
env_keys.update(
|
|
match
|
|
for match in getenv_matches
|
|
if match not in EXCLUDED_TERMINAL_VARS
|
|
) # Extract only the key part, excluding terminal vars
|
|
|
|
# Find all keys using litellm.get_secret()
|
|
get_secret_matches = get_secret_pattern.findall(content)
|
|
env_keys.update(match for match in get_secret_matches)
|
|
|
|
# Find all keys using litellm.get_secret_str()
|
|
get_secret_str_matches = get_secret_str_pattern.findall(content)
|
|
env_keys.update(match for match in get_secret_str_matches)
|
|
|
|
# Print the unique keys found
|
|
print(env_keys)
|
|
|
|
|
|
# Parse the documentation to extract documented keys
|
|
repo_base = "./"
|
|
print(os.listdir(repo_base))
|
|
docs_path = (
|
|
"./docs/my-website/docs/proxy/config_settings.md" # Path to the documentation
|
|
)
|
|
documented_keys = set()
|
|
try:
|
|
with open(docs_path, "r", encoding="utf-8") as docs_file:
|
|
content = docs_file.read()
|
|
|
|
print(f"content: {content}")
|
|
|
|
# Find the section titled "general_settings - Reference"
|
|
general_settings_section = re.search(
|
|
r"### environment variables - Reference(.*?)(?=\n###|\Z)",
|
|
content,
|
|
re.DOTALL | re.MULTILINE,
|
|
)
|
|
print(f"general_settings_section: {general_settings_section}")
|
|
if general_settings_section:
|
|
# Extract the table rows - only first column (key name) from each row
|
|
table_content = general_settings_section.group(1)
|
|
for line in table_content.split("\n"):
|
|
# Match | KEY_NAME | description | - capture first column only
|
|
match = re.match(r"^\|\s*([A-Z_][A-Z0-9_]*)\s*\|", line)
|
|
if match:
|
|
documented_keys.add(match.group(1).strip())
|
|
except Exception as e:
|
|
raise Exception(
|
|
f"Error reading documentation: {e}, \n repo base - {os.listdir(repo_base)}"
|
|
)
|
|
|
|
|
|
print(f"documented_keys: {documented_keys}")
|
|
# Compare and find undocumented keys
|
|
undocumented_keys = env_keys - documented_keys
|
|
|
|
# Print results
|
|
print("Keys expected in 'environment settings' (found in code):")
|
|
for key in sorted(env_keys):
|
|
print(key)
|
|
|
|
if undocumented_keys:
|
|
raise Exception(
|
|
f"\nKeys not documented in 'environment settings - Reference': {undocumented_keys}"
|
|
)
|
|
else:
|
|
print(
|
|
"\nAll keys are documented in 'environment settings - Reference'. - {}".format(
|
|
env_keys
|
|
)
|
|
)
|