CoolFace
Apppublic

timedomain/skill-library

sourceHugging Faceapache-2.0updated 3y agoView on Hugging Face
0likes
tools.py84 linesDownload Raw Back to root
1import os2import json3from datetime import datetime4import re5 6def get_skill_files():7    skill_files = []8    skill_doc_files = []9    for root, dirs, files in os.walk("."):10        if "skill.json" in files:11            skill_files.append(os.path.join(root, "skill.json"))12        if "skill_doc.md" in files:13            skill_doc_files.append(os.path.join(root, "skill_doc.md"))14    return skill_files, skill_doc_files15 16def get_skill_data(file_path):17    with open(file_path, 'r', encoding='utf-8') as f:18        data = json.load(f)19    return data20 21def get_skill_doc_data(file_path):22    if not os.path.exists(file_path):23        return None24    with open(file_path, 'r', encoding='utf-8') as file:25        lines = file.readlines()26        title = lines[0].strip().replace("# ", "") if lines else None27        content = "".join(lines)28 29        # Regular expressions to extract the desired sections30        usage_pattern = r"# Usage:\n(.*?)\n\n"31        parameters_pattern = r"# Parameters:\n(.*?)\n\n"32        returns_pattern = r"# Returns:\n(.*?)(\n\n|$|#)"33 34        usage = re.search(usage_pattern, content, re.DOTALL)35        parameters = re.search(parameters_pattern, content, re.DOTALL)36        returns_ = re.search(returns_pattern, content, re.DOTALL)37 38        # Extract the matched content or set to None if not found39        usage_content = usage.group(1).strip() if usage else None40        parameters_content = parameters.group(1).strip() if parameters else None41        returns_content = returns_.group(1).strip() if returns_ else None42 43        return {44            "Title": title,45            "Usage": usage_content,46            "Parameters": parameters_content,47            "Returns": returns_content48        }49 50def get_skill_datas():51    skill_files, skill_doc_files = get_skill_files()52    skills_datas=[]53    for i, file in enumerate(skill_files):54        skill_doc_file = skill_doc_files[i]55        skill = get_skill_data(file)56        skill_doc = get_skill_doc_data(skill_doc_file)57        if skill_doc:58            skill.update(skill_doc)59        skills_datas.append(skill)60    return skills_datas61 62 63def time_ago(updated_at_str):64    now = datetime.now()65    updated_at = datetime.strptime(updated_at_str, '%Y-%m-%d %H:%M:%S')66    delta = now - updated_at67    68    minutes = delta.total_seconds() / 6069    hours = minutes / 6070    days = hours / 2471    months = days / 30.44  # An average month length72    years = days / 365.25  # Account for leap years73 74    if minutes < 60:75        return f"{int(minutes)} minutes ago"76    elif hours < 24:77        return f"{int(hours)} hours ago"78    elif days < 30.44:79        return f"{int(days)} days ago"80    elif months < 12:81        return f"{int(months)} months ago"82    else:83        return f"{int(years)} years ago"84