GitChatIssue / utils.py
Anustup's picture
Upload 3 files
038becc verified
import requests
import json
import csv
from constants import OPENAI_API_KEY, OPENAI_API_BASE_URL, TEXT_MODEL_ENGINE, GITHUB_AUTH_KEY
def create_open_ai_query(input_query, system_message=None, model_engine=TEXT_MODEL_ENGINE,
functions=None, function_call=None):
openai_url = f"{OPENAI_API_BASE_URL}/chat/completions"
headers = {'Authorization': f'Bearer {OPENAI_API_KEY}', 'Content-Type': 'application/json'}
messages = []
if system_message:
messages.append({"role": "system", "content": system_message})
messages.append({"role": "user", "content": input_query})
payload = {
'model': model_engine,
'messages': messages,
'response_format': {"type": "json_object"}
}
if functions:
payload['functions'] = functions
payload['function_call'] = function_call
response = requests.post(openai_url, headers=headers, data=json.dumps(payload))
if response.status_code == 200 and 'choices' in response.json():
if functions:
content_text = response.json()['choices'][0]['message']['function_call']['arguments'].strip()
else:
content_text = response.json()['choices'][0]['message']['content'].strip()
return {"success": True, "data": content_text, "response_json": response.json()}
return {"success": False, "error": response.text}
def generate_issues_json(repo_url):
# headers = {'Authorization': f'{GITHUB_AUTH_KEY}'}
response = requests.get(repo_url)
if response.status_code == 200:
return {'success': True, 'data': response.json()}
else:
return {'success': False, 'message': f'Request failed with status code: {response.status_code}'}
def convert_json_to_structured_csv(response_from_github_api, csv_filename):
fieldnames = ['Issue Title', 'Description', 'Created At', 'Comments']
with open(csv_filename, 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
try:
for issue_data in response_from_github_api:
issue_title = issue_data.get('title', '')
description = issue_data.get('body', '')
created_at = issue_data.get('created_at', '')
comments = issue_data.get('comments', '')
writer.writerow({
'Issue Title': issue_title,
'Description': description,
'Created At': created_at,
'Comments': comments
})
return {"success": True, "csv_data": f"{csv_filename}"}
except Exception as e:
return {"success": False, "error": f"{e}"}
def get_issues_csv(repo_url, csv_file_name):
list_of_github_issues = generate_issues_json(repo_url)
print(list_of_github_issues)
if list_of_github_issues["success"]:
print(type(list_of_github_issues["data"]))
generate_issues_csv = convert_json_to_structured_csv(list_of_github_issues["data"], csv_file_name)
print(generate_issues_csv)
if generate_issues_csv["success"]:
return {"success": True, "csv_data": f"{csv_file_name}"}
else:
return {"success": False}
else:
return {"success": False}
def convert_repo_url_to_git_api_url(github_repo_url):
parts = github_repo_url.strip("/").split("/")
owner, repo = parts[-2], parts[-1]
api_url = f"https://api.github.com/repos/{owner}/{repo}/issues"
return api_url