diff --git a/solvers/codex/lm_solve/gpt_lib.py b/solvers/codex/lm_solve/gpt_lib.py
index 26d6529..79696e0 100644
--- a/solvers/codex/lm_solve/gpt_lib.py
+++ b/solvers/codex/lm_solve/gpt_lib.py
@@ -82,7 +82,9 @@ def extend(self, key, values):
 BATCH_SIZES = {
     "davinci": 32,
     "davinci-codex": 128, 
-    "cushman-codex": 128
+    "cushman-codex": 128,
+    "gpt-3.5-turbo-instruct": 32
+    
 }
 
 CACHES = {cache: Cache(os.path.join(_CACHE_PATH, cache + ".cache")) for cache in BATCH_SIZES}
diff --git a/solvers/codex/run_codex_experiments.py b/solvers/codex/run_codex_experiments.py
index 403dfc5..dd0523a 100644
--- a/solvers/codex/run_codex_experiments.py
+++ b/solvers/codex/run_codex_experiments.py
@@ -17,10 +17,10 @@
 PARAMS = dict(
     temp=0.9,
     timeout=1.0,  # seconds to judge
-    n=32, # number of attempts per puzzle, usually 1000, or set small for a fast run
+    n=1, # number of attempts per puzzle, usually 1000, or set small for a fast run
     filename="30puzzles.json",  # set to 397puzzles.json for a run on full v0.2 dataset
     cache_only=False,  # change this to True if you want to run a 2nd time without risking hitting API
-    engine="cushman-codex",  # FAST-CODEX: "cushman-codex" CODEX: "davinci-codex"  GPT3: "davinci"
+    engine="gpt-3.5-turbo-instruct",  # FAST-CODEX: "cushman-codex" CODEX: "davinci-codex"  GPT3: "davinci"
 )
 
 BOOTSTRAP_PARAMS = dict(
diff --git a/solvers/gpt3/lm_solve/gpt3_lib.py b/solvers/gpt3/lm_solve/gpt3_lib.py
index 8a554c6..da9f8d8 100644
--- a/solvers/gpt3/lm_solve/gpt3_lib.py
+++ b/solvers/gpt3/lm_solve/gpt3_lib.py
@@ -98,7 +98,7 @@ def query(prompt, n=10, max_tokens=150, temp=1.0, max_batch=32, stop=None, notes
         m = min(n, max_batch)
 
         res = openai.Completion.create(
-            engine="davinci-msft",
+            engine="gpt-3.5-turbo-instruct",
             prompt=prompt,
             max_tokens=max_tokens,
             temperature=temp,
diff --git a/solvers/gpt3/run_gpt3_experiments.py b/solvers/gpt3/run_gpt3_experiments.py
index 138d792..31eb338 100644
--- a/solvers/gpt3/run_gpt3_experiments.py
+++ b/solvers/gpt3/run_gpt3_experiments.py
@@ -13,7 +13,7 @@
 PARAMS = dict(
     temp=0.9,
     timeout=1.0,  # seconds to judge
-    n=10 * 1000,
+    n=1,
     filename="puzzles_with_descriptions.json",
     stop="\n",
     cache_only=False,  # change this to True if you want to run a 2nd time without risking hitting API
@@ -114,55 +114,55 @@ def f5(n: int):
 
 
 def run(seed=0):
-    sols = [lm_solve.prompt_experiment(**PARAMS, prefix="", seed=seed),
-            lm_solve.prompt_experiment(**PARAMS, prefix=PREFIX, seed=seed),
-            lm_solve.prompt_experiment(**PARAMS, prefix=PREFIX_DOCSTR, add_docstring=True, seed=seed)]
+    sols = [lm_solve.prompt_experiment(**PARAMS, prefix="", seed=seed)]
+            #lm_solve.prompt_experiment(**PARAMS, prefix=PREFIX, seed=seed),
+            #lm_solve.prompt_experiment(**PARAMS, prefix=PREFIX_DOCSTR, add_docstring=True, seed=seed)]
     problems_solved = [sorted([i for i, (f, gs) in enumerate(s) if gs]) for s in sols]
-    bootstrap = lm_solve.bootstrap(**BOOTSTRAP_PARAMS, seed=seed)
+    #bootstrap = lm_solve.bootstrap(**BOOTSTRAP_PARAMS, seed=seed)
     print(f"run={seed} ALL DONE!\n\n")
     print(f"run={seed} RESULTS " + "=" * 50)
     print()
 
-    # Instead of running until first success, and outputting number of attempts, we do something more accurate.
-    # We run for N tries for each problem and do not stop on first success. Then, we use the number of successes
-    # for a better estimate of the average number of attempts required for first success. If we have s successes
-    # out of N attempts, then the expected number of attempts is (N - s) / (1 + s). This is the expectation of the
-    # random variable that is: when you permute the attempts uniformly at random, how many attempts before the
-    # first success. If s=N, it's 0, if s=1, it's (N-1)/2, etc.
-    counts = [[(PARAMS["n"] - len(gs)) / (1 + len(gs)) for f, gs in s if gs] for s in sols]
-    counts.append([m for m, _i, _f, _a in bootstrap])
-    counts = [[1 + z for z in c] for c in counts]  # add 1 to make it 1-based
-    for c in counts:
-        c.sort()
-    print(f"run={seed} (Expected) number of attempts before a problem is solved [short, med, long, bootstrap]:")
-    print(counts)
-    problems_solved.append([i for _m, i, _f, _a in bootstrap])
-    print()
-    print(f"run={seed} Which problems were solved [short, med, long, bootstrap]:")
-    print(problems_solved)
-    print()
-    print(f"run={seed} Number of problems solved [short, med, long, bootstrap]:")
-    print([len(c) for c in counts])
-    print()
-    print(f"run={seed} Number of 30 study problems solved [short, med, long, bootstrap]:")
-    print([len([i for i in s if i in STUDY]) for s in problems_solved])
-    print()
-    difficulties = [1.0 for _ in range(len(sols[0]))]
-
-    k = 1
-    for m, i, f, a in bootstrap:
-        difficulties[i] = np.log(m + 1) / np.log(PARAMS["n"])
-
-        # These commented lines print the problems that bootstrap solved
-        # print()
-        # print(f"# Bootstrap solved after {m + 1} tries:")
-        # print(f.replace("def f", "def f" + str(k)))
-        # import json
-        #
-        # print(f"SOL:", json.dumps(a))
-        k += 1
-    print(f"run={seed} Bootstrap difficulties for study puzzles:")
-    print([difficulties[i] for i in STUDY])
+    # # Instead of running until first success, and outputting number of attempts, we do something more accurate.
+    # # We run for N tries for each problem and do not stop on first success. Then, we use the number of successes
+    # # for a better estimate of the average number of attempts required for first success. If we have s successes
+    # # out of N attempts, then the expected number of attempts is (N - s) / (1 + s). This is the expectation of the
+    # # random variable that is: when you permute the attempts uniformly at random, how many attempts before the
+    # # first success. If s=N, it's 0, if s=1, it's (N-1)/2, etc.
+    # counts = [[(PARAMS["n"] - len(gs)) / (1 + len(gs)) for f, gs in s if gs] for s in sols]
+    # counts.append([m for m, _i, _f, _a in bootstrap])
+    # counts = [[1 + z for z in c] for c in counts]  # add 1 to make it 1-based
+    # for c in counts:
+    #     c.sort()
+    # print(f"run={seed} (Expected) number of attempts before a problem is solved [short, med, long, bootstrap]:")
+    # print(counts)
+    # problems_solved.append([i for _m, i, _f, _a in bootstrap])
+    # print()
+    # print(f"run={seed} Which problems were solved [short, med, long, bootstrap]:")
+    # print(problems_solved)
+    # print()
+    # print(f"run={seed} Number of problems solved [short, med, long, bootstrap]:")
+    # print([len(c) for c in counts])
+    # print()
+    # print(f"run={seed} Number of 30 study problems solved [short, med, long, bootstrap]:")
+    # print([len([i for i in s if i in STUDY]) for s in problems_solved])
+    # print()
+    # difficulties = [1.0 for _ in range(len(sols[0]))]
+
+    # k = 1
+    # for m, i, f, a in bootstrap:
+    #     difficulties[i] = np.log(m + 1) / np.log(PARAMS["n"])
+
+    #     # These commented lines print the problems that bootstrap solved
+    #     # print()
+    #     # print(f"# Bootstrap solved after {m + 1} tries:")
+    #     # print(f.replace("def f", "def f" + str(k)))
+    #     # import json
+    #     #
+    #     # print(f"SOL:", json.dumps(a))
+    #     k += 1
+    # print(f"run={seed} Bootstrap difficulties for study puzzles:")
+    # print([difficulties[i] for i in STUDY])
 
 
 if __name__ == "__main__":
