Adding basic_messenger for PoCs with other Speech Services

This commit is contained in:
Peter Morton 2025-04-25 15:25:24 -05:00
parent 909cb4b77d
commit 40487089c7

View File

@ -0,0 +1,119 @@
console.log(">>> basic_messenger >>>");
console.log({ query: req.query, body: req.body });
console.log(">>> basic_messenger >>>");
let sessionId = req.body.previous_response_id || `resp_${uuidv4()}`;
const input = req.body.input;
const modelName =
req.body.model || settings_667ef98d3ee8930a5debcbdb.nlu.modelName;
const metadata = {
...req.body.metadata,
userId: req.body.sentBy?.userId,
};
const postBack = req.body.postBack;
const configuration = req.body.event?.configuration;
(async () => {
try {
const smStr = `session-map-${sessionId}`;
const sessionMap = await redis.hGetAll(smStr);
console.log({ smStr: smStr, sessionMap: sessionMap });
const recognizedData = await axios
.post(
`${settings_667ef98d3ee8930a5debcbdb.nlu.apiBaseURL}Model/run/${req.params.workspaceId}/${req.params.branch}/${modelName}`,
{
input: input,
conversationId: sessionMap.conversationId,
settings: settings_667ef98d3ee8930a5debcbdb.nlu.settings,
metadata: metadata,
postBack: postBack,
configuration: configuration,
}
)
.then((response) => {
return response.data;
})
.catch((error) => {
let errorPayload = {
id: `resp_${uuidv4()}`,
object: "response",
status: "failed",
model: modelName,
created_at: Math.floor(Date.now() / 1000),
error: {
name: error.name,
message: error.message,
},
};
return errorPayload;
});
console.log({
rdCi: recognizedData.conversationId,
sessionMap: sessionMap,
});
if (recognizedData.conversationId) {
await redis.hSet(smStr, "conversationId", recognizedData.conversationId);
await redis.expire(smStr, 3600);
if (sessionMap.conversationId) {
} else {
db.analytics.addConversation({
id: recognizedData.conversationId,
});
}
}
// NOTE: Additonal logic could be used to provide answer from alternative sources
// recognizedData.answers = API_RESPONSE || ['Example'];
if (recognizedData.tag === "ERROR") {
} else if (
recognizedData.classificationResults.length === 0 &&
recognizedData.answers.length === 0
) {
recognizedData.answers = [
settings_667ef98d3ee8930a5debcbdb.responses.unrecognized,
];
} else if (recognizedData.answers.length === 0) {
recognizedData.answers = [
settings_667ef98d3ee8930a5debcbdb.responses.unanswered,
];
}
recognizedData._id = (
await db.analytics.addTransaction(recognizedData)
).insertedId;
// Concatenate the array of strings into a single string
const text = recognizedData.answers.join(" ");
const response = {
id: sessionId,
object: "response",
created_at: Math.floor(Date.now() / 1000),
status: "completed",
model: modelName,
output: [
{
type: "message",
id: `msg_${uuidv4()}`,
role: "assistant",
content: [
{
type: "output_text",
text: text,
annotations: [],
},
],
},
],
};
res.send(response);
} catch (error) {
console.log(error.message);
res.send({
answers: ["Something went wrong. Please try again."],
outputs: {},
});
}
})();