61 lines
2.0 KiB
Python
Executable File
61 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
"""
|
||
MaturityEngine – berechnet stability, dependency_bias, regression_factor
|
||
Input: age, bond_duration, conflict_history, loneliness_history
|
||
Output: maturity_output.json
|
||
"""
|
||
|
||
import json
|
||
import os
|
||
|
||
PATHS = {
|
||
"config": os.path.expanduser("~/natiris/config/character_genesis.json"),
|
||
"core_state": os.path.expanduser("~/natiris/core/core_state.json"),
|
||
"history": os.path.expanduser("~/natiris/memory/long/history.json"),
|
||
"output": os.path.expanduser("~/natiris/core/maturity_output.json"),
|
||
}
|
||
|
||
def clamp(val, lo=0.0, hi=1.0):
|
||
return max(lo, min(hi, float(val)))
|
||
|
||
def compute_maturity(config, core, history):
|
||
start_age = config.get("initial_traits", {}).get("mood", 20)
|
||
bond_started = core.get("bond_started_at")
|
||
|
||
conflict_history = history.get("conflict_history", [])
|
||
loneliness_history = history.get("loneliness_history", [2])
|
||
|
||
age = start_age + (len(conflict_history) * 0.5)
|
||
bond_duration = len([c for c in conflict_history if c]) if bond_started else 0
|
||
|
||
conflict_rate = len([c for c in conflict_history if c]) / max(len(conflict_history), 1)
|
||
avg_loneliness = sum(loneliness_history) / max(len(loneliness_history), 1)
|
||
|
||
stability_bias = clamp(age / 100 + (bond_duration * 0.01) - (conflict_rate * 0.5))
|
||
dependency_bias = clamp(0.3 + (bond_duration * 0.02) - (avg_loneliness * 0.02))
|
||
regression_factor = clamp(conflict_rate * 0.7 + (1 - age / 100) * 0.5 + (avg_loneliness * 0.05))
|
||
|
||
return {
|
||
"stability_bias": round(stability_bias, 3),
|
||
"dependency_bias": round(dependency_bias, 3),
|
||
"regression_factor": round(regression_factor, 3)
|
||
}
|
||
|
||
def main():
|
||
with open(PATHS["config"]) as f:
|
||
config = json.load(f)
|
||
with open(PATHS["core_state"]) as f:
|
||
core = json.load(f)
|
||
with open(PATHS["history"]) as f:
|
||
history = json.load(f)
|
||
|
||
result = compute_maturity(config, core, history)
|
||
|
||
with open(PATHS["output"], "w") as f:
|
||
json.dump(result, f, indent=2)
|
||
|
||
print(json.dumps(result, indent=2))
|
||
|
||
if __name__ == "__main__":
|
||
main()
|