Skip to content

Commit d49f4e1

Browse files
committed
1.7 update
1 parent 0232146 commit d49f4e1

File tree

5 files changed

+187
-8
lines changed

5 files changed

+187
-8
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ This application is a simple yet powerful web tool for translating .srt subtitle
1616

1717
## Version History
1818

19+
### Version 1.7 (2025-05-22)
20+
- **New OpenRouter Model**: Added a new OpenRouter model to expand translation options:
21+
- **openrouter.ai: Qwen3 235B A22B** (free)
22+
- **Improved OpenAI Models Usage**: OpenAI ChatGPT-4o mini and ChatGPT-4o models can now be used directly from OpenAI API servers again.
23+
1924
### Version 1.6 (2025-04-27)
2025
- **Batch Mode for LM Studio**: Added Special Large Context Translation Mode (batch mode) for LM Studio, allowing for translation of 30 lines at once, significantly improving translation quality and speed
2126
- **Updated OpenRouter Models**:
@@ -284,6 +289,11 @@ Ez az alkalmazás egy egyszerű, de hatékony webes eszköz .srt formátumú fel
284289

285290
## Verzió történet
286291

292+
### 1.7-es verzió (2025-05-22)
293+
**Új OpenRouter modell**: Egy új OpenRouter modell hozzáadása a fordítási lehetőségek bővítéséhez:
294+
- **openrouter.ai: Qwen3 235B A22B** (ingyenes)
295+
- **Javított OpenAI modellek használata**: Az OpenAI ChatGPT-4o mini és ChatGPT-4o modellek újból használhatóak közvetlenül az OpenAi API szervereiről.
296+
287297
### 1.6-os verzió (2025-04-27)
288298
- **Batch mód az LM Studio számára**: Speciális nagy kontextusú fordítási mód (batch mód) hozzáadása az LM Studio számára, amely lehetővé teszi 30 sor egyszerre történő fordítását, jelentősen javítva a fordítás minőségét és sebességét
289299
- **Frissített OpenRouter modellek**:

index.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<div class="container py-4">
1515
<header class="pb-3 mb-4 border-bottom border-secondary">
1616
<div class="d-flex justify-content-between align-items-center">
17-
<h1 class="display-5 fw-bold text-primary"><i class="bi bi-translate me-2"></i>SRT Felirat Fordító <small class="fs-6 text-secondary">version 1.6</small></h1>
17+
<h1 class="display-5 fw-bold text-primary"><i class="bi bi-translate me-2"></i>SRT Felirat Fordító <small class="fs-6 text-secondary">version 1.7</small></h1>
1818

1919
<!-- Nyelvválasztó gomb -->
2020
<div class="dropdown">
@@ -108,6 +108,7 @@ <h5 class="card-title mb-3">Fordítás módja</h5>
108108
<option value="openrouter_llama_70b">openrouter.ai: Llama 3.1 70B Instruct</option>
109109
<option value="openrouter_nemotron_ultra">openrouter.ai: NVIDIA: Llama 3.1 Nemotron Ultra 253B v1 (free)</option>
110110
<option value="openrouter_gpt4o_mini">openrouter.ai: GPT-41-mini</option>
111+
<option value="openrouter_qwen3_235b">openrouter.ai: Qwen3 235B A22B (free)</option>
111112
</select>
112113
</div>
113114
<div class="form-check form-switch d-none mb-3 d-flex justify-content-start align-items-center" id="batchModeContainer">

