This commit is contained in:
dazedanon 2026-03-16 10:56:15 -05:00
parent c8b9352bc0
commit f40b77e0e3
5 changed files with 92 additions and 228 deletions

10
.gitignore vendored
View file

@ -6,16 +6,16 @@
*.yml *.yml
*.txt *.txt
*.log *.log
!prompt.txt
*.rpy *.rpy
!vocab.txt
!requirements.txt
*.csv *.csv
*.ks *.ks
*.cid *.cid
*.png *.png
*.script *.script
!screens/*.png
__pycache__ __pycache__
!screens/*.png
!.pre-commit-config.yaml !.pre-commit-config.yaml
vocab.txt !prompt.txt
!vocab_base.txt
!requirements.txt

View file

@ -536,24 +536,6 @@ class ConfigTab(QWidget):
self.output_cost_spin.setFixedWidth(200) # Medium self.output_cost_spin.setFixedWidth(200) # Medium
price_form.addRow(output_label, self.output_cost_spin) price_form.addRow(output_label, self.output_cost_spin)
cache_rate_label = QLabel("Est. Cache Rate:")
cache_rate_label.setFixedWidth(150)
cache_rate_label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
cache_rate_label.setToolTip(
"Assumed prompt-cache hit rate used when estimating costs for Claude models.\n"
"0.9 = 90 % of input tokens billed at 10 % (cache read rate).\n"
"Set to 0 to disable the discount and use the full input rate."
)
self.estimate_cache_rate_spin = QDoubleSpinBox()
self.estimate_cache_rate_spin.setButtonSymbols(QDoubleSpinBox.NoButtons)
self.estimate_cache_rate_spin.setRange(0.0, 1.0)
self.estimate_cache_rate_spin.setDecimals(2)
self.estimate_cache_rate_spin.setSingleStep(0.05)
self.estimate_cache_rate_spin.setValue(0.9)
self.estimate_cache_rate_spin.setSuffix(" (Claude estimate only)")
self.estimate_cache_rate_spin.setFixedWidth(200)
price_form.addRow(cache_rate_label, self.estimate_cache_rate_spin)
right_column.addLayout(price_form) right_column.addLayout(price_form)
right_column.addStretch() right_column.addStretch()
@ -687,7 +669,6 @@ class ConfigTab(QWidget):
# Custom API pricing # Custom API pricing
self.input_cost_spin.setValue(float(_get("input_cost", "2.0"))) self.input_cost_spin.setValue(float(_get("input_cost", "2.0")))
self.output_cost_spin.setValue(float(_get("output_cost", "8.0"))) self.output_cost_spin.setValue(float(_get("output_cost", "8.0")))
self.estimate_cache_rate_spin.setValue(float(_get("ESTIMATE_CACHE_RATE", "0.9")))
def connect_auto_save(self): def connect_auto_save(self):
"""Connect all widgets to auto-save on change.""" """Connect all widgets to auto-save on change."""
@ -712,7 +693,6 @@ class ConfigTab(QWidget):
self.note_width_spin.editingFinished.connect(self.auto_save) self.note_width_spin.editingFinished.connect(self.auto_save)
self.input_cost_spin.editingFinished.connect(self.auto_save) self.input_cost_spin.editingFinished.connect(self.auto_save)
self.output_cost_spin.editingFinished.connect(self.auto_save) self.output_cost_spin.editingFinished.connect(self.auto_save)
self.estimate_cache_rate_spin.editingFinished.connect(self.auto_save)
def disconnect_auto_save(self): def disconnect_auto_save(self):
"""Disconnect all widgets from auto-save.""" """Disconnect all widgets from auto-save."""
@ -732,7 +712,6 @@ class ConfigTab(QWidget):
self.note_width_spin.editingFinished.disconnect(self.auto_save) self.note_width_spin.editingFinished.disconnect(self.auto_save)
self.input_cost_spin.editingFinished.disconnect(self.auto_save) self.input_cost_spin.editingFinished.disconnect(self.auto_save)
self.output_cost_spin.editingFinished.disconnect(self.auto_save) self.output_cost_spin.editingFinished.disconnect(self.auto_save)
self.estimate_cache_rate_spin.editingFinished.disconnect(self.auto_save)
except (TypeError, RuntimeError): except (TypeError, RuntimeError):
pass pass
@ -770,7 +749,6 @@ class ConfigTab(QWidget):
"noteWidth": str(self.note_width_spin.value()), "noteWidth": str(self.note_width_spin.value()),
"input_cost": str(self.input_cost_spin.value()), "input_cost": str(self.input_cost_spin.value()),
"output_cost": str(self.output_cost_spin.value()), "output_cost": str(self.output_cost_spin.value()),
"ESTIMATE_CACHE_RATE": str(self.estimate_cache_rate_spin.value()),
} }
# Save to .env file and update os.environ so subprocesses inherit new values # Save to .env file and update os.environ so subprocesses inherit new values
@ -838,7 +816,6 @@ class ConfigTab(QWidget):
# Custom API settings # Custom API settings
self.input_cost_spin.setValue(2.0) self.input_cost_spin.setValue(2.0)
self.output_cost_spin.setValue(8.0) self.output_cost_spin.setValue(8.0)
self.estimate_cache_rate_spin.setValue(0.9)
# Reset engine tabs # Reset engine tabs
self.mvmz_tab.reset_to_defaults() self.mvmz_tab.reset_to_defaults()

View file

@ -1,35 +0,0 @@
import json
a = json.load(open('log/ant_request_1.json', 'r', encoding='utf-8'))
b = json.load(open('log/ant_request_2.json', 'r', encoding='utf-8'))
c = json.load(open('log/ant_request_3.json', 'r', encoding='utf-8'))
print("=== Request 1 vs 2 ===")
print(f"system identical: {a['system'] == b['system']}")
print(f"messages identical: {a['messages'] == b['messages']}")
print(f"output_config identical: {a.get('output_config') == b.get('output_config')}")
print(f"model identical: {a['model'] == b['model']}")
print(f"max_tokens identical: {a['max_tokens'] == b['max_tokens']}")
print(f"temperature identical: {a['temperature'] == b['temperature']}")
# Check all top-level keys
all_keys = set(a.keys()) | set(b.keys())
for k in sorted(all_keys):
if a.get(k) != b.get(k):
print(f" DIFFERS: {k}")
if k == 'messages':
print(f" req1: {json.dumps(a[k], ensure_ascii=False)[:200]}")
print(f" req2: {json.dumps(b[k], ensure_ascii=False)[:200]}")
print("\n=== Request 1 vs 3 ===")
print(f"system identical: {a['system'] == c['system']}")
print(f"messages identical: {a['messages'] == c['messages']}")
print(f"output_config identical: {a.get('output_config') == c.get('output_config')}")
all_keys = set(a.keys()) | set(c.keys())
for k in sorted(all_keys):
if a.get(k) != c.get(k):
print(f" DIFFERS: {k}")
if k == 'output_config':
print(f" req1: {json.dumps(a.get(k), ensure_ascii=False)[:300]}")
print(f" req3: {json.dumps(c.get(k), ensure_ascii=False)[:300]}")

View file

@ -1,165 +0,0 @@
Here are some vocabulary and terms so that you know the proper spelling and translation.
# Game Characters
シルシェ (Silshe) - Female
リノ (Rino) - Female
ボロゲス (Boroges) - Male
# Lewd Terms
マンコ (pussy)
おまんこ (vagina)
尻 (ass)
お尻 (butt)
お股 (crotch)
秘部 (genitals)
チンポ (dick)
チンコ (cock)
ショーツ (panties)
イラマチオ (irrumatio)
理性 (Sanity)
性欲 (Libido)
子宮の状態 (Womb St.)
最後の相手 (Last Partner)
陰茎の長さ (Penis Length)
射精量 (Cum Amount)
絶頂回数 (Orgasms)
搾精回数 (Ejaculations)
経験人数 (Partners)
膣内射精 (Creampie)
膣外射精 (Non-Creampie)
アナル (Anal)
パイズリ (Titjob)
フェラ (Blowjob)
手コキ (Handjob)
太もも (Thighs)
素股 (Thighjob)
尻コキ (Assjob)
ぶっかけ (Cumshot)
受精 (Fertilized)
出産 (Childbirth)
子宮 (Womb)
乳揉まれ (Fondled)
尻揉まれ (Ass Groped)
乳首 (Nipples)
キス (Kiss)
衣装ごとの性行為回数 (Sex Acts per Outfit)
回 (x)
人 (x)
# Honorifics
さん (san)
様, さま (sama)
君, くん (kun)
ちゃん (chan)
たん (tan)
先輩 (senpai)
せんぱい (senpai)
先生 (sensei)
せんせい (sensei)
にいさん (nii-san)
兄さん (nii-san)
兄者 (elder brother)
お兄ちゃん (onii-san)
姉さん (nee-san)
お姉ちゃん (onee-chan)
お姉ちゃん (onee-chan)
ねえさん (nee-san)
おじさん (old man)
# Terms
初めから (Start)
逃げる (Escape)
大事なもの (Key Items)
最強装備 (Optimize)
攻撃力 (Attack)
回避率 (Evasion)
敏捷性 (Agility)
命中率 (Accuracy)
最大HP (Max HP)
経験値 (EXP)
購入する (Buy)
魔力攻撃 (M. Attack)
魔力防御 (M. Defense)
魔法力 (M. Power)
%1 の%2を獲得 (Gained %1 %2)
持っている数 (Owned)
ME 音量 (ME Volume)
回想する (Recollection)
信仰心 (Faith)
会話 (Conversation)
収集 (Collect)
討伐 (Extermination)
破滅 (Destruction)
魂 (Soul)
魄 (Spirit)
巫女 (Shrine Maiden)
刀 (Blade)
剣 (Sword)
龍神神社 (Dragon God Shrine)
忍び (Shinobi)
大魔導士 (Archmage)
始原竜 (Primordial Dragon)
猿王 (Monkey King)
天地開闢 (Genesis)
紅蓮 (Vermilion)
12月 (December)
12日 (12th)
邪気 (Miasma)
# Demons/Angels/Monsters
聖女 (Saintess)
悪魔 (Demon)
上級悪魔 (Arch Demon)
歪魔 (Distorted Demon)
魔神 (Devil)
魔人 (Demon)
睡魔 (Mare)
淫魔 (Succubus)
夢魔 (Succubus)
天使 (Angel)
大天使 (Archangel)
権天使 (Principality)
能天使 (Power)
力天使 (Virtue)
主天使 (Dominion)
智天使 (Cherub)
飛天魔 (Nephilim)
堕天使 (Fallen Angel)
鬼 (Oni)
魔 (Demon)
妖怪 (Yokai)
式神 (Shikigami)
幽霊 (Ghost)
幽鬼 (Revenant)
デーモン (Daemon)
ローパー (Roper)
人間 (Human)
人型 (Humanoid)
獣型 (Beast)
触手型 (Tentacle)
軟体型 (Slime)
虫型 (Insect)
エルフ (Elf)
竜 (Dragon)
吸血鬼 (Vampire)
ドワーフ (Dwarf)
# Elements
物理 (Physical)
吸収 (Absorption)
火 (Fire)
氷 (Ice)
雷 (Thunder)
水 (Water)
地 (Earth)
風 (Wind)
神聖 (Holy)
暗黒 (Dark)
木 (Wood)
人間 (Human)
# Other
w (lol)
2万 (20,000)
『 (『)
』 (』)

87
vocab_base.txt Normal file
View file

@ -0,0 +1,87 @@
# Honorifics
さん (san)
様, さま (sama)
君, くん (kun)
ちゃん (chan)
たん (tan)
先輩 (senpai)
せんぱい (senpai)
先生 (sensei)
せんせい (sensei)
にいさん (nii-san)
兄さん (nii-san)
兄者 (elder brother)
お兄ちゃん (onii-san)
姉さん (nee-san)
お姉ちゃん (onee-chan)
ねえさん (nee-san)
おじさん (old man)
# Terms
初めから (Start)
逃げる (Escape)
大事なもの (Key Items)
最強装備 (Optimize)
攻撃力 (Attack)
回避率 (Evasion)
敏捷性 (Agility)
命中率 (Accuracy)
最大HP (Max HP)
経験値 (EXP)
購入する (Buy)
魔力攻撃 (M. Attack)
魔力防御 (M. Defense)
魔法力 (M. Power)
%1 の%2を獲得 (Gained %1 %2)
持っている数 (Owned)
ME 音量 (ME Volume)
# Demons/Angels/Monsters
聖女 (Saintess)
悪魔 (Demon)
上級悪魔 (Arch Demon)
歪魔 (Distorted Demon)
魔神 (Devil)
魔人 (Demon)
睡魔 (Mare)
淫魔 (Succubus)
夢魔 (Succubus)
天使 (Angel)
大天使 (Archangel)
権天使 (Principality)
能天使 (Power)
力天使 (Virtue)
主天使 (Dominion)
智天使 (Cherub)
飛天魔 (Nephilim)
堕天使 (Fallen Angel)
鬼 (Oni)
妖怪 (Yokai)
式神 (Shikigami)
幽霊 (Ghost)
幽鬼 (Revenant)
デーモン (Daemon)
ローパー (Roper)
人間 (Human)
人型 (Humanoid)
獣型 (Beast)
触手型 (Tentacle)
軟体型 (Slime)
虫型 (Insect)
エルフ (Elf)
竜 (Dragon)
吸血鬼 (Vampire)
ドワーフ (Dwarf)
# Elements
物理 (Physical)
吸収 (Absorption)
火 (Fire)
氷 (Ice)
雷 (Thunder)
水 (Water)
地 (Earth)
風 (Wind)
神聖 (Holy)
暗黒 (Dark)
木 (Wood)