[Docs] readme fixes add supported providers (#16109)
* add provider test * docs readme.md * docs providers * order providers * test_providers_alphabetically_ordered * docs endpoint * fix config * add ENDPOINT_COLUMNS * add provider endpoints * docs fix
This commit is contained in:
parent
30f343c3cb
commit
0428229032
1543
provider_endpoints_support.json
Normal file
1543
provider_endpoints_support.json
Normal file
File diff suppressed because it is too large
Load Diff
147
scripts/update_readme_providers_table.py
Normal file
147
scripts/update_readme_providers_table.py
Normal file
@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script to update the README.md providers table from provider_endpoints_support.json
|
||||
"""
|
||||
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
# Define paths
|
||||
REPO_ROOT = Path(__file__).parent.parent
|
||||
JSON_PATH = REPO_ROOT / "provider_endpoints_support.json"
|
||||
README_PATH = REPO_ROOT / "README.md"
|
||||
|
||||
# Endpoint column headers
|
||||
ENDPOINT_COLUMNS = [
|
||||
("/chat/completions", "chat_completions"),
|
||||
("/messages", "messages"),
|
||||
("/responses", "responses"),
|
||||
("/embeddings", "embeddings"),
|
||||
("/image/generations", "image_generations"),
|
||||
("/audio/transcriptions", "audio_transcriptions"),
|
||||
("/audio/speech", "audio_speech"),
|
||||
("/moderations", "moderations"),
|
||||
("/batches", "batches"),
|
||||
("/rerank", "rerank"),
|
||||
]
|
||||
|
||||
|
||||
def load_providers_data():
|
||||
"""Load provider data from JSON file"""
|
||||
with open(JSON_PATH, 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
# Handle both old and new format
|
||||
if "providers" in data:
|
||||
return data["providers"]
|
||||
return data
|
||||
|
||||
|
||||
def generate_markdown_table(providers_data):
|
||||
"""Generate markdown table from providers data"""
|
||||
|
||||
# Sort providers alphabetically by display name
|
||||
sorted_providers = sorted(
|
||||
providers_data.items(),
|
||||
key=lambda x: x[1]['display_name'].lower()
|
||||
)
|
||||
|
||||
# Generate header
|
||||
header_cols = ["Provider"] + [col[0] for col in ENDPOINT_COLUMNS]
|
||||
header = "| " + " | ".join(header_cols) + " |"
|
||||
separator = "|" + "|".join(["-" * (len(col) + 2) for col in header_cols]) + "|"
|
||||
|
||||
# Generate rows
|
||||
rows = []
|
||||
for slug, data in sorted_providers:
|
||||
display_name = data['display_name']
|
||||
url = data['url']
|
||||
|
||||
# Build row
|
||||
row_parts = [f"[{display_name}]({url})"]
|
||||
|
||||
for _, endpoint_key in ENDPOINT_COLUMNS:
|
||||
supported = data['endpoints'].get(endpoint_key, False)
|
||||
row_parts.append("✅" if supported else "")
|
||||
|
||||
row = "| " + " | ".join(row_parts) + " |"
|
||||
rows.append(row)
|
||||
|
||||
# Combine all parts
|
||||
table_lines = [
|
||||
"<!-- AUTO-GENERATED TABLE - DO NOT EDIT MANUALLY -->",
|
||||
"<!-- Edit provider_endpoints_support.json and run scripts/update_readme_providers_table.py -->",
|
||||
"",
|
||||
header,
|
||||
separator
|
||||
] + rows + [
|
||||
"<!-- END AUTO-GENERATED TABLE -->"
|
||||
]
|
||||
|
||||
return "\n".join(table_lines)
|
||||
|
||||
|
||||
def update_readme(table_markdown):
|
||||
"""Update README.md with new table"""
|
||||
with open(README_PATH, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
print(f" Original README length: {len(content)} bytes")
|
||||
|
||||
# Find the table section
|
||||
# Look for the AUTO-GENERATED comment or the header, and replace until Read the Docs
|
||||
pattern = r"(## Supported Providers.*?\n\n)(?:<!-- AUTO-GENERATED TABLE.*?<!-- END AUTO-GENERATED TABLE -->|.*?)(\n\n\[\*\*Read the Docs\*\*\])"
|
||||
|
||||
# Test if pattern matches
|
||||
match = re.search(pattern, content, flags=re.DOTALL)
|
||||
if not match:
|
||||
print("❌ Pattern did not match in README.md")
|
||||
return False
|
||||
|
||||
print(f" Pattern matched, replacing table...")
|
||||
|
||||
def replacer(match):
|
||||
return match.group(1) + table_markdown + match.group(2)
|
||||
|
||||
new_content = re.sub(pattern, replacer, content, flags=re.DOTALL)
|
||||
|
||||
print(f" New README length: {len(new_content)} bytes")
|
||||
|
||||
if new_content == content:
|
||||
print(" ℹ️ Table is already up-to-date, no changes needed")
|
||||
return True # Not an error - table is already correct
|
||||
|
||||
with open(README_PATH, 'w') as f:
|
||||
f.write(new_content)
|
||||
|
||||
print(" ✓ README.md has been updated")
|
||||
return True
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function"""
|
||||
print("Loading provider data from provider_endpoints_support.json...")
|
||||
providers_data = load_providers_data()
|
||||
print(f"✓ Loaded {len(providers_data)} providers")
|
||||
|
||||
print("\nGenerating markdown table...")
|
||||
table_markdown = generate_markdown_table(providers_data)
|
||||
print(f"✓ Generated table with {len(providers_data)} rows")
|
||||
|
||||
print("\nUpdating README.md...")
|
||||
if update_readme(table_markdown):
|
||||
print("✓ Successfully updated README.md")
|
||||
print("\n📝 Please review the changes and commit both files:")
|
||||
print(" - provider_endpoints_support.json")
|
||||
print(" - README.md")
|
||||
else:
|
||||
print("❌ Failed to update README.md")
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user