Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 40 additions & 11 deletions src/translate/index.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,45 @@
/* eslint-disable strict */
//var request = require('request');

const translatorApi = module.exports;

translatorApi.translate = function (postData) {
return ['is_english',postData];
};
translatorApi.translate = async function (postData) {
const TRANSLATOR_API = 'http://crs-17313-nodegpt-gpu.qatar.cmu.edu/translate';

try {
const response = await fetch(TRANSLATOR_API, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
content: postData.content.toString(),
}),
});

if (!response.ok) {
console.error('Translator API responded with status:', response.status);
// Fail gracefully so NodeBB keeps working
return [true, ''];
}

const data = await response.json();

// translatorApi.translate = async function (postData) {
// Edit the translator URL below
// const TRANSLATOR_API = "TODO"
// const response = await fetch(TRANSLATOR_API+'/?content='+postData.content);
// const data = await response.json();
// return ['is_english','translated_content'];
// };
const isEnglish = !!data.is_english;
const translated = data.translated_content || '';

// Attach fields for debugging / templates
postData.is_english = isEnglish;
postData.isEnglish = isEnglish; // camelCase version
postData.translated_content = translated;
postData.translatedContent = translated; // camelCase version

console.log('LLM translate debug:', {
original: postData.content,
isEnglish,
translated,
});

return [isEnglish, translated];
} catch (err) {
console.error('Translator fetch failed:', err);
return [true, ''];
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -80,17 +80,19 @@
</div>
</div>

<div class="content text-break" component="post/content" itemprop="text">
{posts.content}
{{{if !posts.isEnglish }}}
<div class="sensitive-content-message">
<a class="btn btn-sm btn-primary view-translated-btn">Click here to view the translated message.</a>
</div>
<div class="translated-content" style="display:none;">
{posts.translatedContent}
</div>
{{{end}}}
</div>
<div class="content text-break" component="post/content" itemprop="text">
{posts.content}
{{{ if !posts.isEnglish }}}
<div class="alert alert-info mt-2">
<strong>Translated message:</strong>
<span class="translated-content">
{posts.translatedContent}
</span>
</div>
{{{ end }}}
</div>



<!-- IMPORT partials/topic/post-poll.tpl -->

Expand Down