You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I performed machine translation on a batch of text content to the target language "en" and encountered significant translation errors.
The errors occurred when the cache was used and returned incorrect translation content.
I investigated the request and response logs with Azure OpenAI, and the returned translation content was normal.
However, the cached content changed multiple times.
The final saved entry, context=NoName///briefing_page\text\2640, source: "<align="center">你已做出了选择", target: "Go to the market and sell the treasure for weapons!"
----log----
celery-translate stderr | [2024-12-26 00:39:05,902: WARNING/ForkPoolWorker-3] save translation, key: NoName///briefing_page\text\2640, source: "<align="center">你已做出了选择。", target: ['Go to the market and sell the treasure for weapons!']
----log----
During the 28th batch translation, the NoName///briefing_page\text\2640 entry was included in the translation batch and hit the cache, with the cached content being:
[Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal].
The target returned by azureopenai, in the 36th batch translation, from azure openai's response, had the context [NoName///briefing_option\text\160].
I've searched for similar filed issues in this repository.
Steps to reproduce the behavior
There are several hundred translation texts, and some entries are duplicated. When translating in different batches, previously translated entries will be matched in the cache.
Expected behavior
No response
Screenshots
celery-translate stderr | [2024-12-26 00:29:41,393: WARNING/ForkPoolWorker-1] @@@@@@ Service:Azure OpenAI, Progress: 28/38 batches (20), 73.68%, mode suggest, threshold 90, filter: all, batch start @@@@@@
celery-translate stderr | [2024-12-26 00:29:41,393: WARNING/ForkPoolWorker-1] 批量机翻:service:Azure OpenAI, 项目:dev/综合剧情 Substory Test,组件:dev,源语言: zh_Hans,目标语言: en, 操作人:mail
celery-translate stderr | [2024-12-26 00:29:41,394: WARNING/ForkPoolWorker-1] batch_translate, Sources for translation: count=20, [('把全部资金变卖为晶萃', <Unit: 123984: [NoName///briefing_option\text\1591] 把全部资金变卖为晶萃>), ('骨骼清奇', <Unit: 123788: [NoName///briefing_page\title\2545] 骨骼清奇>), ('你的选择是?', <Unit: 124033: [NoName///briefing_page\text\2718] 你的选择是?>), ('贝拉冒险团,出发!', <Unit: 124365: [NoName///online_contract_activity_bubble_tip\text\2] 贝拉冒险团,出发!>), ('你的选择是?', <Unit: 123921: [NoName///briefing_page\text\2648] 你的选择是?>), ('<align="center">你已做出了选择。', <Unit: 124260: [NoName///briefing_page\text\2873] <align="center">你已做出了选择。>), ('<align="center">你已做出了选择。', <Unit: 123728: [NoName///briefing_page\text\2552] <align="center">你已做出了选择。>), ('<align="center">你已做出了选择。', <Unit: 124231: [NoName///briefing_page\text\2855] <align="center">你已做出了选择。>), ('<align="center">你已做出了选择。', <Unit: 124057: [NoName///briefing_page\text\2755] <align="center">你已做出了选择。>), ('<align="center">你已做出了选择。', <Unit: 123907: [NoName///briefing_page\text\2640] <align="center">你已做出了选择。>), ('邂逅之日', <Unit: 123706: [NoName///briefing_page\title\2488] 邂逅之日>), ('败了败了', <Unit: 124215: [NoName///briefing\name\834] 败了败了>), ('这才是光辉的剑的办事风格!', <Unit: 124127: [NoName///briefing_option\text\1637] 这才是光辉的剑的办事风格!>), ('镇民们的礼物', <Unit: 123721: [NoName///briefing_page\title\2549] 镇民们的礼物>), ('<align="center">你已做出了选择。', <Unit: 123978: [NoName///briefing_page\text\2681] <align="center">你已做出了选择。>), ('<align="center">你已做出了选择。', <Unit: 123844: [NoName///briefing_page\text\2604] <align="center">你已做出了选择。>), ('你的选择是?', <Unit: 124108: [NoName///briefing_page\text\2778] 你的选择是?>), ('勇者征程', <Unit: 124319: [NoName///sandbox_chapter\name\198] 勇者征程>), ('选择“把钱给我吐出来!”:<color=#dc961c>获得大量资金</color>\n\n选择“把之前的盔甲还回来!”:<color=#dc961c>获得史诗级武器</color>', <Unit: 123894: [NoName///briefing_page\text\2632] 选择“把钱给我吐出来!”:<color=#dc961c>获得大量资金</color>
celery-translate stderr |
celery-translate stderr | 选择“把之前的盔甲还回来!”:<color=#dc961c>获得史诗级武器</color>>), ('冒险模式抉择', <Unit: 123847: [NoName///briefing_page\title\2606] 冒险模式抉择>)]
celery-translate stderr | [2024-12-26 00:29:41,401: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2718: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-3621384252120235424, [{'text': 'That power...', 'quality': 90, 'service': 'Azure OpenAI', 'source': '那份力量……', 'original_source': '那份力量……'}]
celery-translate stderr | [2024-12-26 00:29:41,405: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2648: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-3621384252120235424, [{'text': 'That power...', 'quality': 90, 'service': 'Azure OpenAI', 'source': '那份力量……', 'original_source': '那份力量……'}]
celery-translate stderr | [2024-12-26 00:29:41,407: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2873: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon</color>\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>', 'original_source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>'}]
celery-translate stderr | [2024-12-26 00:29:41,409: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2552: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon</color>\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>', 'original_source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>'}]
celery-translate stderr | [2024-12-26 00:29:41,411: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2855: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon</color>\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>', 'original_source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>'}]
celery-translate stderr | [2024-12-26 00:29:41,413: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2755: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon</color>\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>', 'original_source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>'}]
celery-translate stderr | [2024-12-26 00:29:41,415: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2640: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon</color>\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>', 'original_source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>'}]
celery-translate stderr | [2024-12-26 00:29:41,425: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2681: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon</color>\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>', 'original_source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>'}]
celery-translate stderr | [2024-12-26 00:29:41,427: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2604: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon</color>\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>', 'original_source': '选择“和河流来一把交易”:<color=#5fa1c0>缴纳中量金币,获得精英级武器</color>\n选择“这纯粹是拿钱去打水漂”:<color=#5fa1c0>将放弃交易</color>'}]
celery-translate stderr | [2024-12-26 00:29:41,429: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2778: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-3621384252120235424, [{'text': 'That power...', 'quality': 90, 'service': 'Azure OpenAI', 'source': '那份力量……', 'original_source': '那份力量……'}]
celery-translate stderr | [2024-12-26 00:29:41,478: WARNING/ForkPoolWorker-1] openai translate request: [{'role': 'system', 'content': "\nYou are a highly skilled translation assistant, adept at translating text\nfrom language 'zh_Hans'\nto language 'en'\nwith precision and nuance.\n\n\nYou always reply with translated string only.\nYou do not include transliteration.\n\nYou receive an input as strings separated by \n==WEBLATE_PART==\n and\nyour answer separates strings by \n==WEBLATE_PART==\n.\n\n\n\nUse the following glossary during the translation:\n晶萃\tEssence\n贝拉\tBeryl\n铃兰\tConvallaria\n光辉的剑\tSword of Convallaria\n史诗\tEpic\n大量\tPlenty\n武器\tWeapon\n抉择\tDecision\n\n"}, {'role': 'user', 'content': '把全部资金变卖为晶萃\n==WEBLATE_PART==\n骨骼清奇\n==WEBLATE_PART==\n贝拉冒险团,出发!\n==WEBLATE_PART==\n邂逅之日\n==WEBLATE_PART==\n败了败了\n==WEBLATE_PART==\n这才是光辉的剑的办事风格!\n==WEBLATE_PART==\n镇民们的礼物\n==WEBLATE_PART==\n勇者征程\n==WEBLATE_PART==\n选择“把钱给我吐出来!”:<color=#dc961c>获得大量资金</color>\n\n选择“把之前的盔甲还回来!”:<color=#dc961c>获得史诗级武器</color>\n==WEBLATE_PART==\n冒险模式抉择'}]
celery-translate stderr | [2024-12-26 00:29:43,297: INFO/ForkPoolWorker-1] HTTP Request: POST https://8888/gpt-4o/chat/completions?api-version=2024-06-01 "HTTP/1.1 200 OK"
celery-translate stderr | [2024-12-26 00:29:43,298: WARNING/ForkPoolWorker-1] openai translate response: ChatCompletion(id='chatcmpl-AiOYPmk20L1XqKqoF8ZOotUg3soXW', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='Convert all funds into Essence\n==WEBLATE_PART==\nUnusual bones\n==WEBLATE_PART==\nBeryl Adventure Team, let\'s go!\n==WEBLATE_PART==\nDay of Encounter\n==WEBLATE_PART==\nDefeated, defeated\n==WEBLATE_PART==\nThis is the style of Sword of Convallaria!\n==WEBLATE_PART==\nGifts from the townspeople\n==WEBLATE_PART==\nHero\'s Journey\n==WEBLATE_PART==\nChoose "Spit out the money!": <color=#dc961c>Gain Plenty of funds</color>\n\nChoose "Return the previous armor!": <color=#dc961c>Gain an Epic Weapon</color>\n==WEBLATE_PART==\nAdventure Mode Decision', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None), content_filter_results={'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}})], created=1735144181, model='gpt-4o-2024-05-13', object='chat.completion', service_tier=None, system_fingerprint='fp_04751d0b65', usage=CompletionUsage(completion_tokens=152, prompt_tokens=319, total_tokens=471, completion_tokens_details=None, prompt_tokens_details=None), prompt_filter_results=[{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}])
celery-translate stderr | [2024-12-26 00:29:43,299: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'Convert all funds into Essence', 'quality': 90, 'service': 'Azure OpenAI', 'source': '把全部资金变卖为晶萃', 'original_source': '把全部资金变卖为晶萃'}]
celery-translate stderr | [2024-12-26 00:29:43,299: WARNING/ForkPoolWorker-1] Updated output for 把全部资金变卖为晶萃
celery-translate stderr | [2024-12-26 00:29:43,299: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'Unusual bones', 'quality': 90, 'service': 'Azure OpenAI', 'source': '骨骼清奇', 'original_source': '骨骼清奇'}]
celery-translate stderr | [2024-12-26 00:29:43,299: WARNING/ForkPoolWorker-1] Updated output for 骨骼清奇
celery-translate stderr | [2024-12-26 00:29:43,300: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': "Beryl Adventure Team, let's go!", 'quality': 90, 'service': 'Azure OpenAI', 'source': '贝拉冒险团,出发!', 'original_source': '贝拉冒险团,出发!'}]
celery-translate stderr | [2024-12-26 00:29:43,300: WARNING/ForkPoolWorker-1] Updated output for 贝拉冒险团,出发!
celery-translate stderr | [2024-12-26 00:29:43,300: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'Day of Encounter', 'quality': 90, 'service': 'Azure OpenAI', 'source': '邂逅之日', 'original_source': '邂逅之日'}]
celery-translate stderr | [2024-12-26 00:29:43,300: WARNING/ForkPoolWorker-1] Updated output for 邂逅之日
celery-translate stderr | [2024-12-26 00:29:43,300: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'Defeated, defeated', 'quality': 90, 'service': 'Azure OpenAI', 'source': '败了败了', 'original_source': '败了败了'}]
celery-translate stderr | [2024-12-26 00:29:43,300: WARNING/ForkPoolWorker-1] Updated output for 败了败了
celery-translate stderr | [2024-12-26 00:29:43,301: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'This is the style of Sword of Convallaria!', 'quality': 90, 'service': 'Azure OpenAI', 'source': '这才是光辉的剑的办事风格!', 'original_source': '这才是光辉的剑的办事风格!'}]
celery-translate stderr | [2024-12-26 00:29:43,301: WARNING/ForkPoolWorker-1] Updated output for 这才是光辉的剑的办事风格!
celery-translate stderr | [2024-12-26 00:29:43,301: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'Gifts from the townspeople', 'quality': 90, 'service': 'Azure OpenAI', 'source': '镇民们的礼物', 'original_source': '镇民们的礼物'}]
celery-translate stderr | [2024-12-26 00:29:43,301: WARNING/ForkPoolWorker-1] Updated output for 镇民们的礼物
celery-translate stderr | [2024-12-26 00:29:43,301: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': "Hero's Journey", 'quality': 90, 'service': 'Azure OpenAI', 'source': '勇者征程', 'original_source': '勇者征程'}]
celery-translate stderr | [2024-12-26 00:29:43,301: WARNING/ForkPoolWorker-1] Updated output for 勇者征程
celery-translate stderr | [2024-12-26 00:29:43,301: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'Choose "Spit out the money!": <color=#dc961c>Gain Plenty of funds</color>\n\nChoose "Return the previous armor!": <color=#dc961c>Gain an Epic Weapon</color>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '选择“把钱给我吐出来!”:<color=#dc961c>获得大量资金</color>\n\n选择“把之前的盔甲还回来!”:<color=#dc961c>获得史诗级武器</color>', 'original_source': '选择“把钱给我吐出来!”:<color=#dc961c>获得大量资金</color>\n\n选择“把之前的盔甲还回来!”:<color=#dc961c>获得史诗级武器</color>'}]
celery-translate stderr | [2024-12-26 00:29:43,302: WARNING/ForkPoolWorker-1] Updated output for 选择“把钱给我吐出来!”:<color=#dc961c>获得大量资金</color>
celery-translate stderr |
celery-translate stderr | 选择“把之前的盔甲还回来!”:<color=#dc961c>获得史诗级武器</color>
celery-translate stderr | [2024-12-26 00:29:43,302: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-6419663524647134187 [{'text': 'Adventure Mode Decision', 'quality': 90, 'service': 'Azure OpenAI', 'source': '冒险模式抉择', 'original_source': '冒险模式抉择'}]
celery-translate stderr | [2024-12-26 00:29:43,303: WARNING/ForkPoolWorker-1] Updated output for 冒险模式抉择
celery-translate stderr | [2024-12-26 00:29:43,304: WARNING/ForkPoolWorker-1] @@@@@@ Service:Azure OpenAI, Progress: 28/38 batches (20), 73.68%, batch complete @@@@@@
...........
celery-translate stderr | [2024-12-26 00:30:25,612: WARNING/ForkPoolWorker-1] @@@@@@ Service:Azure OpenAI, Progress: 36/38 batches (20), 94.74%, mode suggest, threshold 90, filter: all, batch start @@@@@@
celery-translate stderr | [2024-12-26 00:30:25,612: WARNING/ForkPoolWorker-1] 批量机翻:service:Azure OpenAI, 项目:dev/综合剧情 Substory Test,组件:dev,源语言: zh_Hans,目标语言: en, 操作人:mail
celery-translate stderr | [2024-12-26 00:30:25,613: WARNING/ForkPoolWorker-1] batch_translate, Sources for translation: count=20, [('交出那把武器来吧', <Unit: 123887: [NoName///briefing_option\text\1567] 交出那把武器来吧>), ('“那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”', <Unit: 124414: [NoName///online_contract_activity_bubble_tip\text\53] “那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”>), ('我才是更懂的那个人!', <Unit: 124212: [NoName///briefing_option\text\1655] 我才是更懂的那个人!>), ('桥牌', <Unit: 123942: [NoName///briefing\name\802] 桥牌>), ('<size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。\n</color></size><size=22>\n\n选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>', <Unit: 124088: [NoName///briefing_page\text\2747] <size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。
celery-translate stderr | </color></size><size=22>
celery-translate stderr |
celery-translate stderr | 选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>>), ('<align="center">你已做出了选择。', <Unit: 124145: [NoName///briefing_page\text\2801] <align="center">你已做出了选择。>), ('你的选择是?', <Unit: 123764: [NoName///briefing_page\text\2569] 你的选择是?>), ('我的朋友,要和我一起切磋剑术吗?', <Unit: 124312: [NoName///online_pattern_dialogue\line\1381] 我的朋友,要和我一起切磋剑术吗?>), ('小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”', <Unit: 124105: [NoName///briefing_page\text\2775] 小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”>), ('<size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>\n\n选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>', <Unit: 124183: [NoName///briefing_page\text\2826] <size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>
celery-translate stderr |
celery-translate stderr | 选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>>), ('光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。', <Unit: 123892: [NoName///briefing_page\text\2631] 光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。>), ('恶狼机', <Unit: 123808: [NoName///briefing_page\title\2585] 恶狼机>), ('猛猛抽', <Unit: 124197: [NoName///briefing\name\832] 猛猛抽>), ('下次再多拿点晶萃!', <Unit: 124142: [NoName///briefing_option\text\1640] 下次再多拿点晶萃!>), ('历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。', <Unit: 124324: [NoName///sandbox_ending\desc\39] 历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。>), ('镇民们的礼物', <Unit: 123720: [NoName///briefing\name\775] 镇民们的礼物>), ('你的选择是?', <Unit: 124000: [NoName///briefing_page\text\2760] 你的选择是?>), ('去市场把宝藏转卖成武器吧!', <Unit: 124018: [NoName///briefing_option\text\1601] 去市场把宝藏转卖成武器吧!>), ('你的选择是?', <Unit: 123782: [NoName///briefing_page\text\2543] 你的选择是?>), ('<align="center">你已做出了选择。', <Unit: 123776: [NoName///briefing_page\text\2574] <align="center">你已做出了选择。>)]
celery-translate stderr | [2024-12-26 00:30:25,625: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2801: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Gambling ruins lives', 'quality': 90, 'service': 'Azure OpenAI', 'source': '赌博害人不浅', 'original_source': '赌博害人不浅'}]
celery-translate stderr | [2024-12-26 00:30:25,627: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2569: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-3621384252120235424, [{'text': 'Give up being human', 'quality': 90, 'service': 'Azure OpenAI', 'source': '放弃为人', 'original_source': '放弃为人'}]
celery-translate stderr | [2024-12-26 00:30:25,651: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2760: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-3621384252120235424, [{'text': 'Give up being human', 'quality': 90, 'service': 'Azure OpenAI', 'source': '放弃为人', 'original_source': '放弃为人'}]
celery-translate stderr | [2024-12-26 00:30:25,655: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2543: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-3621384252120235424, [{'text': 'Give up being human', 'quality': 90, 'service': 'Azure OpenAI', 'source': '放弃为人', 'original_source': '放弃为人'}]
celery-translate stderr | [2024-12-26 00:30:25,658: WARNING/ForkPoolWorker-1] Cache hit for NoName///briefing_page\text\2574: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899, [{'text': 'Gambling ruins lives', 'quality': 90, 'service': 'Azure OpenAI', 'source': '赌博害人不浅', 'original_source': '赌博害人不浅'}]
celery-translate stderr | [2024-12-26 00:30:25,749: WARNING/ForkPoolWorker-1] openai translate request: [{'role': 'system', 'content': "\nYou are a highly skilled translation assistant, adept at translating text\nfrom language 'zh_Hans'\nto language 'en'\nwith precision and nuance.\n\n\nYou always reply with translated string only.\nYou do not include transliteration.\n\nYou receive an input as strings separated by \n==WEBLATE_PART==\n and\nyour answer separates strings by \n==WEBLATE_PART==\n.\n\n\n\nUse the following glossary during the translation:\n武器\tWeapon\n佣兵\tmercenary\n史诗\tEpic\n埃拉曼\tElaman\n大量\tPlenty\n晶萃\tEssence\n小镇\tTown\n需求\tDemand\n中量\tSome\n铃兰\tConvallaria\n光辉的剑\tSword of Convallaria\n传说\tLegendary\n\n"}, {'role': 'user', 'content': '交出那把武器来吧\n==WEBLATE_PART==\n“那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”\n==WEBLATE_PART==\n我才是更懂的那个人!\n==WEBLATE_PART==\n桥牌\n==WEBLATE_PART==\n<size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。\n</color></size><size=22>\n\n选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>\n==WEBLATE_PART==\n我的朋友,要和我一起切磋剑术吗?\n==WEBLATE_PART==\n小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”\n==WEBLATE_PART==\n<size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>\n\n选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>\n==WEBLATE_PART==\n光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。\n==WEBLATE_PART==\n恶狼机\n==WEBLATE_PART==\n猛猛抽\n==WEBLATE_PART==\n下次再多拿点晶萃!\n==WEBLATE_PART==\n历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。\n==WEBLATE_PART==\n镇民们的礼物\n==WEBLATE_PART==\n去市场把宝藏转卖成武器吧!'}]
celery-translate stderr | [2024-12-26 00:30:32,990: WARNING/ForkPoolWorker-1] openai translate response: ChatCompletion(id='chatcmpl-AiOZ7eRdRNxdJgNRvpIGhADvnUpa6', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='Hand over that weapon.\n==WEBLATE_PART==\n"Then listen to me obediently, drink this potion, and you will survive."\n==WEBLATE_PART==\nI am the one who understands better!\n==WEBLATE_PART==\nBridge\n==WEBLATE_PART==\n<size=22>Choose "I only teach proper business practices.": Elaman mercenary captain learns business skills and pays you tuition, <color=#dc961c>receiving plenty of Essence.</color></size><size=22>\n\nChoose "Principles, principles! Always principles!": Teach Elaman captain to return to the right path and learn disciplined mercenary concepts, <color=#dc961c>receiving Epic training.</color></size>\n==WEBLATE_PART==\nMy friend, would you like to spar with me?\n==WEBLATE_PART==\nThe owner of the town\'s snack shop is troubled because the budget is tight this year, making it difficult to introduce new products to meet customer demand, so he seeks your advice. Mercenary Piro suggests, "Why not repackage last year\'s snacks and call them remastered editions? See, that way we can make money!"\n==WEBLATE_PART==\n<size=22>Choose "Now all the treasure is mine!": <color=#dc961c>Receive some funds, some Essence, and an Epic weapon</color></size><size=22>\n\nChoose "Use loopholes to tackle loopholes!": <color=#dc961c>Receive some funds, some Essence, and Epic training</color></size>\n==WEBLATE_PART==\nThe Sword of Convallaria recently purchased a batch of armor from an armor merchant. The armor was well-made, and the mercenaries were satisfied. However, not long after, the armor merchant came back asking the mercenaries to temporarily return the armor. When the mercenaries got the armor back after some time, they clearly felt it was lighter. When questioned, the armor merchant calmly replied, "Don\'t worry, it\'s a technical adjustment. We have a new batch of armor coming out, and if we don\'t adjust the old armor, no one will buy the new ones!" The mercenaries were furious.\n==WEBLATE_PART==\nWolf Machine\n==WEBLATE_PART==\nFierce Draw\n==WEBLATE_PART==\nNext time, bring more Essence!\n==WEBLATE_PART==\nAfter overcoming many hardships, you finally completed a legend of your own, and the title of hero is well-deserved.\n==WEBLATE_PART==\nGifts from the townspeople\n==WEBLATE_PART==\nGo to the market and sell the treasure for weapons!', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None), content_filter_results={'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}})], created=1735144225, model='gpt-4o-2024-05-13', object='chat.completion', service_tier=None, system_fingerprint='fp_04751d0b65', usage=CompletionUsage(completion_tokens=541, prompt_tokens=801, total_tokens=1342, completion_tokens_details=None, prompt_tokens_details=None), prompt_filter_results=[{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}])
celery-translate stderr | [2024-12-26 00:30:32,991: WARNING/ForkPoolWorker-1] Fetched translations: count=15, defaultdict(<class 'list'>, {'交出那把武器来吧': [{'text': 'Hand over that weapon.', 'quality': 90, 'service': 'Azure OpenAI', 'source': '交出那把武器来吧'}], '“那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”': [{'text': '"Then listen to me obediently, drink this potion, and you will survive."', 'quality': 90, 'service': 'Azure OpenAI', 'source': '“那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”'}], '我才是更懂的那个人!': [{'text': 'I am the one who understands better!', 'quality': 90, 'service': 'Azure OpenAI', 'source': '我才是更懂的那个人!'}], '桥牌': [{'text': 'Bridge', 'quality': 90, 'service': 'Azure OpenAI', 'source': '桥牌'}], '<size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。\n</color></size><size=22>\n\n选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>': [{'text': '<size=22>Choose "I only teach proper business practices.": Elaman mercenary captain learns business skills and pays you tuition, <color=#dc961c>receiving plenty of Essence.</color></size><size=22>\n\nChoose "Principles, principles! Always principles!": Teach Elaman captain to return to the right path and learn disciplined mercenary concepts, <color=#dc961c>receiving Epic training.</color></size>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '<size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。\n</color></size><size=22>\n\n选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>'}], '我的朋友,要和我一起切磋剑术吗?': [{'text': 'My friend, would you like to spar with me?', 'quality': 90, 'service': 'Azure OpenAI', 'source': '我的朋友,要和我一起切磋剑术吗?'}], '小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”': [{'text': 'The owner of the town\'s snack shop is troubled because the budget is tight this year, making it difficult to introduce new products to meet customer demand, so he seeks your advice. Mercenary Piro suggests, "Why not repackage last year\'s snacks and call them remastered editions? See, that way we can make money!"', 'quality': 90, 'service': 'Azure OpenAI', 'source': '小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”'}], '<size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>\n\n选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>': [{'text': '<size=22>Choose "Now all the treasure is mine!": <color=#dc961c>Receive some funds, some Essence, and an Epic weapon</color></size><size=22>\n\nChoose "Use loopholes to tackle loopholes!": <color=#dc961c>Receive some funds, some Essence, and Epic training</color></size>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '<size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>\n\n选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>'}], '光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。': [{'text': 'The Sword of Convallaria recently purchased a batch of armor from an armor merchant. The armor was well-made, and the mercenaries were satisfied. However, not long after, the armor merchant came back asking the mercenaries to temporarily return the armor. When the mercenaries got the armor back after some time, they clearly felt it was lighter. When questioned, the armor merchant calmly replied, "Don\'t worry, it\'s a technical adjustment. We have a new batch of armor coming out, and if we don\'t adjust the old armor, no one will buy the new ones!" The mercenaries were furious.', 'quality': 90, 'service': 'Azure OpenAI', 'source': '光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。'}], '恶狼机': [{'text': 'Wolf Machine', 'quality': 90, 'service': 'Azure OpenAI', 'source': '恶狼机'}], '猛猛抽': [{'text': 'Fierce Draw', 'quality': 90, 'service': 'Azure OpenAI', 'source': '猛猛抽'}], '下次再多拿点晶萃!': [{'text': 'Next time, bring more Essence!', 'quality': 90, 'service': 'Azure OpenAI', 'source': '下次再多拿点晶萃!'}], '历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。': [{'text': 'After overcoming many hardships, you finally completed a legend of your own, and the title of hero is well-deserved.', 'quality': 90, 'service': 'Azure OpenAI', 'source': '历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。'}], '镇民们的礼物': [{'text': 'Gifts from the townspeople', 'quality': 90, 'service': 'Azure OpenAI', 'source': '镇民们的礼物'}], '去市场把宝藏转卖成武器吧!': [{'text': 'Go to the market and sell the treasure for weapons!', 'quality': 90, 'service': 'Azure OpenAI', 'source': '去市场把宝藏转卖成武器吧!'}]})
celery-translate stderr | [2024-12-26 00:30:32,991: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'Hand over that weapon.', 'quality': 90, 'service': 'Azure OpenAI', 'source': '交出那把武器来吧', 'original_source': '交出那把武器来吧'}]
celery-translate stderr | [2024-12-26 00:30:32,991: WARNING/ForkPoolWorker-1] Updated output for 交出那把武器来吧
celery-translate stderr | [2024-12-26 00:30:32,991: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': '"Then listen to me obediently, drink this potion, and you will survive."', 'quality': 90, 'service': 'Azure OpenAI', 'source': '“那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”', 'original_source': '“那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”'}]
celery-translate stderr | [2024-12-26 00:30:32,991: WARNING/ForkPoolWorker-1] Updated output for “那就乖乖听我的话哦,喝下这瓶魔药,你就能活下来。”
celery-translate stderr | [2024-12-26 00:30:32,992: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'I am the one who understands better!', 'quality': 90, 'service': 'Azure OpenAI', 'source': '我才是更懂的那个人!', 'original_source': '我才是更懂的那个人!'}]
celery-translate stderr | [2024-12-26 00:30:32,992: WARNING/ForkPoolWorker-1] Updated output for 我才是更懂的那个人!
celery-translate stderr | [2024-12-26 00:30:32,992: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'Bridge', 'quality': 90, 'service': 'Azure OpenAI', 'source': '桥牌', 'original_source': '桥牌'}]
celery-translate stderr | [2024-12-26 00:30:32,992: WARNING/ForkPoolWorker-1] Updated output for 桥牌
celery-translate stderr | [2024-12-26 00:30:32,992: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': '<size=22>Choose "I only teach proper business practices.": Elaman mercenary captain learns business skills and pays you tuition, <color=#dc961c>receiving plenty of Essence.</color></size><size=22>\n\nChoose "Principles, principles! Always principles!": Teach Elaman captain to return to the right path and learn disciplined mercenary concepts, <color=#dc961c>receiving Epic training.</color></size>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '<size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。\n</color></size><size=22>\n\n选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>', 'original_source': '<size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。\n</color></size><size=22>\n\n选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>'}]
celery-translate stderr | [2024-12-26 00:30:32,992: WARNING/ForkPoolWorker-1] Updated output for <size=22>选择“我只教正常的经营之道。”:埃拉曼佣兵队长习得经营之术,并向你缴纳学费,<color=#dc961c>获得大量晶萃。
celery-translate stderr | </color></size><size=22>
celery-translate stderr |
celery-translate stderr | 选择“原则,原则!还是原则!”教埃拉曼队长重归正道,学习纪律化的佣兵理念,<color=#dc961c>获得史诗级特训。</color></size>
celery-translate stderr | [2024-12-26 00:30:32,993: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'My friend, would you like to spar with me?', 'quality': 90, 'service': 'Azure OpenAI', 'source': '我的朋友,要和我一起切磋剑术吗?', 'original_source': '我的朋友,要和我一起切磋剑术吗?'}]
celery-translate stderr | [2024-12-26 00:30:32,993: WARNING/ForkPoolWorker-1] Updated output for 我的朋友,要和我一起切磋剑术吗?
celery-translate stderr | [2024-12-26 00:30:32,993: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'The owner of the town\'s snack shop is troubled because the budget is tight this year, making it difficult to introduce new products to meet customer demand, so he seeks your advice. Mercenary Piro suggests, "Why not repackage last year\'s snacks and call them remastered editions? See, that way we can make money!"', 'quality': 90, 'service': 'Azure OpenAI', 'source': '小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”', 'original_source': '小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”'}]
celery-translate stderr | [2024-12-26 00:30:32,993: WARNING/ForkPoolWorker-1] Updated output for 小镇的小吃店老板正在犯愁,因为今年预算吃紧,店里很难出新品去满足顾客的新需求,于是向你寻求建议。佣兵皮罗道出了自己的想法:“不如把去年的小吃重新包装一下,就叫重制版!你看,这不就能卖钱了吗!”
celery-translate stderr | [2024-12-26 00:30:32,993: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': '<size=22>Choose "Now all the treasure is mine!": <color=#dc961c>Receive some funds, some Essence, and an Epic weapon</color></size><size=22>\n\nChoose "Use loopholes to tackle loopholes!": <color=#dc961c>Receive some funds, some Essence, and Epic training</color></size>', 'quality': 90, 'service': 'Azure OpenAI', 'source': '<size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>\n\n选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>', 'original_source': '<size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>\n\n选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>'}]
celery-translate stderr | [2024-12-26 00:30:32,993: WARNING/ForkPoolWorker-1] Updated output for <size=22>选择“这下宝藏都是我的了!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级武器</color></size><size=22>
celery-translate stderr |
celery-translate stderr | 选择“用漏洞来攻克漏洞!”:<color=#dc961c>获得中量资金,中量晶萃与史诗级特训</color></size>
celery-translate stderr | [2024-12-26 00:30:32,993: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'The Sword of Convallaria recently purchased a batch of armor from an armor merchant. The armor was well-made, and the mercenaries were satisfied. However, not long after, the armor merchant came back asking the mercenaries to temporarily return the armor. When the mercenaries got the armor back after some time, they clearly felt it was lighter. When questioned, the armor merchant calmly replied, "Don\'t worry, it\'s a technical adjustment. We have a new batch of armor coming out, and if we don\'t adjust the old armor, no one will buy the new ones!" The mercenaries were furious.', 'quality': 90, 'service': 'Azure OpenAI', 'source': '光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。', 'original_source': '光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。'}]
celery-translate stderr | [2024-12-26 00:30:32,994: WARNING/ForkPoolWorker-1] Updated output for 光辉的剑最近刚从一名盔甲商那里购置了一批盔甲,盔甲做工还算精良,佣兵们也很满意。结果没过多久,盔甲贩子却过来让佣兵们把盔甲暂时还给他,等一段时间后佣兵们重新拿回这些盔甲时,明显感觉到它们缺斤少两。你们去质问盔甲商,盔甲商却不慌不忙地回复:“不要慌,这是技术性调整。我们有新的一批盔甲要上架了,不给老的盔甲调整一下的话,我这些新盔甲没人买啊!”佣兵们对此愤怒不已。
celery-translate stderr | [2024-12-26 00:30:32,994: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'Wolf Machine', 'quality': 90, 'service': 'Azure OpenAI', 'source': '恶狼机', 'original_source': '恶狼机'}]
celery-translate stderr | [2024-12-26 00:30:32,994: WARNING/ForkPoolWorker-1] Updated output for 恶狼机
celery-translate stderr | [2024-12-26 00:30:32,994: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'Fierce Draw', 'quality': 90, 'service': 'Azure OpenAI', 'source': '猛猛抽', 'original_source': '猛猛抽'}]
celery-translate stderr | [2024-12-26 00:30:32,994: WARNING/ForkPoolWorker-1] Updated output for 猛猛抽
celery-translate stderr | [2024-12-26 00:30:32,994: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'Next time, bring more Essence!', 'quality': 90, 'service': 'Azure OpenAI', 'source': '下次再多拿点晶萃!', 'original_source': '下次再多拿点晶萃!'}]
celery-translate stderr | [2024-12-26 00:30:32,994: WARNING/ForkPoolWorker-1] Updated output for 下次再多拿点晶萃!
celery-translate stderr | [2024-12-26 00:30:32,995: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'After overcoming many hardships, you finally completed a legend of your own, and the title of hero is well-deserved.', 'quality': 90, 'service': 'Azure OpenAI', 'source': '历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。', 'original_source': '历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。'}]
celery-translate stderr | [2024-12-26 00:30:32,995: WARNING/ForkPoolWorker-1] Updated output for 历尽艰险,你终于完成了一段独属于自己的传说,勇者称号早已当之无愧。
celery-translate stderr | [2024-12-26 00:30:32,995: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'Gifts from the townspeople', 'quality': 90, 'service': 'Azure OpenAI', 'source': '镇民们的礼物', 'original_source': '镇民们的礼物'}]
celery-translate stderr | [2024-12-26 00:30:32,995: WARNING/ForkPoolWorker-1] Updated output for 镇民们的礼物
celery-translate stderr | [2024-12-26 00:30:32,995: WARNING/ForkPoolWorker-1] Cache key: mt:azure-openai:translation:14859137436611818400:zh_Hans:en:90:-2638444168408357899 [{'text': 'Go to the market and sell the treasure for weapons!', 'quality': 90, 'service': 'Azure OpenAI', 'source': '去市场把宝藏转卖成武器吧!', 'original_source': '去市场把宝藏转卖成武器吧!'}]
celery-translate stderr | [2024-12-26 00:30:32,995: WARNING/ForkPoolWorker-1] Updated output for 去市场把宝藏转卖成武器吧!
celery-translate stderr | [2024-12-26 00:30:32,996: WARNING/ForkPoolWorker-1] @@@@@@ Service:Azure OpenAI, Progress: 36/38 batches (20), 94.74%, batch complete @@@@@@
.................
celery-translate stderr | [2024-12-26 00:39:05,862: WARNING/ForkPoolWorker-3] save translation ,key:NoName///briefing\name\794, source:这是你吗, target:['Is that you']
celery-translate stderr | [2024-12-26 00:39:05,902: WARNING/ForkPoolWorker-3] save translation ,key:NoName///briefing_page\text\2640, source:<align="center">你已做出了选择。, target:['Go to the market and sell the treasure for weapons!']
celery-translate stderr | [2024-12-26 00:39:05,913: WARNING/ForkPoolWorker-3] save translation ,key:NoName///briefing_page\text\2588, source:<align="center">你已做出了选择。, target:['Go to the market and sell the treasure for weapons!']
celery-translate stderr | [2024-12-26 00:39:05,923: WARNING/ForkPoolWorker-3] save translation ,key:NoName///briefing_option\text\1685, source:???, target:['???']
celery-translate stderr | [2024-12-26 00:39:05,933: WARNING/ForkPoolWorker-3] save translation ,key:NoName///briefing_page\title\2883, source:你的腿, target:['Your leg']
```
### Exception traceback
```py
def _translate(
self,
source,
language,
sources: list[tuple[str, Unit]],
user=None,
threshold: int = 75,
) -> DownloadMultipleTranslations:
output: DownloadMultipleTranslations = {}
pending = defaultdict(list)
for text, unit in sources:
original_source = text
text, replacements = self.cleanup_text(text, unit)
if not text or self.is_rate_limited():
output[original_source] = []
continue
# Try cached results
cache_key, result = self.get_cached(
unit, source, language, text, threshold, replacements
)
if result is not None:
output[original_source] = result
print(f"Cache hit for {unit.context}: {cache_key}, {result}")
continue
pending[text].append((unit, original_source, replacements))
print(f"Pending translations: count={len(pending)}, {pending}")
# Fetch pending strings to translate
if pending:
# Unit is only used in WeblateMemory and it is used only to get a project
# so it doesn't matter we potentionally flatten this.
try:
translations = self.download_multiple_translations(
source,
language,
[
(text, occurrences[0][0])
for text, occurrences in pending.items()
],
user,
threshold,
)
except Exception as exc:
if self.is_rate_limit_error(exc):
self.set_rate_limit()
self.report_error("Could not fetch translations")
if isinstance(exc, MachineTranslationError):
raise
raise MachineTranslationError(self.get_error_message(exc)) from exc
print(f"Fetched translations: count={len(translations)}, {translations}")
# Postprocess translations
for text, result in translations.items():
for _unit, original_source, replacements in pending[text]:
# Always operate on copy of the dictionaries
partial = [x.copy() for x in result]
for item in partial:
item["original_source"] = original_source
if cache_key:
cache.set(cache_key, partial, 30 * 86400)
print(f"Cache key: {cache_key} {partial}")
if replacements or self.force_uncleanup:
self.uncleanup_results(replacements, partial)
output[original_source] = partial
print(f"Updated output for {original_source}")
return output
```
### How do you run Weblate?
Docker container
### Weblate versions
5.5.5, 5.9.2
### Weblate deploy checks
_No response_
### Additional context
![image](https://github.com/user-attachments/assets/f3b71e3a-3d94-4a4c-8c14-e91e499a9f0f)
![image](https://github.com/user-attachments/assets/52bbaf69-35c5-409c-b4ed-406dd9f52361)
The text was updated successfully, but these errors were encountered:
Describe the issue
I performed machine translation on a batch of text content to the target language "en" and encountered significant translation errors.
The errors occurred when the cache was used and returned incorrect translation content.
I investigated the request and response logs with Azure OpenAI, and the returned translation content was normal.
However, the cached content changed multiple times.
The final saved entry, context=NoName///briefing_page\text\2640, source: "<align="center">你已做出了选择", target: "Go to the market and sell the treasure for weapons!"
During the 28th batch translation, the NoName///briefing_page\text\2640 entry was included in the translation batch and hit the cache, with the cached content being:
[Choose "Make a deal with the river":<color=#5fa1c0>Pay some gold, receive a rare weapon\nChoose "This is just throwing money away":<color=#5fa1c0>Will abandon the deal].
The target returned by azureopenai, in the 36th batch translation, from azure openai's response, had the context [NoName///briefing_option\text\160].
Here is a portion of the log:
I already tried
Steps to reproduce the behavior
There are several hundred translation texts, and some entries are duplicated. When translating in different batches, previously translated entries will be matched in the cache.
Expected behavior
No response
Screenshots
The text was updated successfully, but these errors were encountered: