Spaces:
No application file
No application file
from github import Github,Auth | |
from github.Repository import Repository | |
from typing import List | |
import requests | |
import os, json, datetime, re,sys | |
from bs4 import BeautifulSoup | |
import openai | |
from dotenv import load_dotenv | |
load_dotenv() | |
import litellm | |
from litellm import completion | |
os.environ['AWS_ACCESS_KEY_ID']="AKIAWE73I2DYVFLFNLHS" | |
os.environ['AWS_REGION_NAME']="us-east-1" | |
os.environ['AWS_REGION']="us-east-1" | |
os.environ['AWS_SECRET_ACCESS_KEY']="r9Eqo6kg3rg0zHwK41N7IhfdiuWt4lCr68EYO6fv" | |
os.environ['PALM_API_KEY']='AIzaSyBr-t20IcF2T1xItAnlyYuQ50Ctu6Y0y4I' | |
os.environ["VERTEXAI_PROJECT"] = "data-axe-386317" | |
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'service_creds.json' | |
def printc(obj, color="cyan"): | |
color_code = { | |
"black": "30", "red": "31", "green": "32", "yellow": "33", | |
"blue": "34", "magenta": "35", "cyan": "36", "white": "37" | |
} | |
colored_text = f"\033[{color_code[color]}m{obj}\033[0m" if color in color_code else obj | |
print(colored_text) | |
auth = Auth.Token(os.environ.get('GH_KEY', 'default')) | |
g = Github(auth=auth) | |
def remove_html_and_urls(markdown_text): | |
no_html = re.sub(r'<[^>]+>', '', markdown_text) | |
pattern_urls = r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\'(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+' | |
no_html_no_urls = re.sub(pattern_urls, '', no_html) | |
return no_html_no_urls | |
def getGithubPinned(username: str)-> List[str]: | |
repos = [] | |
today = datetime.datetime.now() | |
day_1 = today.replace(day=1) | |
start_date, end_date = day_1.strftime("%Y-%m-%d"), today.strftime("%Y-%m-%d") | |
url = f"https://github.com/{username}?tab=overview&from={start_date}&to={end_date}" | |
response = requests.get(url) | |
if response.status_code == 200: | |
soup = BeautifulSoup(response.text, 'html.parser') | |
pinned_items = soup.find_all('div', class_='pinned-item-list-item-content') | |
repos = [] | |
for item in pinned_items: | |
repo_name = item.find('span', class_='repo').text.strip() | |
repos.append(repo_name) | |
else: | |
print(f"Failed to get pinned repos for {username}") | |
return repos | |
def get_repositories(username: str)->List[Repository]: | |
user = g.get_user(username) | |
all_repos = [repo for repo in user.get_repos()] | |
repo_dict = {repo.name: repo for repo in all_repos} | |
pinned_repo_names = getGithubPinned(username) | |
pinned_repos = [] | |
for name in pinned_repo_names: | |
if name in repo_dict: | |
pinned_repos.append(repo_dict.pop(name)) | |
sorted_repos = sorted(repo_dict.values(), key=lambda x: x.stargazers_count, reverse=True) | |
final_repo_list = pinned_repos + sorted_repos | |
return final_repo_list | |
def getBasicReport(username: str): | |
try: | |
user_repos = get_repositories(username)[:8] | |
summaries=[] | |
for repo in user_repos: | |
try: | |
content = "" | |
content+="\nNAME: "+str(repo.full_name)+"\nSTARS: "+str(repo.stargazers_count)+"\nReadme: \n" | |
files = repo.get_contents("") | |
md_files = [file for file in files if file.name.endswith('.md')] | |
md_file_content = repo.get_contents(md_files[0].path).decoded_content.decode() | |
content+= str(remove_html_and_urls(str(md_file_content))) | |
messages=[ | |
{"role": "user", "content": "I want you to summarize this repository and summarize the skills gained with this repository "}, | |
{"role": "assistant", "content": | |
""" | |
Sure, I can help with that! Please provide me with the details for the repo and I'll be able to summarize it and outline the skills that can be gained from it. | |
Additonally I will grade the techinal complexity with it. I will also greatly take into consideration the Number of stars. Furthermore I Will use broken english to ensure | |
my statements are as short and concise as possible | |
""" | |
}, | |
{"role": "user", "content": content} | |
] | |
response =completion(model="anthropic.claude-instant-v1", messages=messages,max_tokens=150,temperature=1.0) | |
summaries.append(response["choices"][0]["message"]['content']) | |
except: | |
continue | |
# message = completion(model="anthropic.claude-instant-v1", messages=messages) | |
printc(summaries,'cyan') | |
return summaries | |
except: | |
return "" | |