codeanalyze / app.py
kevin1911's picture
Update app.py
0540e48 verified
import gradio as gr
import requests
import openai # We will use OpenAI's API to generate the descriptions
# OpenAI API Key (You need to set your API key here)
openai.api_key = "your-openai-api-key-here"
# Function to generate AI-based description for each contributor
def generate_contributor_description(contributor_name, contributions):
prompt = f"Generate an in-depth analysis of the contribution of {contributor_name} to a GitHub repository, with {contributions} commits. Focus on the impact, type of contributions, and significance of their work."
response = openai.Completion.create(
engine="text-davinci-003", # Use the appropriate model for text generation
prompt=prompt,
max_tokens=150,
temperature=0.7
)
return response.choices[0].text.strip()
# Function to fetch repository details from GitHub and generate descriptions for contributors
def analyze_github_repo(repo_url):
# Extract the username and repo name from the GitHub URL
if "github.com" not in repo_url:
return "Please provide a valid GitHub repository URL."
parts = repo_url.split('/')
if len(parts) < 5:
return "URL should be in the format: https://github.com/username/repository"
user, repo = parts[3], parts[4]
# GitHub API endpoint to get repository details
api_url = f"https://api.github.com/repos/{user}/{repo}"
response = requests.get(api_url)
# Check if repository exists
if response.status_code == 404:
return "Repository not found."
# Parse the response
data = response.json()
# Extract relevant information
stars = data.get('stargazers_count', 'N/A')
forks = data.get('forks_count', 'N/A')
issues = data.get('open_issues_count', 'N/A')
contributors_url = data.get('contributors_url', None)
# Get number of contributors and their contributions (commit count)
contributors = []
if contributors_url:
contributors_data = requests.get(contributors_url).json()
for contributor in contributors_data:
contributors.append({
'login': contributor['login'],
'contributions': contributor['contributions']
})
# Prepare the text for repository details
result = f"Repository: {repo_url}\nStars: {stars}\nForks: {forks}\nOpen Issues: {issues}\n\nContributors' Contributions:\n"
# Add AI-generated descriptions for each contributor
for contributor in contributors:
contributor_name = contributor['login']
contributions = contributor['contributions']
description = generate_contributor_description(contributor_name, contributions)
result += f"{contributor_name} with {contributions} contributions: {description}\n"
return result
# Gradio interface for the tool
iface = gr.Interface(
fn=analyze_github_repo,
inputs=gr.Textbox(label="Enter GitHub Repository URL", placeholder="https://github.com/username/repository"),
outputs=gr.Textbox(label="Repository Analysis"),
title="GitHub Repository Analysis Tool",
description="Enter a GitHub repository URL to get an in-depth analysis of contributors' contributions using AI, including stars, forks, issues, and a detailed description of each contributor's work."
)
# Launch the app
iface.launch()