Skip to content

Commit c90c212

Browse files
committed
1 parent cb78d16 commit c90c212

File tree

8 files changed

+145
-166
lines changed

8 files changed

+145
-166
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@ graph LR
6262

6363
[![pylint](https://github.com/kamangir/openai-commands/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/openai-commands/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/openai-commands/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/openai-commands/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/openai-commands/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/openai-commands/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/openai-commands.svg)](https://pypi.org/project/openai-commands/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/openai-commands)](https://pypistats.org/packages/openai-commands)
6464

65-
built by 🌀 [`blue_options-4.207.1`](https://github.com/kamangir/awesome-bash-cli), based on [`openai_commands-3.243.1`](https://github.com/kamangir/openai-commands).
65+
built by 🌀 [`blue_options-4.207.1`](https://github.com/kamangir/awesome-bash-cli), based on [`openai_commands-3.244.1`](https://github.com/kamangir/openai-commands).

notebooks/image_generation.ipynb

Lines changed: 44 additions & 35 deletions
Large diffs are not rendered by default.

openai_commands/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
DESCRIPTION = f"{ICON} a command interface to the OpenAI API."
66

7-
VERSION = "3.243.1"
7+
VERSION = "3.244.1"
88

99
REPO_NAME = "openai-commands"
1010

openai_commands/image_generation/__main__.py

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from blue_objects import file, objects
88

99
from openai_commands import NAME
10-
from openai_commands.image_generation.api import OpenAIImageGenerator
10+
from openai_commands.tests.test_text_generation import test_prompt
11+
from openai_commands.image_generation.api import generate_image
1112
from openai_commands.logger import logger
1213

1314
NAME = module.name(__file__, NAME)
@@ -20,20 +21,19 @@
2021
help="generate_image",
2122
)
2223
parser.add_argument(
23-
"--object_name",
24+
"--filename",
2425
type=str,
25-
default=".",
26+
default=f"{string.timestamp()}.png",
2627
)
2728
parser.add_argument(
28-
"--filename",
29+
"--object_name",
2930
type=str,
30-
default=f"{string.timestamp()}.png",
3131
)
3232
parser.add_argument(
3333
"--prompt",
3434
type=str,
3535
default="",
36-
help="prompt+prompt+prompt",
36+
help=test_prompt,
3737
)
3838
parser.add_argument(
3939
"--verbose",
@@ -45,21 +45,12 @@
4545

4646
success = False
4747
if args.task == "generate_image":
48-
generator = OpenAIImageGenerator(verbose=args.verbose)
49-
50-
success = True
51-
for index, prompt in tqdm(enumerate(args.prompt.split("+"))):
52-
filename = objects.path_of(
53-
filename=file.add_suffix(args.filename, f"{index:05d}"),
54-
object_name=args.object_name,
55-
create=True,
56-
)
57-
58-
if not generator.generate(
59-
prompt=prompt,
60-
filename=filename,
61-
)[0]:
62-
success = False
48+
success, _ = generate_image(
49+
prompt=args.prompt,
50+
filename=args.filename,
51+
object_name=args.object_name,
52+
verbose=args.verbose,
53+
)
6354
else:
6455
success = None
6556

openai_commands/image_generation/api.py

Lines changed: 80 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -18,98 +18,87 @@
1818
NAME = module.name(__file__, NAME)
1919

2020

21-
class OpenAIImageGenerator:
22-
def __init__(
23-
self,
24-
model="dall-e-3",
25-
verbose: bool = False,
26-
):
27-
assert env.OPENAI_API_KEY
28-
29-
self.client = OpenAI(api_key=env.OPENAI_API_KEY)
30-
self.verbose = verbose
31-
self.model = model
32-
logger.info(
33-
"{}[{}]".format(
34-
self.__class__.__name__,
35-
self.model,
36-
)
21+
def generate_image(
22+
prompt: str,
23+
filename: str,
24+
object_name: str,
25+
model="dall-e-3",
26+
sign: bool = True,
27+
line_width: int = 80,
28+
quality: str = "standard",
29+
size: str = "1024x1024",
30+
sign_with_prompt: bool = True,
31+
footer: List[str] = [],
32+
verbose: bool = False,
33+
) -> Tuple[bool, Any]:
34+
assert env.OPENAI_API_KEY
35+
36+
client = OpenAI(api_key=env.OPENAI_API_KEY)
37+
38+
full_filename = objects.path_of(
39+
filename=filename,
40+
object_name=object_name,
41+
)
42+
43+
logger.info(
44+
"{}.generate_image: {} -> {}/{}".format(
45+
NAME,
46+
prompt,
47+
object_name,
48+
filename,
3749
)
38-
39-
def generate(
40-
self,
41-
prompt: str,
42-
filename: str = "",
43-
sign: bool = True,
44-
line_width: int = 80,
45-
quality: str = "standard",
46-
size: str = "1024x1024",
47-
sign_with_prompt: bool = True,
48-
footer: List[str] = [],
49-
) -> Tuple[bool, Any]:
50-
object_name = path.name(file.path(filename))
51-
52-
logger.info(
53-
"{}.generate: {} -> {}/{}".format(
54-
self.__class__.__name__,
55-
prompt,
56-
object_name,
57-
file.name_and_extension(filename),
58-
)
50+
)
51+
52+
response = client.images.generate(
53+
model=model,
54+
prompt=prompt,
55+
size=size,
56+
quality=quality,
57+
n=1,
58+
)
59+
60+
logger.info(json.dumps(response.model_dump(), indent=4))
61+
62+
success = file.download(response.data[0].url, full_filename)
63+
64+
if success and sign:
65+
success, image = file.load_image(full_filename)
66+
67+
if success and sign:
68+
success = sign_filename(
69+
filename=full_filename,
70+
header=[
71+
" | ".join(
72+
objects.signature(
73+
info=filename,
74+
object_name=object_name,
75+
)
76+
+ [
77+
string.pretty_shape_of_matrix(image),
78+
f"quality: {quality}",
79+
]
80+
),
81+
],
82+
footer=[
83+
" | ".join(
84+
footer
85+
+ ([f"prompt: {prompt}"] if sign_with_prompt else [])
86+
+ (
87+
[f"revised prompt: {str(response.data[0].revised_prompt)}"]
88+
if verbose
89+
else []
90+
)
91+
+ [f"model: {model}"]
92+
+ signature()
93+
),
94+
],
95+
line_width=line_width,
5996
)
6097

61-
response = self.client.images.generate(
62-
model=self.model,
63-
prompt=prompt,
64-
size=size,
65-
quality=quality,
66-
n=1,
67-
)
98+
if success and verbose and is_jupyter():
99+
display(Image(filename=full_filename))
68100

69-
logger.info(json.dumps(response.model_dump(), indent=4))
70-
71-
success = file.download(response.data[0].url, filename) if filename else True
72-
73-
if success and sign:
74-
success, image = file.load_image(filename)
75-
76-
if success and sign:
77-
success = sign_filename(
78-
filename=filename,
79-
header=[
80-
" | ".join(
81-
objects.signature(
82-
info=file.name_and_extension(filename),
83-
object_name=object_name,
84-
)
85-
+ [
86-
string.pretty_shape_of_matrix(image),
87-
f"quality: {quality}",
88-
]
89-
),
90-
],
91-
footer=[
92-
" | ".join(
93-
footer
94-
+ ([f"prompt: {prompt}"] if sign_with_prompt else [])
95-
+ (
96-
[f"revised prompt: {str(response.data[0].revised_prompt)}"]
97-
if self.verbose
98-
else []
99-
)
100-
+ [
101-
f"model: {self.model}",
102-
]
103-
+ signature()
104-
),
105-
],
106-
line_width=line_width,
107-
)
108-
109-
if success and self.verbose and is_jupyter():
110-
display(Image(filename=filename))
111-
112-
return (
113-
success,
114-
response,
115-
)
101+
return (
102+
success,
103+
response,
104+
)

openai_commands/literature_review/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ literature review at scale on [AWS Batch](https://aws.amazon.com/batch/) through
4949
| | |
5050
| --- | --- |
5151
| [aws_batch](https://github.com/kamangir/notebooks-and-scripts/tree/main/blueflow/workflow/runners/aws_batch.py) | [local](https://github.com/kamangir/notebooks-and-scripts/tree/main/blueflow/workflow/runners/local.py) |
52-
| [![image](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-aws_batch-study-type-screening-result/workflow.gif?raw=true&random=vphrroikm1zi05g0)](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-aws_batch-study-type-screening-result/workflow.gif?raw=true&random=vphrroikm1zi05g0) | [![image](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-local-study-type-screening-result/workflow.gif?raw=true&random=owoiyhu1kdlgq7p0)](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-local-study-type-screening-result/workflow.gif?raw=true&random=owoiyhu1kdlgq7p0) |
52+
| [![image](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-aws_batch-study-type-screening-result/workflow.gif?raw=true&random=s996vlddr08d6vq9)](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-aws_batch-study-type-screening-result/workflow.gif?raw=true&random=s996vlddr08d6vq9) | [![image](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-local-study-type-screening-result/workflow.gif?raw=true&random=f26yy7zc0yh5yh9m)](https://kamangir-public.s3.ca-central-1.amazonaws.com/AMR-v7-test-litrev-multiple-local-study-type-screening-result/workflow.gif?raw=true&random=f26yy7zc0yh5yh9m) |
5353

5454
---
5555

openai_commands/tests/test_image_generation.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from blue_options import string
44
from blue_objects import objects
55

6-
from openai_commands.image_generation.api import OpenAIImageGenerator
6+
from openai_commands.image_generation.api import generate_image
77

88

99
@pytest.mark.parametrize(
@@ -12,19 +12,11 @@
1212
("a person flying through the streets of Vancouver."),
1313
],
1414
)
15-
def test_image_generation(prompt):
16-
object_name = objects.unique_object("test_image_generation")
17-
18-
generator = OpenAIImageGenerator(verbose=False)
19-
20-
filename = objects.path_of(
21-
f"{string.timestamp()}.png",
22-
object_name,
23-
)
24-
25-
success, _ = generator.generate(
15+
def test_image_generation(prompt: str):
16+
success, _ = generate_image(
2617
prompt=prompt,
27-
filename=filename,
18+
object_name=objects.unique_object("test_image_generation"),
19+
filename=f"{string.timestamp()}.png",
2820
)
2921

3022
assert success

openai_commands/text_generation/api.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ def generate_text(
2121
max_tokens: int = 2000,
2222
verbose=None,
2323
) -> Tuple[bool, str, Dict[str, Any]]:
24-
if not env.OPENAI_API_KEY:
25-
logger.error("OPENAI_API_KEY is not set.")
26-
return False, "", {}
24+
assert env.OPENAI_API_KEY
2725

2826
client = OpenAI(api_key=env.OPENAI_API_KEY)
2927

0 commit comments

Comments
 (0)