Commit 91a63f2c

Mike Amy <mikeamycoder@gmail.com>
2023-05-09 02:27:54
Fixed CLI streamed chat completions. (#319)
* Fixed streamed chat completions. Streamed chat completions use a different response structure per returned token, also they may have roles and empty tokens at the end. Handle this sensibly. * Only render content --------- Co-authored-by: Atty Eleti <atty@openai.com>
1 parent 03f848e
Changed files (1)
openai
openai/cli.py
@@ -141,9 +141,14 @@ class ChatCompletion:
             for c_idx, c in enumerate(sorted(choices, key=lambda s: s["index"])):
                 if len(choices) > 1:
                     sys.stdout.write("===== Chat Completion {} =====\n".format(c_idx))
-                sys.stdout.write(c["message"]["content"])
-                if len(choices) > 1:
-                    sys.stdout.write("\n")
+                if args.stream:
+                    delta = c["delta"]
+                    if "content" in delta:
+                        sys.stdout.write(delta["content"])
+                else:
+                    sys.stdout.write(c["message"]["content"])
+                    if len(choices) > 1:  # not in streams
+                        sys.stdout.write("\n")
                 sys.stdout.flush()
 
 
@@ -203,7 +208,9 @@ class Deployment:
 
     @classmethod
     def create(cls, args):
-        models = openai.Deployment.create(model=args.model, scale_settings={"scale_type": args.scale_type})
+        models = openai.Deployment.create(
+            model=args.model, scale_settings={"scale_type": args.scale_type}
+        )
         print(models)
 
 
@@ -833,10 +840,15 @@ Mutually exclusive with `top_p`.""",
     sub = subparsers.add_parser("deployments.delete")
     sub.add_argument("-i", "--id", required=True, help="The deployment ID")
     sub.set_defaults(func=Deployment.delete)
-    
+
     sub = subparsers.add_parser("deployments.create")
     sub.add_argument("-m", "--model", required=True, help="The model ID")
-    sub.add_argument("-s", "--scale_type", required=True, help="The scale type. Either 'manual' or 'standard'")
+    sub.add_argument(
+        "-s",
+        "--scale_type",
+        required=True,
+        help="The scale type. Either 'manual' or 'standard'",
+    )
     sub.set_defaults(func=Deployment.create)
 
     # Models