diff --git a/modules/rpgmakermvmz.py b/modules/rpgmakermvmz.py
index 4fc2ada..f343b20 100644
--- a/modules/rpgmakermvmz.py
+++ b/modules/rpgmakermvmz.py
@@ -32,6 +32,7 @@ NAMES = False # Output a list of all the character names found
BRFLAG = False # If the game uses
instead
FIXTEXTWRAP = True # Overwrites textwrap
IGNORETLTEXT = False # Ignores all translated text.
+MISMATCH = [] # Lists files that throw a mismatch error (Length of GPT list response is wrong)
# Pricing - Depends on the model https://openai.com/pricing
if 'gpt-3.5' in MODEL:
@@ -44,7 +45,7 @@ elif 'gpt-4' in MODEL:
# Batch Size - GPT 3.5 Struggles past 15 lines per request. GPT4 struggles past 50 lines per request
# If you are getting a MISMATCH LENGTH error, lower the batch size.
if 'gpt-3.5' in MODEL:
- BATCHSIZE = 15
+ BATCHSIZE = 10
elif 'gpt-4' in MODEL:
BATCHSIZE = 50
@@ -102,7 +103,13 @@ def handleMVMZ(filename, estimate):
TOKENS[1] += translatedData[1][1]
# Print Total
- return getResultString(['', TOKENS, None], end - start, 'TOTAL')
+ totalString = getResultString(['', TOKENS, None], end - start, 'TOTAL')
+
+ # Print any errors on maps
+ if len(MISMATCH) > 0:
+ return totalString + Fore.RED + f'\nMismatch Errors: {MISMATCH}' + Fore.RESET
+ else:
+ return totalString
def openFiles(filename):
with open('files/' + filename, 'r', encoding='utf-8-sig') as f:
@@ -223,7 +230,7 @@ def parseMap(data, filename):
totalTokens[0] += translateNoteOmitSpace(event, r'')[0]
totalTokens[1] += translateNoteOmitSpace(event, r'')[1]
- futures = [executor.submit(searchCodes, page, pbar, []) for page in event['pages'] if page is not None]
+ futures = [executor.submit(searchCodes, page, pbar, [], filename) for page in event['pages'] if page is not None]
for future in as_completed(futures):
try:
totalTokensFuture = future.result()
@@ -289,7 +296,7 @@ def parseCommonEvents(data, filename):
pbar.desc=filename
pbar.total=totalLines
with ThreadPoolExecutor(max_workers=THREADS) as executor:
- futures = [executor.submit(searchCodes, page, pbar, []) for page in data if page is not None]
+ futures = [executor.submit(searchCodes, page, pbar, [], filename) for page in data if page is not None]
for future in as_completed(futures):
try:
totalTokensFuture = future.result()
@@ -317,7 +324,7 @@ def parseTroops(data, filename):
for troop in data:
if troop is not None:
with ThreadPoolExecutor(max_workers=THREADS) as executor:
- futures = [executor.submit(searchCodes, page, pbar, []) for page in troop['pages'] if page is not None]
+ futures = [executor.submit(searchCodes, page, pbar, [], filename) for page in troop['pages'] if page is not None]
for future in as_completed(futures):
try:
totalTokensFuture = future.result()
@@ -425,7 +432,7 @@ def parseScenario(data, filename):
pbar.desc=filename
pbar.total=totalLines
with ThreadPoolExecutor(max_workers=THREADS) as executor:
- futures = [executor.submit(searchCodes, page[1], pbar, []) for page in data.items() if page[1] is not None]
+ futures = [executor.submit(searchCodes, page[1], pbar, [], filename) for page in data.items() if page[1] is not None]
for future in as_completed(futures):
try:
totalTokensFuture = future.result()
@@ -552,7 +559,7 @@ def searchNames(name, pbar, context):
return totalTokens
-def searchCodes(page, pbar, fillList):
+def searchCodes(page, pbar, fillList, filename):
docList = []
currentGroup = []
textHistory = []
@@ -1508,10 +1515,12 @@ def searchCodes(page, pbar, fillList):
totalTokens[0] += response[1][0]
totalTokens[1] += response[1][1]
if len(fillList) != len(docList):
- pbar.write('WARNING. LENGTH MISMATCH')
+ global MISMATCH
+ with LOCK:
+ MISMATCH.append(filename)
else:
docList = []
- searchCodes(page, pbar, fillList)
+ searchCodes(page, pbar, fillList, filename)
# Delete all -1 codes
codeListFinal = []
@@ -1834,19 +1843,35 @@ def batchList(input_list, batch_size):
return [input_list[i:i + batch_size] for i in range(0, len(input_list), batch_size)]
def createContext(fullPromptFlag, subbedT):
+ characters = 'Game Characters:\
+ ザラキエル == Zerachiel - Female\
+ エフィー == Effie - Female\
+ アリエス == Ariel - Female\
+ ルル == Lulu - Female\
+ クラウディア == Claudia - Female\
+ サティア == Satya - Female\
+ ラヴィ == Lavie - Female\
+ ララ == Lala - Female'
system = PROMPT if fullPromptFlag else \
f'Output ONLY the {LANGUAGE} translation in the following format: `Translation: <{LANGUAGE.upper()}_TRANSLATION>`'
user = f'Line to Translate = {subbedT}'
- return system, user
+ return characters, system, user
def translateText(subbedT, history, fullPromptFlag):
- system, user = createContext(fullPromptFlag, subbedT)
- # Creating message list
+ characters, system, user = createContext(fullPromptFlag, subbedT)
+ # Prompt
msg = [{"role": "system", "content": system}]
+
+ # Characters
+ msg.append({"role": "user", "content": characters})
+
+ # History
if isinstance(history, list):
msg.extend([{"role": "user", "content": h} for h in history])
else:
msg.append({"role": "user", "content": history})
+
+ # Content to TL
msg.append({"role": "user", "content": user})
response = openai.ChatCompletion.create(
temperature=0,