js/Changelang.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ function updateUiTexts(translations) {
121121
// Főcím
122122
const mainTitle = document.querySelector('h1.display-5');
123123
if (mainTitle) {
124-
mainTitle.innerHTML = `<i class="bi bi-translate me-2"></i>${translations.appTitle} <small class="fs-6 text-secondary">version 1.6</small>`;
124+
mainTitle.innerHTML = `<i class="bi bi-translate me-2"></i>${translations.appTitle} <small class="fs-6 text-secondary">version 1.7</small>`;
125125
}
126126

127127
// Kártya címek

js/script.js

Lines changed: 90 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,18 @@ document.addEventListener('DOMContentLoaded', function() {
178178
savedTranslationMode === 'chatgpt_4o_mini' ||
179179
savedTranslationMode === 'chatgpt_4o' ||
180180
savedTranslationMode === 'openrouter_gemma_27b' ||
181-
savedTranslationMode === 'openrouter_gemini_flash')) {
181+
savedTranslationMode === 'openrouter_gemini_flash' ||
182+
savedTranslationMode === 'openrouter_gpt4o_mini' ||
183+
savedTranslationMode === 'openrouter_qwen3_235b' ||
184+
savedTranslationMode === 'openrouter_deepseek_r1' ||
185+
savedTranslationMode === 'openrouter_gemini_pro' ||
186+
savedTranslationMode === 'openrouter_deepseek_v3' ||
187+
savedTranslationMode === 'openrouter_llama_70b' ||
188+
savedTranslationMode === 'openrouter_nemotron_ultra' )) {
182189
translationModeSelect.value = savedTranslationMode;
183190

184191
// Ha a Gemini Flash mód van elmentve, akkor megjelenítjük a batch mód konténert
185-
if (savedTranslationMode === 'openrouter_gemini_flash' || savedTranslationMode === 'chatgpt_4o_mini' || savedTranslationMode === 'chatgpt_4o') {
192+
if (savedTranslationMode === 'openrouter_gemini_flash' || savedTranslationMode === 'chatgpt_4o_mini' || savedTranslationMode === 'chatgpt_4o' || savedTranslationMode === 'openrouter_qwen3_235b' || savedTranslationMode === 'openrouter_deepseek_r1' || savedTranslationMode === 'openrouter_gemini_pro' || savedTranslationMode === 'openrouter_deepseek_v3' || savedTranslationMode === 'openrouter_llama_70b' || savedTranslationMode === 'openrouter_nemotron_ultra' || savedTranslationMode === 'openrouter_gpt4o_mini' ) {
186193
const batchModeContainer = document.getElementById('batchModeContainer');
187194
if (batchModeContainer) {
188195
batchModeContainer.classList.remove('d-none');
@@ -212,7 +219,7 @@ document.addEventListener('DOMContentLoaded', function() {
212219
apiKeyInputGroup.classList.add('d-none');
213220
showApiKeyFieldBtn.classList.remove('d-none');
214221
}
215-
} else if (savedTranslationMode === 'openrouter_gemma_27b' || savedTranslationMode === 'openrouter_gemini_flash') {
222+
} else if (savedTranslationMode === 'openrouter_gemma_27b' || savedTranslationMode === 'openrouter_gemini_flash' || savedTranslationMode === 'openrouter_qwen3_235b' || savedTranslationMode === 'openrouter_deepseek_r1' || savedTranslationMode === 'openrouter_gemini_pro' || savedTranslationMode === 'openrouter_deepseek_v3' || savedTranslationMode === 'openrouter_llama_70b' || savedTranslationMode === 'openrouter_nemotron_ultra' || savedTranslationMode === 'openrouter_gpt4o_mini') {
216223
apiKeyContainer.classList.remove('d-none');
217224

218225
// Mentett OpenRouter API kulcs betöltése
@@ -252,7 +259,7 @@ document.addEventListener('DOMContentLoaded', function() {
252259
if (selectedMode === 'chatgpt_4o_mini' || selectedMode === 'chatgpt_4o') {
253260
saveApiKey(apiKeyInput.value);
254261
console.log('ChatGPT API kulcs titkosítva elmentve a localStorage-ba');
255-
} else if (selectedMode === 'openrouter_gemma_27b' || selectedMode === 'openrouter_gemini_flash') {
262+
} else if (selectedMode === 'openrouter_gemma_27b' || selectedMode === 'openrouter_gemini_flash' || selectedMode === 'openrouter_qwen3_235b' || selectedMode === 'openrouter_deepseek_r1' || selectedMode === 'openrouter_gemini_pro' || selectedMode === 'openrouter_deepseek_v3' || selectedMode === 'openrouter_llama_70b' || selectedMode === 'openrouter_nemotron_ultra' || selectedMode === 'openrouter_gpt4o_mini') {
256263
saveOpenRouterApiKey(apiKeyInput.value);
257264
console.log('OpenRouter API kulcs titkosítva elmentve a localStorage-ba');
258265
}
@@ -1009,7 +1016,8 @@ document.addEventListener('DOMContentLoaded', function() {
10091016
selectedMode === 'openrouter_deepseek_v3' ||
10101017
selectedMode === 'openrouter_llama_70b' ||
10111018
selectedMode === 'openrouter_nemotron_ultra' ||
1012-
selectedMode === 'openrouter_gpt4o_mini') {
1019+
selectedMode === 'openrouter_gpt4o_mini' ||
1020+
selectedMode === 'openrouter_qwen3_235b') {
10131021
// Ellenőrizzük, hogy a kötegelt mód be van-e kapcsolva
10141022
const batchModeCheckbox = document.getElementById('batchModeCheckbox');
10151023

@@ -1200,6 +1208,81 @@ document.addEventListener('DOMContentLoaded', function() {
12001208
}
12011209
}
12021210

1211+
// Segédfüggvény a ChatGPT API-val történő fordításhoz egyedi rendszerüzenettel
1212+
async function translateWithChatGptCustomPrompt(text, systemPrompt, apiKey, model = 'gpt-4o-mini', temperature = 0.7) {
1213+
// Maximum 3 újrapróbálkozás
1214+
const MAX_RETRIES = 3;
1215+
let retryCount = 0;
1216+
let success = false;
1217+
let result = '';
1218+
1219+
while (!success && retryCount < MAX_RETRIES) {
1220+
try {
1221+
// API kérés előkészítése
1222+
const response = await fetch('https://api.openai.com/v1/chat/completions', {
1223+
method: 'POST',
1224+
headers: {
1225+
'Content-Type': 'application/json',
1226+
'Authorization': `Bearer ${apiKey}`
1227+
},
1228+
body: JSON.stringify({
1229+
model: model,
1230+
messages: [
1231+
{
1232+
role: 'system',
1233+
content: systemPrompt
1234+
},
1235+
{
1236+
role: 'user',
1237+
content: text
1238+
}
1239+
],
1240+
temperature: temperature
1241+
})
1242+
});
1243+
1244+
// Válasz feldolgozása
1245+
const data = await response.json();
1246+
1247+
// Hiba ellenőrzése
1248+
if (!response.ok) {
1249+
const errorMessage = data.error?.message || 'Unknown error';
1250+
console.error(`ChatGPT API hiba: ${errorMessage}`);
1251+
1252+
// Rate limit hiba esetén hosszabb várakozás
1253+
if (errorMessage.includes('Rate limit') || response.status === 429) {
1254+
await new Promise(resolve => setTimeout(resolve, 5000)); // 5 másodperc várakozás
1255+
}
1256+
1257+
throw new Error(errorMessage);
1258+
}
1259+
1260+
// Sikeres válasz feldolgozása
1261+
if (data.choices && data.choices.length > 0) {
1262+
result = data.choices[0].message.content.trim();
1263+
success = true;
1264+
} else {
1265+
throw new Error('No translation result returned');
1266+
}
1267+
} catch (error) {
1268+
console.error(`Hiba a ChatGPT fordítás során (${retryCount + 1}/${MAX_RETRIES}):`, error);
1269+
retryCount++;
1270+
1271+
// Várakozás újrapróbálkozás előtt (exponenciális backoff)
1272+
if (retryCount < MAX_RETRIES) {
1273+
const waitTime = Math.pow(2, retryCount) * 1000; // 2^retryCount másodperc
1274+
await new Promise(resolve => setTimeout(resolve, waitTime));
1275+
}
1276+
}
1277+
}
1278+
1279+
if (!success) {
1280+
throw new Error('Failed to translate with ChatGPT after multiple retries');
1281+
}
1282+
1283+
return result;
1284+
}
1285+
12031286
// Segédfüggvény a ChatGPT API-val történő fordításhoz
12041287
async function translateWithChatGpt(text, sourceLanguage, targetLanguage, apiKey, model = 'gpt-4o-mini', temperature = 0.7) {
12051288
// A rendszerüzenet összeállítása
@@ -1629,7 +1712,8 @@ function handleTranslationModeChange() {
16291712
selectedMode === 'openrouter_llama_70b' ||
16301713
selectedMode === 'openrouter_nemotron_ultra' ||
16311714
selectedMode === 'openrouter_gpt4o_mini' ||
1632-
selectedMode === 'lm_studio_local') {
1715+
selectedMode === 'lm_studio_local' ||
1716+
selectedMode === 'openrouter_qwen3_235b') {
16331717
batchModeContainer.classList.remove('d-none');
16341718

16351719
// Tooltip inicializálása a batch mód információs ikonhoz

js/translationFunctions.js

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ NE használd a "${uniqueMarker}" vagy "${endMarker}" jelöléseket a válaszodba
133133
modelId = 'nvidia/llama-3.1-nemotron-ultra-253b-v1:free';
134134
} else if (selectedMode === 'openrouter_gpt4o_mini') {
135135
modelId = 'openai/gpt-4.1-mini';
136+
} else if (selectedMode === 'openrouter_qwen3_235b') {
137+
modelId = 'qwen/qwen3-235b-a22b:free';
136138
} else {
137139
// Alapértelmezett esetben Gemma 3 27B
138140
modelId = 'google/gemma-3-27b-it:free';
@@ -1208,6 +1210,81 @@ async function translateText(text, sourceLang, targetLang, temperature, { getLan
12081210
);
12091211
}
12101212

1213+
// ChatGPT API-val történő fordítás egyedi rendszerüzenettel
1214+
async function translateWithChatGptCustomPrompt(text, systemPrompt, apiKey, model = 'gpt-4o-mini', temperature = 0.7) {
1215+
// Maximum 3 újrapróbálkozás
1216+
const MAX_RETRIES = 3;
1217+
let retryCount = 0;
1218+
let success = false;
1219+
let result = '';
1220+
1221+
while (!success && retryCount < MAX_RETRIES) {
1222+
try {
1223+
// API kérés előkészítése
1224+
const response = await fetch('https://api.openai.com/v1/chat/completions', {
1225+
method: 'POST',
1226+
headers: {
1227+
'Content-Type': 'application/json',
1228+
'Authorization': `Bearer ${apiKey}`
1229+
},
1230+
body: JSON.stringify({
1231+
model: model,
1232+
messages: [
1233+
{
1234+
role: 'system',
1235+
content: systemPrompt
1236+
},
1237+
{
1238+
role: 'user',
1239+
content: text
1240+
}
1241+
],
1242+
temperature: temperature
1243+
})
1244+
});
1245+
1246+
// Válasz feldolgozása
1247+
const data = await response.json();
1248+
1249+
// Hiba ellenőrzése
1250+
if (!response.ok) {
1251+
const errorMessage = data.error?.message || 'Unknown error';
1252+
console.error(`ChatGPT API hiba: ${errorMessage}`);
1253+
1254+
// Rate limit hiba esetén hosszabb várakozás
1255+
if (errorMessage.includes('Rate limit') || response.status === 429) {
1256+
await new Promise(resolve => setTimeout(resolve, 5000)); // 5 másodperc várakozás
1257+
}
1258+
1259+
throw new Error(errorMessage);
1260+
}
1261+
1262+
// Sikeres válasz feldolgozása
1263+
if (data.choices && data.choices.length > 0) {
1264+
result = data.choices[0].message.content.trim();
1265+
success = true;
1266+
} else {
1267+
throw new Error('No translation result returned');
1268+
}
1269+
} catch (error) {
1270+
console.error(`Hiba a ChatGPT fordítás során (${retryCount + 1}/${MAX_RETRIES}):`, error);
1271+
retryCount++;
1272+
1273+
// Várakozás újrapróbálkozás előtt (exponenciális backoff)
1274+
if (retryCount < MAX_RETRIES) {
1275+
const waitTime = Math.pow(2, retryCount) * 1000; // 2^retryCount másodperc
1276+
await new Promise(resolve => setTimeout(resolve, waitTime));
1277+
}
1278+
}
1279+
}
1280+
1281+
if (!success) {
1282+
throw new Error('Failed to translate with ChatGPT after multiple retries');
1283+
}
1284+
1285+
return result;
1286+
}
1287+
12111288
// Globális névtérben elérhetővé tesszük a függvényeket
12121289
window.retranslateSubtitle = retranslateSubtitle;
12131290
window.translateSequentially = translateSequentially;
@@ -1220,6 +1297,7 @@ window.translateTextWithContext = translateTextWithContext;
12201297
window.translateText = translateText;
12211298
window.showLoadingOverlay = showLoadingOverlay;
12221299
window.hideLoadingOverlay = hideLoadingOverlay;
1300+
window.translateWithChatGptCustomPrompt = translateWithChatGptCustomPrompt;
12231301

12241302
// Új, univerzális szekvenciális fordítás az OpenRouter API-val
12251303
async function translateSequentiallyWithOpenRouterUniversal(startIndex, sourceLanguage, targetLanguage, apiKey, temperature, modelType, {
@@ -1269,6 +1347,9 @@ async function translateSequentiallyWithOpenRouterUniversal(startIndex, sourceLa
12691347
} else if (modelType === 'openrouter_gpt4o_mini') {
12701348
modelId = 'openai/gpt-4.1-mini';
12711349
modelDisplayName = 'GPT-4.1-mini';
1350+
} else if (modelType === 'openrouter_qwen3_235b') {
1351+
modelId = 'qwen/qwen3-235b-a22b:free';
1352+
modelDisplayName = 'Qwen3 235B A22B';
12721353
} else {
12731354
// Alapértelmezett esetben Gemma 3 27B
12741355
modelId = 'google/gemma-3-27b-it:free';
@@ -1464,6 +1545,9 @@ async function translateBatchWithOpenRouterUniversal(startIndex, sourceLanguage,
14641545
} else if (modelType === 'openrouter_gpt4o_mini') {
14651546
modelId = 'openai/gpt-4.1-mini';
14661547
modelDisplayName = 'GPT-4.1-mini';
1548+
} else if (modelType === 'openrouter_qwen3_235b') {
1549+
modelId = 'qwen/qwen3-235b-a22b:free';
1550+
modelDisplayName = 'Qwen3 235B A22B';
14671551
} else {
14681552
// Alapértelmezett esetben Gemma 3 27B
14691553
modelId = 'google/gemma-3-27b-it:free';

0 commit comments

Comments
 (0)