Skip to content

Commit ff751ab

Browse files
authored
Add /fine-tunes endpoint to the CLI (#5)
* Add /fine-tunes endpoint to the CLI * address comments
1 parent f00f489 commit ff751ab

File tree

6 files changed

+96
-2
lines changed

6 files changed

+96
-2
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
__pycache__
33
/public/dist
44
.idea
5+
.python-version

openai/api_resources/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
from openai.api_resources.snapshot import Snapshot
1111
from openai.api_resources.tag import Tag
1212
from openai.api_resources.update import Update
13+
from openai.api_resources.fine_tune import FineTune

openai/api_resources/fine_tune.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from openai.api_resources.abstract import (
2+
ListableAPIResource,
3+
CreateableAPIResource,
4+
nested_resource_class_methods,
5+
)
6+
from openai.six.moves.urllib.parse import quote_plus
7+
from openai import util
8+
9+
10+
@nested_resource_class_methods("event", operations=["list"])
11+
class FineTune(ListableAPIResource, CreateableAPIResource):
12+
OBJECT_NAME = "fine-tune"
13+
14+
@classmethod
15+
def cancel(cls, id, api_key=None, request_id=None, **params):
16+
base = cls.class_url()
17+
extn = quote_plus(id)
18+
url = "%s/%s/cancel" % (base, extn)
19+
instance = cls(id, api_key, **params)
20+
headers = util.populate_headers(request_id=request_id)
21+
return instance.request("post", url, headers=headers)

openai/cli.py

+71
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,50 @@ def list(cls, args):
195195
print(tags)
196196

197197

198+
class FineTuneCLI:
199+
@classmethod
200+
def list(cls, args):
201+
resp = openai.FineTune.list()
202+
print(resp)
203+
204+
@classmethod
205+
def create(cls, args):
206+
create_args = {
207+
"train_file": args.train_file,
208+
}
209+
if args.test_file:
210+
create_args["test_file"] = args.test_file
211+
if args.base_model:
212+
create_args["base_model"] = args.base_model
213+
if args.hparams:
214+
try:
215+
hparams = json.loads(args.hparams)
216+
except json.decoder.JSONDecodeError:
217+
sys.stderr.write(
218+
"--hparams must be JSON decodable and match the hyperparameter arguments of the API"
219+
)
220+
sys.exit(1)
221+
create_args.update(hparams)
222+
223+
resp = openai.FineTune.create(**create_args)
224+
print(resp)
225+
226+
@classmethod
227+
def get(cls, args):
228+
resp = openai.FineTune.retrieve(id=args.id)
229+
print(resp)
230+
231+
@classmethod
232+
def events(cls, args):
233+
resp = openai.FineTune.list_events(id=args.id)
234+
print(resp)
235+
236+
@classmethod
237+
def cancel(cls, args):
238+
resp = openai.FineTune.cancel(id=args.id)
239+
print(resp)
240+
241+
198242
def register(parser):
199243
# Engine management
200244
subparsers = parser.add_subparsers(help="All API subcommands")
@@ -379,3 +423,30 @@ def help(args):
379423

380424
sub = subparsers.add_parser("tags.list")
381425
sub.set_defaults(func=Tag.list)
426+
427+
# /fine-tunes API
428+
sub = subparsers.add_parser("fine_tunes.list")
429+
sub.set_defaults(func=FineTuneCLI.list)
430+
431+
sub = subparsers.add_parser("fine_tunes.create")
432+
sub.add_argument("-t", "--train_file", required=True, help="File to train")
433+
sub.add_argument("--test_file", help="File to test")
434+
sub.add_argument(
435+
"-b",
436+
"--base_model",
437+
help="The model name to start the run from",
438+
)
439+
sub.add_argument("-p", "--hparams", help="Hyperparameter JSON")
440+
sub.set_defaults(func=FineTuneCLI.create)
441+
442+
sub = subparsers.add_parser("fine_tunes.get")
443+
sub.add_argument("-i", "--id", required=True, help="The id of the fine-tune job")
444+
sub.set_defaults(func=FineTuneCLI.get)
445+
446+
sub = subparsers.add_parser("fine_tunes.events")
447+
sub.add_argument("-i", "--id", required=True, help="The id of the fine-tune job")
448+
sub.set_defaults(func=FineTuneCLI.events)
449+
450+
sub = subparsers.add_parser("fine_tunes.cancel")
451+
sub.add_argument("-i", "--id", required=True, help="The id of the fine-tune job")
452+
sub.set_defaults(func=FineTuneCLI.cancel)

openai/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION = "0.3.0"
1+
VERSION = "0.4.0"

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
'requests >= 2.20; python_version >= "3.0"',
1717
'requests[security] >= 2.20; python_version < "3.0"',
1818
],
19-
extras_require={},
19+
extras_require={"dev": ["black==20.8b1", "pytest==6.*"]},
2020
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
2121
scripts=["bin/openai"],
2222
packages=find_packages(exclude=["tests", "tests.*"]),

0 commit comments

Comments
 (0)