bluenevus's picture
Update app.py
1a646d6 verified
raw
history blame
2.9 kB
import gradio as gr
import google.generativeai as genai
import requests
import base64
import json
from tenacity import retry, stop_after_attempt, wait_fixed
def fetch_github_files(github_url, personal_access_token):
# ... (keep this function as is) ...
def process_chunk_with_gemini(chunk, gemini_api_key):
genai.configure(api_key=gemini_api_key)
model = genai.GenerativeModel('gemini-2.5-pro-preview-03-25')
prompt = f"""
Analyze the following file content for open-source license information:
{chunk}
Please provide:
1. A numbered list with the name dependency and version as the title
2. 1st bullet under title has a brief summary of what the dependency does
3. 2nd bullet under title has the license name
4. 3rd bullet under title has a hyperlink to the license file
5. Provide no other information such as greeting or summary as the purpose is to catalog and document all open source licenses used.
"""
response = model.generate_content(prompt)
return response.text
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
def process_with_gemini(file_content, gemini_api_key):
# Split the content into chunks of approximately 4000 characters
chunk_size = 4000
chunks = [file_content[i:i+chunk_size] for i in range(0, len(file_content), chunk_size)]
results = []
for chunk in chunks:
result = process_chunk_with_gemini(chunk, gemini_api_key)
results.append(result)
# Combine the results
combined_result = "\n\n".join(results)
return combined_result
def process_input(github_url, personal_access_token, gemini_api_key):
if not github_url.startswith("https://github.com/"):
return "Error: Invalid GitHub URL. Please use the format: https://github.com/username/repository.git"
if not personal_access_token.strip():
return "Error: Personal Access Token is empty. Please provide a valid token."
file_content = fetch_github_files(github_url, personal_access_token)
if file_content.startswith("Error:"):
return file_content
try:
# Process the file content with Gemini
analysis = process_with_gemini(file_content, gemini_api_key)
return analysis
except Exception as e:
return f"Error processing the files: {str(e)}"
iface = gr.Interface(
fn=process_input,
inputs=[
gr.Textbox(label="GitHub Repository URL (format: https://github.com/username/repository.git)"),
gr.Textbox(label="GitHub Personal Access Token", type="password"),
gr.Textbox(label="Gemini API Key", type="password"),
],
outputs=gr.Textbox(label="License Information and Analysis"),
title="Open Source License Extractor",
description="Provide a GitHub repository URL to analyze open-source licenses from dependency files.",
)
if __name__ == "__main__":
iface.launch()