Summary maker — A plugin using Needle
A transcript is a text copy of dictated or recorded material. A summary is a short version that presents the central ideas discussed in the transcript.
Summary Maker is a plugin which helps to generate summary using transcript files to automate extracting important points from large discussions in short time for better team performance and collaborations by leveraging Needle.
How Needle helps in summarization
Needle uses transformers and language models that empower abstractive summarizers to understand the source content and express it in novel words and phrases, similar to how humans summarize information. This allows for more flexible and fluent summaries that convey the core content in a short form.
Benefits of summary maker with Needle
· Saves time as you don’t have to read the documents yourself.
· Gives accurate answers to your questions, even if they are complex.
· Improves your understanding of documents by answering questions with AI.
· Helps to generate lists of important keys, notes, points, to-do tasks, questions, follow-up eligible meetings from larger/longer discussions.
· It can also help to create epic, stories and fill timesheet and worklog too with integrated Jira plugin, supported on Needle w/o leaving page.
Business impact:
· Helps to make important decisions quickly
· Improves collaboration without affecting focus for other priority stuff
· Saves time, resources and money for longer term
· Task completion before time
· Gives a sense of achievement
Technical content
- Architecture
· Login or signup with Needle
· Add a new project
· Start using it by click on Project: “Summary Maker”
· Dashboard of project: “Summary Maker”
· Choose Connector(s): “Amazon S3”
- Fill the required details to connect with bucket on “Amazon S3”
· Upload transcript files using code libraries
- NodeJS library
const config = require(‘./config’);
const { createFilePath, checkForAwsPathExists } = require(‘./util.aws’);
var fs = require(‘fs’);
var path = require(‘path’);
var bucketName = config.BUCKET_NAME;
const folderName = path.join(config.AWS_BASE_PATH, bucketName);
if (!fs.existsSync(folderName)) {
fs.mkdirSync(folderName)
}
const upload = (fileName, body, recordType, recordId, awsObj) => {
return new Promise(async(resolve, reject)=>{
try{
let path = createFilePath(recordType, recordId, fileName);
let isPathExists = await checkForAwsPathExists({ Bucket: bucketName, Key: path }, awsObj);
if(isPathExists){
throw new Error(‘ERR_DUPLICATE_FILE’);
}
var buffer = Buffer.from(body, ‘base64’);
var putObjectPromise = await awsObj.putObject(
{ Bucket: bucketName, Key: path, Body: buffer, ServerSideEncryption: “AES256” }
).promise();
if (putObjectPromise && putObjectPromise.$response && putObjectPromise.$response.error) {
throw new Error(“ERR_UPLOAD_FAILED”);
} else {
let uploadResponse = {
requestId: (putObjectPromise &&
putObjectPromise.$response &&
putObjectPromise.$response.requestId)
? putObjectPromise.$response.requestId : “meeting”,
path: path
}
resolve(uploadResponse);
}
} catch(error) {
reject(new Error(‘ERR_UPLOAD_FAILED’));
}
})
};
module.exports = { upload };
const config = require(‘./config’);
const {ProxyAgent} = require(‘proxy-agent’);
const path = require(‘path’);
const awsSdk = require(‘aws-sdk’);
const crypto = require(‘crypto’);
const envID = config.ENV_ID; // qat/production
const s3Pool = (params) => {
return new Promise(async (resolve, reject) => {
try {
var s3 = null;
var bucketName = config.BUCKET_NAME;
awsSdk.config.update({
“accessKeyId”: config.ACCESS_KEY,
“secretAccessKey”: config.ACCESS_SECRET,
region: “us-west-2”,
httpOptions: { agent: new ProxyAgent() }
});
s3 = new awsSdk.S3();
resolve(s3);
} catch (err) {
reject(err);
}
});
}
function createFileName(fileName) {
return `${Date.now()}_${fileName}`;
}
function createFilePath(recordType, recordId, fileName) {
let name = createFileName(fileName);
//<envID:production>/<recordType:meeting>/<recordId:20240101>/<ts:20240101010101>_<fileName:meeting.txt>
return `${envID}/${recordType}/${recordId.toUpperCase()}/${name}`;
}
/**
* check document path exist or not for AWS S3
*
* @param {object} params configuration to connect AWS S3 bucket
*/
const checkForAwsPathExists = (params,awsObj) => {
return new Promise(async (resolve) => {
try {
const listObjectsPromise = await listObjectsV2({ Bucket: params.Bucket, Prefix: params.Key.substring(0, params.Key.lastIndexOf(“/”)) }, awsObj);
const selectFile = (listObjectsPromise.Contents || []).find(r => r.Key == params.Key);
if (!selectFile) {
resolve(false);
} else {
resolve(selectFile)
}
} catch (err) {
resolve(false);
}
});
}
module.exports = {
s3Pool,
createFilePath,
createFileName,
checkForAwsPathExists
};
- Import transcript files by connect to “AWS S3 Bucket”
· Process and chat with Needle Talk encompassing the power of generative AI
- It helps to generate lists of important keys, notes, points, to-do tasks, questions, follow-up eligible meetings from larger/longer discussions.
- Additionally, you can use ‘Generate Chart’ functionality for interactive reporting to share with team members.
· With Jira Addon, you can directly create epic, stories and fill timesheet and worklog too with integrate Jira plugin supported on Needle w/o leaving page.
Conclusion
Make important decisions quickly and enhance your integrity with team, so you can complete priority stuff without losing focus.