-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.js
121 lines (81 loc) · 3.08 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const core = require('@actions/core');
const github = require('@actions/github');
const Configuration = require('openai').Configuration;
const OpenAIApi = require('openai').OpenAIApi;
const context = {
OpenAIApiKey: core.getInput('openai-api-key'),
token: core.getInput('token'),
prompt: core.getInput('prompt'),
title: github.context.payload.issue.title,
name: github.context.payload.repository.name,
description: github.context.payload.repository.description,
owner: github.context.payload.repository.full_name.split('/')[0],
repo: github.context.payload.repository.full_name.split('/')[1],
issueNumber: github.context.payload.issue.number
}
async function run(){
console.log(github.context.payload);
const openAI = setupOpenAI();
const promptMessages = generatePromptMessages();
const gptResponse = await getGPTResponse(openAI,promptMessages);
const gptIssueDesc = postProcess(gptResponse);
core.setOutput("message", gptIssueDesc);
const comment = await createDescriptionComment(gptIssueDesc);
core.info(`Created issue description (comment id '${comment.id}') on issue #'${context.issueNumber}'.`);
}
function setupOpenAI(){
const configuration = new Configuration({
apiKey: context.OpenAIApiKey
})
const openai = new OpenAIApi(configuration);
return openai;
}
function generatePromptMessages(){
let messages = [];
if(!context.prompt){
if(context.description){
messages = [{role:"user",content:`Create a github markdown description for an issue titled '${context.title}' of the github repository ${context.name} whose description is '${context.description}'`}];
}
else{
messages = [{role:"user",content:`Create a github markdown description for an issue titled '${context.title}' of the github repository ${context.name}`}];
}
}
else{
messages = [{role:"user",content:context.prompt}];
}
console.log(`Generated prompt message is: ${messages}`);
return messages;
}
async function getGPTResponse(openai, messages){
const GPTResponse = await openai.createChatCompletion({
model:'gpt-3.5-turbo',
messages,
});
return GPTResponse;
}
function postProcess(GPTResponse){
const chatGPTMessage = GPTResponse.data.choices[0];
console.log(chatGPTMessage);
let body = chatGPTMessage.message.content;
return body;
}
async function createDescriptionComment(body){
const octokit = github.getOctokit(context.token);
if (body.length > 65385) {
core.warning(`Comment body is too long. Truncating to 65385 characters.`)
body = body.substring(0, 65385)
}
body += '\n \n \n **This issue description is auto-generated by [IkarisGPT](https://https://github.com/devAyushDubey/Ikaris-GPT) 🤖.**'
const comment = await octokit.rest.issues.createComment({
owner: context.owner,
repo: context.repo,
issue_number: context.issueNumber,
body
})
return comment;
}
try {
run()
} catch (error) {
core.setFailed(error.message);
}