From 897fa64177c663f03acfc49a2a2a626cc1b1ddab Mon Sep 17 00:00:00 2001 From: huangjien Date: Sun, 5 May 2024 14:30:33 +0100 Subject: [PATCH 1/2] update packages --- package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d05b7ba..f7a5129 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "jenkins-log-reader", "displayName": "jenkins-log-reader", "description": "read jenkins log, analyse with local AI.", - "version": "0.1.3", + "version": "0.1.4", "engines": { - "vscode": "^1.88.0" + "vscode": "^1.89.0" }, "main": "./extension.js", "author": "huangjien ", @@ -119,11 +119,11 @@ }, "devDependencies": { "@types/mocha": "^10.0.6", - "@types/node": "18.x", - "@types/vscode": "^1.88.0", - "@vscode/test-cli": "^0.0.8", + "@types/node": "^20.12.8", + "@types/vscode": "^1.89.0", + "@vscode/test-cli": "^0.0.9", "@vscode/test-electron": "^2.3.9", - "eslint": "^8.57.0", + "eslint": "^9.2.0", "prettier": "^3.2.5", "ts-loader": "^9.5.1", "typescript": "^5.4.5", @@ -134,7 +134,7 @@ "axios": "^1.6.8", "crypto": "^1.0.1", "husky": "^9.0.11", - "openai": "^4.40.0", + "openai": "^4.40.2", "showdown": "^2.1.0" } } From 49275f20b531e5331867a895a98f58d16bb99638 Mon Sep 17 00:00:00 2001 From: huangjien Date: Sun, 5 May 2024 16:15:44 +0100 Subject: [PATCH 2/2] finalise v0.1 --- extension.js | 29 +++++++++++++++++++---------- package.json | 8 ++++++-- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/extension.js b/extension.js index 7eae90d..29c3dbb 100644 --- a/extension.js +++ b/extension.js @@ -5,7 +5,7 @@ const vscode = require('vscode'); const axios = require('axios'); const OpenAI = require('openai') -const Showdown = require('showdown') +const marked = require('marked') async function fetchJenkinsLog(jobUrl, username, apiToken) { const auth = Buffer.from(`${username}:${apiToken}`).toString('base64'); @@ -39,8 +39,6 @@ function activate(context) { 'jenkins-log-reader.readJenkinsLog', async () => { - const converter = new Showdown.Converter(); - // You could prompt the user for these or use configuration settings const logSize = getConfig('jenkins-log-reader.jenkinsLogSize'); @@ -94,10 +92,10 @@ function activate(context) { 'Jenkins Log', vscode.ViewColumn.One ); - panel.webview.html = `
${jobUrl}
${escapeHtml(info)}

`; + panel.webview.html = `
Jenkins Job Build: ${jobUrl}
${escapeHtml(info)}

`; const promptString = prompt.replace('$PROMPT$', info); // analyse with local AI - const longRunTask = aiAnalyse(localAi, model, promptString, panel, converter, temperature, maxToken); + const longRunTask = aiAnalyse(localAi, model, promptString, panel, temperature, maxToken); showStatusBarProgress(longRunTask); } }).catch((err) => { @@ -112,6 +110,16 @@ function activate(context) { context.subscriptions.push(disposable); } +function removePrefixUsingRegex(text, prefix) { + // Create a dynamic regex based on the prefix + let regex = new RegExp("^" + escapeRegex(prefix)); + return text.replace(regex, ''); +} + +function escapeRegex(string) { + return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); // Escapes regex special characters +} + function getConfig(config_key) { return vscode.workspace .getConfiguration() @@ -132,7 +140,7 @@ function showStatusBarProgress(task) { } -async function aiAnalyse(localAi, model, promptString, panel, converter, temperature, maxToken) { +async function aiAnalyse(localAi, model, promptString, panel, temperature, maxToken) { await localAi.chat.completions.create({ model: model, messages: [{ role: 'assistant', content: promptString }], @@ -143,10 +151,11 @@ async function aiAnalyse(localAi, model, promptString, panel, converter, tempera }).then(data => { const evalContent = JSON.parse(data); console.log(evalContent) - const infomation = evalContent.choices[0]['message']['content']; - console.log(infomation); - const html = converter.makeHtml(infomation); - panel.webview.html = `
` + panel.webview.html + `
${model}
${html}
`; + const information = evalContent.choices[0]['message']['content']; + console.log(information); + const html = marked.parse(removePrefixUsingRegex(information, '```')) + + panel.webview.html = `
` + panel.webview.html + `
AI Analysis (Model: ${model})
${html}
`; }).catch((err) => { vscode.window.showErrorMessage(err.message); }); diff --git a/package.json b/package.json index f7a5129..650c4ce 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "jenkins-log-reader", "displayName": "jenkins-log-reader", "description": "read jenkins log, analyse with local AI.", - "version": "0.1.4", + "version": "0.1.5", "engines": { "vscode": "^1.89.0" }, @@ -134,7 +134,11 @@ "axios": "^1.6.8", "crypto": "^1.0.1", "husky": "^9.0.11", + "marked": "^12.0.2", "openai": "^4.40.2", - "showdown": "^2.1.0" + "react-markdown": "^9.0.1", + "rehype-highlight": "^7.0.0", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.0" } }