From efa4a310d78adc07231db12ead7fc6177c45ae77 Mon Sep 17 00:00:00 2001 From: Dave Larsen Date: Fri, 12 May 2023 15:48:02 -0700 Subject: [PATCH 1/2] Copy openai pack into directory --- openai/LICENSE | 201 +++++++++++++++++++++++++++ openai/README.md | 15 ++ openai/actions/chat_completion.py | 16 +++ openai/actions/chat_completion.yaml | 16 +++ openai/actions/image_generation.py | 11 ++ openai/actions/image_generation.yaml | 16 +++ openai/config.schema.yaml | 12 ++ openai/icon.png | Bin 0 -> 3936 bytes openai/pack.yaml | 12 ++ openai/requirements.txt | 1 + 10 files changed, 300 insertions(+) create mode 100644 openai/LICENSE create mode 100644 openai/README.md create mode 100644 openai/actions/chat_completion.py create mode 100644 openai/actions/chat_completion.yaml create mode 100644 openai/actions/image_generation.py create mode 100644 openai/actions/image_generation.yaml create mode 100644 openai/config.schema.yaml create mode 100644 openai/icon.png create mode 100644 openai/pack.yaml create mode 100644 openai/requirements.txt diff --git a/openai/LICENSE b/openai/LICENSE new file mode 100644 index 00000000..9c8f3ea0 --- /dev/null +++ b/openai/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/openai/README.md b/openai/README.md new file mode 100644 index 00000000..851be490 --- /dev/null +++ b/openai/README.md @@ -0,0 +1,15 @@ +# OpenAI Integration Pack + +Perform chat completions and image generation with OpenAI API + +## Configuration + +The configuration schema contains two attributes: + +* ``openai_token`` - Your OpenAI API access token +* ``openai_org`` - The organization associated with your API token + +## Actions + +* `chat_completion` - Perform a chat completion query (text-based "chat" query) +* `image_generation` - Request a OpenAI generative graphical image diff --git a/openai/actions/chat_completion.py b/openai/actions/chat_completion.py new file mode 100644 index 00000000..74b44a40 --- /dev/null +++ b/openai/actions/chat_completion.py @@ -0,0 +1,16 @@ +import openai + +from st2common.runners.base_action import Action + + +class ChatCompletion(Action): + def run(self, query, model): + config = self.config + openai.api_key = config.get("openai_token") + openai.organization = config.get("openai_org") + return openai.ChatCompletion.create( + model=model, + messages=[ + {"role": "user", "content": query} + ] + ) diff --git a/openai/actions/chat_completion.yaml b/openai/actions/chat_completion.yaml new file mode 100644 index 00000000..2bcd5a40 --- /dev/null +++ b/openai/actions/chat_completion.yaml @@ -0,0 +1,16 @@ +name: chat_completion +pack: openai +description: Action to query the OpenAI chat completion API. +runner_type: "python-script" +entry_point: chat_completion.py +enabled: true +parameters: + query: + required: true + type: string + secret: false + model: + required: false + type: string + default: "gpt-4" + secret: false diff --git a/openai/actions/image_generation.py b/openai/actions/image_generation.py new file mode 100644 index 00000000..25b1e302 --- /dev/null +++ b/openai/actions/image_generation.py @@ -0,0 +1,11 @@ +import openai + +from st2common.runners.base_action import Action + + +class ImageGeneration(Action): + def run(self, query, size): + config = self.config + openai.api_key = config.get("openai_token") + openai.organization = config.get("openai_org") + return openai.Image.create(prompt=query, size=size) diff --git a/openai/actions/image_generation.yaml b/openai/actions/image_generation.yaml new file mode 100644 index 00000000..bb548e90 --- /dev/null +++ b/openai/actions/image_generation.yaml @@ -0,0 +1,16 @@ +name: image_generation +pack: openai +description: Action to query the OpenAI image API. +runner_type: "python-script" +entry_point: image_generation.py +enabled: true +parameters: + query: + required: true + type: string + secret: false + size: + required: false + type: string + default: "512x512" + secret: false diff --git a/openai/config.schema.yaml b/openai/config.schema.yaml new file mode 100644 index 00000000..b610fc3e --- /dev/null +++ b/openai/config.schema.yaml @@ -0,0 +1,12 @@ +--- + +openai_token: + description: "Authentication token for OpenAI API" + type: string + required: false + secret: true +openai_org: + description: "Organization identifier for OpenAI API auth token" + type: string + required: false + secret: false diff --git a/openai/icon.png b/openai/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f017906e073f53022e412210f4c1852eea1f4197 GIT binary patch literal 3936 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 Date: Fri, 11 Aug 2023 11:06:17 -0700 Subject: [PATCH 2/2] Trying to clear CLA error --- openai/pack.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/openai/pack.yaml b/openai/pack.yaml index 4d061269..79983273 100644 --- a/openai/pack.yaml +++ b/openai/pack.yaml @@ -1,4 +1,5 @@ --- + ref: openai name: OpenAI Query Pack description: Pack to query OpenAI API