introduce prompt translation (yandex translate)
This commit is contained in:
parent
e3cb75e152
commit
3a67c0ce65
|
@ -1,9 +1,10 @@
|
||||||
{
|
{
|
||||||
"name": "fooocos3",
|
"name": "fooocos-telegram-bot",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
|
"name": "fooocos-telegram-bot",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@grammyjs/runner": "^2.0.3",
|
"@grammyjs/runner": "^2.0.3",
|
||||||
"@grammyjs/transformer-throttler": "^1.2.1",
|
"@grammyjs/transformer-throttler": "^1.2.1",
|
||||||
|
|
|
@ -30,4 +30,4 @@
|
||||||
"pino": "^8.16.2",
|
"pino": "^8.16.2",
|
||||||
"pino-pretty": "^10.2.3"
|
"pino-pretty": "^10.2.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
src/bot.ts
14
src/bot.ts
|
@ -1,5 +1,6 @@
|
||||||
import { logger } from "#root/logger.js";
|
import { logger } from "#root/logger.js";
|
||||||
import { predict } from "#root/predict.js";
|
import { predict } from "#root/predict.js";
|
||||||
|
import { Language, translate } from "#root/translate.js";
|
||||||
import { downloadImage, isFooocosAlive, uploadPhoto } from "#root/utils.js";
|
import { downloadImage, isFooocosAlive, uploadPhoto } from "#root/utils.js";
|
||||||
import { apiThrottler } from "@grammyjs/transformer-throttler";
|
import { apiThrottler } from "@grammyjs/transformer-throttler";
|
||||||
import { Bot, Context, InlineKeyboard, InlineQueryResultBuilder, InputMediaBuilder } from "grammy";
|
import { Bot, Context, InlineKeyboard, InlineQueryResultBuilder, InputMediaBuilder } from "grammy";
|
||||||
|
@ -56,7 +57,18 @@ async function handleChosenInlineResult(ctx: Context) {
|
||||||
|
|
||||||
activeTasks.set(userId, true);
|
activeTasks.set(userId, true);
|
||||||
|
|
||||||
const gen = predict(prompt);
|
let translatedPrompt;
|
||||||
|
|
||||||
|
try {
|
||||||
|
translatedPrompt = await translate(prompt, Language.en, Language.auto);
|
||||||
|
} catch (err) {
|
||||||
|
logger.warn(err, "prompt translation error");
|
||||||
|
translatedPrompt = prompt;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.trace({ prompt, translatedPrompt });
|
||||||
|
|
||||||
|
const gen = predict(translatedPrompt);
|
||||||
|
|
||||||
for await (const state of gen) {
|
for await (const state of gen) {
|
||||||
if (state.status === "RUNNING") {
|
if (state.status === "RUNNING") {
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
import { randomUUID } from 'crypto';
|
||||||
|
|
||||||
|
// https://yandex.com/dev/translate/doc/en/concepts/api-overview
|
||||||
|
export enum Language {
|
||||||
|
auto = '',
|
||||||
|
zh_cn = 'zh',
|
||||||
|
zh_tw = 'zh',
|
||||||
|
en = 'en',
|
||||||
|
ja = 'ja',
|
||||||
|
ko = 'ko',
|
||||||
|
fr = 'fr',
|
||||||
|
es = 'es',
|
||||||
|
ru = 'ru',
|
||||||
|
de = 'de',
|
||||||
|
it = 'it',
|
||||||
|
tr = 'tr',
|
||||||
|
pt_pt = 'pt',
|
||||||
|
pt_br = 'pt',
|
||||||
|
vi = 'vi',
|
||||||
|
id = 'id',
|
||||||
|
th = 'th',
|
||||||
|
ms = 'ms',
|
||||||
|
ar = 'ar',
|
||||||
|
hi = 'hi',
|
||||||
|
nb_no = 'no',
|
||||||
|
nn_no = 'no',
|
||||||
|
fa = 'fa',
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function translate(text: string, to: Language, from: Language) {
|
||||||
|
const url = 'https://translate.yandex.net/api/v1/tr.json/translate';
|
||||||
|
const query = new URLSearchParams({
|
||||||
|
id: randomUUID().replaceAll('-', '') + '-0-0',
|
||||||
|
srv: 'android',
|
||||||
|
});
|
||||||
|
|
||||||
|
const res = await fetch(`${url}?${query}`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
|
},
|
||||||
|
body: new URLSearchParams({
|
||||||
|
source_lang: from,
|
||||||
|
target_lang: to,
|
||||||
|
text
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res.ok) {
|
||||||
|
const result = await res.json();
|
||||||
|
if (result.text) {
|
||||||
|
return result.text[0];
|
||||||
|
} else {
|
||||||
|
throw JSON.stringify(result);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw `Http Request Error\nHttp Status: ${res.status}\n${await res.text()}`;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue