-
Notifications
You must be signed in to change notification settings - Fork 27
/
optimus_tools.py
142 lines (120 loc) · 4.03 KB
/
optimus_tools.py
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"""
Implement different utilities with OptiMUS v0.3
"""
import os
import time
import json
import argparse
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "."))
from typing import Dict
from parameters import get_params
from constraint import get_constraints
from constraint_model import get_constraint_formulations
from target_code import get_codes
from generate_code import generate_code
from utils import load_state, save_state, Logger
from objective import get_objective
from objective_model import get_objective_formulation
from execute_code import execute_and_debug
from utils import create_state, get_labels
ERROR_CORRECTION = False
MODEL = "gpt-4o"
RAG_MODE = None
DEFAULT_LABELS = {"types": ["Mathematical Optimization"], "domains": ["Operations Management"]}
def get_intro_latex_code_map(fname) -> Dict:
"""
Extract the internal OptiMUS data structure that maps natural language, LaTeX and code
No data is required by this utility
"""
run_dir = "."
# Extract parameters from the natural language description
with open(fname, "r") as f:
desc = f.read()
f.close()
params = get_params(desc, check=True)
# Read the description
with open(fname, "r") as f:
desc = f.read()
# Construct the initial state
state = {"description": desc, "parameters": params}
save_state(state, "state_1_params.json")
logger = Logger(f"log.txt")
logger.reset()
logger = Logger(f"log.txt")
logger.reset()
# Get objective
state = load_state(os.path.join(run_dir, "state_1_params.json"))
objective = get_objective(
state["description"],
state["parameters"],
check=ERROR_CORRECTION,
logger=logger,
model=MODEL,
rag_mode=RAG_MODE,
labels=DEFAULT_LABELS,
)
print(objective)
state["objective"] = objective
save_state(state, os.path.join(run_dir, "state_2_objective.json"))
# Get constraints
state = load_state(os.path.join(run_dir, "state_2_objective.json"))
constraints = get_constraints(
state["description"],
state["parameters"],
check=ERROR_CORRECTION,
logger=logger,
model=MODEL,
rag_mode=RAG_MODE,
labels=DEFAULT_LABELS,
)
print(constraints)
state["constraints"] = constraints
save_state(state, os.path.join(run_dir, "state_3_constraints.json"))
# Get constraint formulations
state = load_state(os.path.join(run_dir, "state_3_constraints.json"))
constraints, variables = get_constraint_formulations(
state["description"],
state["parameters"],
state["constraints"],
check=ERROR_CORRECTION,
logger=logger,
model=MODEL,
rag_mode=RAG_MODE,
labels=DEFAULT_LABELS,
)
state["constraints"] = constraints
state["variables"] = variables
save_state(state, os.path.join(run_dir, "state_4_constraints_modeled.json"))
# Get objective formulation
state = load_state(os.path.join(run_dir, "state_4_constraints_modeled.json"))
objective = get_objective_formulation(
state["description"],
state["parameters"],
state["variables"],
state["objective"],
model=MODEL,
check=ERROR_CORRECTION,
rag_mode=RAG_MODE,
labels=DEFAULT_LABELS,
)
state["objective"] = objective
print("DONE OBJECTIVE FORMULATION")
save_state(state, os.path.join(run_dir, "state_5_objective_modeled.json"))
# # ####### Get codes
state = load_state(os.path.join(run_dir, "state_5_objective_modeled.json"))
constraints, objective = get_codes(
state["description"],
state["parameters"],
state["variables"],
state["constraints"],
state["objective"],
model=MODEL,
check=ERROR_CORRECTION,
)
state["constraints"] = constraints
state["objective"] = objective
save_state(state, os.path.join(run_dir, "state_6_code.json"))
return state
if __name__ == "__main__":
get_intro_latex_code_map("./description.txt")