From 36d368615684e8c878ec8f1ef7c87ecc00553a24 Mon Sep 17 00:00:00 2001 From: Mike Amy Date: Sun, 19 Mar 2023 11:54:11 +0700 Subject: [PATCH 1/2] 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. --- openai/cli.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/openai/cli.py b/openai/cli.py index e9201b18b9..d18cc7538a 100644 --- a/openai/cli.py +++ b/openai/cli.py @@ -140,9 +140,16 @@ def create(cls, args): 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"]) + elif "role" in delta: + sys.stdout.write(delta["role"] + ':') + else: + sys.stdout.write(c["message"]["content"]) + if len(choices) > 1: # not in streams + sys.stdout.write("\n") sys.stdout.flush() From ddb7c2d1a0774e2eaf005b7bb99087afac81cc40 Mon Sep 17 00:00:00 2001 From: Atty Eleti Date: Mon, 8 May 2023 11:26:26 -0700 Subject: [PATCH 2/2] Only render content --- openai/cli.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/openai/cli.py b/openai/cli.py index d18cc7538a..75a85aa50b 100644 --- a/openai/cli.py +++ b/openai/cli.py @@ -144,11 +144,9 @@ def create(cls, args): delta = c["delta"] if "content" in delta: sys.stdout.write(delta["content"]) - elif "role" in delta: - sys.stdout.write(delta["role"] + ':') else: sys.stdout.write(c["message"]["content"]) - if len(choices) > 1: # not in streams + if len(choices) > 1: # not in streams sys.stdout.write("\n") sys.stdout.flush() @@ -209,7 +207,9 @@ def list(cls, args): @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) @@ -832,10 +832,15 @@ def help(args): 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