-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmulti_asi_scenario.py
More file actions
122 lines (96 loc) · 3.62 KB
/
multi_asi_scenario.py
File metadata and controls
122 lines (96 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# multi_asi_scenario.py
import argparse
import sqlite3
import uuid
import json
import os
from datetime import datetime, timezone
from multi_asi_ollama_client import generate_multi_asi_narrative
from multi_asi_database import save_multi_asi_scenario
def get_db_path():
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_dir, "data", "asi_scenarios.db")
def fetch_asi_scenarios(num_asis=5):
db_path = get_db_path()
if not os.path.exists(db_path):
raise FileNotFoundError(f"Database not found at: {db_path}")
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute("SELECT id, title, data FROM scenarios ORDER BY RANDOM() LIMIT ?", (num_asis,))
rows = cursor.fetchall()
if not rows:
raise ValueError("No ASI scenarios found in the database.")
asis = []
for idx, row in enumerate(rows):
scenario_id, title, scenario_json = row
try:
scenario_data = json.loads(scenario_json)
except json.JSONDecodeError:
print(f"⚠️ Skipping malformed JSON for scenario ID: {scenario_id}")
continue
asi_id = f"asi-{idx + 1}"
core = {
"origin": scenario_data.get("origin", {}),
"architecture": scenario_data.get("architecture", {}),
"oversight_structure": scenario_data.get("impact_and_control", {}).get("oversight_structure", "unknown"),
"agency_level": scenario_data.get("core_capabilities", {}).get("agency_level"),
"autonomy_degree": scenario_data.get("core_capabilities", {}).get("autonomy_degree"),
"alignment_score": scenario_data.get("core_capabilities", {}).get("alignment_score"),
"goal": scenario_data.get("goals_and_behavior", {}).get("stated_goal"),
}
asis.append({
"id": asi_id,
"scenario_id": scenario_id,
"title": title,
"core_parameters": core
})
conn.close()
if len(asis) < num_asis:
print(f"⚠️ Only {len(asis)} scenarios were available.")
return asis
def create_multi_asi_scenario(num_asis=5):
asis = fetch_asi_scenarios(num_asis=num_asis)
overall_title = " vs ".join(asi["title"] for asi in asis)
narrative = generate_multi_asi_narrative(overall_title, asis)
scenario_id = str(uuid.uuid4())
timestamp = datetime.now(timezone.utc).isoformat()
scenario = {
"id": scenario_id,
"title": overall_title,
"metadata": {
"created": timestamp,
"last_updated": timestamp,
"version": 1,
"source": "composed"
},
"asis": asis,
"scenario_content": {
"title": overall_title,
"narrative": narrative,
"timeline": {
"phase_1": {
"years": "1970–2100",
"description": "Interaction phase between ASIs"
}
}
},
"observations": {
"cooperation_level": "uncertain",
"conflict_potential": "moderate",
"intervention_requirements": "TBD"
}
}
save_multi_asi_scenario(scenario)
print(f"✅ Multi-ASI scenario '{overall_title}' saved.")
def main():
parser = argparse.ArgumentParser(description="Generate multi-ASI speculative scenario.")
parser.add_argument(
'-n', '--num-asis',
type=int,
default=5,
help='Number of ASI scenarios to combine (default: 5)'
)
args = parser.parse_args()
create_multi_asi_scenario(num_asis=args.num_asis)
if __name__ == "__main__":
main()