chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
import json
|
||||
import re
|
||||
import pprint
|
||||
import requests
|
||||
|
||||
def update_contributors():
|
||||
"""
|
||||
Update contributors' task numbers and sort them based on contribution.
|
||||
|
||||
This function:
|
||||
- Reads the support_model.md, support_model_amd.md, and support_model_Ascend.md to extract tasks
|
||||
- Counts contribution points (2 for LoRA tasks, 1 for regular tasks)
|
||||
- Adds special contributor points
|
||||
- Sorts contributors by their contribution points
|
||||
- Saves the updated data to JSON file
|
||||
- Prints contributor information
|
||||
|
||||
Returns:
|
||||
dict: Updated contributors information
|
||||
"""
|
||||
# Read files
|
||||
with open('./support_model.md', 'r') as f:
|
||||
readme = f.read()
|
||||
|
||||
with open('./support_model_amd.md', 'r') as f:
|
||||
readme_amd = f.read()
|
||||
|
||||
with open('./support_model_Ascend.md', 'r') as f:
|
||||
readme_ascend = f.read()
|
||||
|
||||
with open('./contributors.json', 'r') as f:
|
||||
contributors = json.load(f)
|
||||
|
||||
# Reset task counts
|
||||
keys = contributors.keys()
|
||||
for key in keys:
|
||||
contributors[key]['task_num'] = 0
|
||||
|
||||
# Extract tasks from main support_model.md
|
||||
tasks = readme.split('\n')
|
||||
tasks = [task for task in tasks if '@' in task][:-1]
|
||||
|
||||
# Extract tasks from AMD support_model_amd.md
|
||||
tasks_amd = readme_amd.split('\n')
|
||||
tasks_amd = [task for task in tasks_amd if '@' in task]
|
||||
|
||||
# Extract tasks from Ascend support_model_Ascend.md
|
||||
tasks_ascend = readme_ascend.split('\n')
|
||||
tasks_ascend = [task for task in tasks_ascend if '@' in task]
|
||||
|
||||
# Combine all tasks
|
||||
all_tasks = tasks + tasks_amd + tasks_ascend
|
||||
|
||||
# Count points: LoRA tasks +2, regular tasks +1
|
||||
for task in all_tasks:
|
||||
if '@' not in task:
|
||||
continue
|
||||
name = task.split('@')[1]
|
||||
if name not in keys:
|
||||
continue
|
||||
# Check if the task contains "Lora" or "微调" (case-insensitive)
|
||||
if "Lora" in task or "微调" in task:
|
||||
contributors[name]['task_num'] += 2
|
||||
else:
|
||||
contributors[name]['task_num'] += 1
|
||||
|
||||
# Add special contributor points
|
||||
special_contributors = {
|
||||
'不要葱姜蒜': 300,
|
||||
'Logan Zou': 300,
|
||||
'刘十一': 150,
|
||||
}
|
||||
for name, points in special_contributors.items():
|
||||
if name in contributors:
|
||||
contributors[name]['task_num'] += points
|
||||
|
||||
# Sort by contribution points
|
||||
contributors = dict(sorted(contributors.items(), key=lambda x: x[1]['task_num'], reverse=True))
|
||||
|
||||
# Save results
|
||||
with open('./contributors.json', 'w') as f:
|
||||
json.dump(contributors, f, indent=4, ensure_ascii=False)
|
||||
|
||||
# Print results
|
||||
for key, value in contributors.items():
|
||||
print(f'- {value["info"]}')
|
||||
|
||||
return contributors
|
||||
|
||||
|
||||
def calculate_docker_hours():
|
||||
"""
|
||||
Calculate and display Docker runtime hours from CodeWithGPU API.
|
||||
Fetches data from Datawhale account, calculates total runtime hours,
|
||||
and displays sorted information about each container.
|
||||
"""
|
||||
url = "https://www.codewithgpu.com/api/v1/image/home/Datawhale?page_index=1&page_size=100&username=Datawhale"
|
||||
|
||||
headers = {
|
||||
"accept": "application/json, text/plain, */*",
|
||||
"accept-language": "zh-CN,zh;q=0.9",
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
|
||||
}
|
||||
|
||||
total_hours = 0
|
||||
docker_list = []
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
if data['code'] == "Success":
|
||||
item_list = data['data']['list']
|
||||
for item in item_list:
|
||||
uuid = item['uuid']
|
||||
runtime_hour = item['runtime_hour']
|
||||
|
||||
if runtime_hour is not None:
|
||||
total_hours += runtime_hour
|
||||
docker_list.append({
|
||||
"uuid": uuid.split("/")[-1],
|
||||
"runtime_hour": runtime_hour
|
||||
})
|
||||
else:
|
||||
print(f"Error: {data['message']}")
|
||||
|
||||
print(f"\n{'='*60}")
|
||||
print(f"{' DOCKER RUNTIME SUMMARY ':^60}")
|
||||
print(f"{'='*60}")
|
||||
print(f"{'Total Containers:':<20} {len(docker_list):>10}")
|
||||
print(f"{'Total Runtime:':<20} {total_hours:>10.1f} hours")
|
||||
|
||||
if docker_list:
|
||||
print(f"{'='*60}")
|
||||
print(f"{' DOCKER CONTAINERS (Sorted by Runtime) ':^60}")
|
||||
print(f"{'='*60}")
|
||||
print(f"{'Rank':<6} {'UUID':<35} {'Runtime (hours)':>15}")
|
||||
print(f"{'-'*6}-{'-'*35}-{'-'*15}")
|
||||
|
||||
docker_list = sorted(docker_list, key=lambda x: x['runtime_hour'], reverse=True)
|
||||
for i, item in enumerate(docker_list, 1):
|
||||
print(f"{i:<6} {item['uuid']:<35} {item['runtime_hour']:>15.1f}")
|
||||
print(f"{'='*60}")
|
||||
else:
|
||||
print("No Docker containers found.")
|
||||
|
||||
return docker_list, total_hours
|
||||
|
||||
|
||||
# Usage example
|
||||
if __name__ == "__main__":
|
||||
update_contributors()
|
||||
calculate_docker_hours()
|
||||
Reference in New Issue
Block a user