This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git
The following commit(s) were added to refs/heads/main by this push:
new e896dfa add openai-classification action
e896dfa is described below
commit e896dfa5ace635f761ea6bf4ac5769534a917327
Author: nicolaferraro <[email protected]>
AuthorDate: Tue May 11 11:29:19 2021 +0200
add openai-classification action
---
.../kamelets/openai-classification-action.svg | 2 +
docs/modules/ROOT/nav.adoc | 1 +
.../ROOT/pages/openai-classification-action.adoc | 79 +++++++++++++
openai-classification-action.kamelet.yaml | 125 +++++++++++++++++++++
4 files changed, 207 insertions(+)
diff --git
a/docs/modules/ROOT/assets/images/kamelets/openai-classification-action.svg
b/docs/modules/ROOT/assets/images/kamelets/openai-classification-action.svg
new file mode 100644
index 0000000..f742d9e
--- /dev/null
+++ b/docs/modules/ROOT/assets/images/kamelets/openai-classification-action.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="894" height="170" xmlns="http://www.w3.org/2000/svg"><path
d="M625.55 35.22c-13.75 0-23.57 4.7-28.39 13.59l-2.59
4.79V37.54h-22.4v97.85h23.56V77.18c0-13.91 7.55-21.89 20.73-21.89 12.56 0 19.76
7.76 19.76 21.31v58.79h23.56v-63c0-23.26-12.8-37.17-34.23-37.17zm-114.22
0c-27.79 0-45.06 17.33-45.06 45.25v13.74c0 26.83 17.42 43.51 45.45 43.51 18.74
0 31.88-6.88 40.15-21l-14.61-8.39c-6.11 8.15-15.86 13.19-25.54 13.19-14.19
0-22.67-8.76-22.67-23.44v-3.89h65.79V77.95c0-26-17.08-42.73- [...]
\ No newline at end of file
diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc
index 584c9bb..39500ad 100644
--- a/docs/modules/ROOT/nav.adoc
+++ b/docs/modules/ROOT/nav.adoc
@@ -60,6 +60,7 @@
* xref:ROOT:minio-source.adoc[image:kamelets/minio-source.svg[] Minio Source]
* xref:ROOT:mqtt-source.adoc[image:kamelets/mqtt-source.svg[] MQTT Source]
* xref:ROOT:nats-source.adoc[image:kamelets/nats-source.svg[] NATS Source]
+*
xref:ROOT:openai-classification-action.adoc[image:kamelets/openai-classification-action.svg[]
OpenAI Classification Action]
*
xref:ROOT:openai-completion-action.adoc[image:kamelets/openai-completion-action.svg[]
OpenAI Completion Action]
* xref:ROOT:pdf-action.adoc[image:kamelets/pdf-action.svg[] PDF Action]
* xref:ROOT:rabbitmq-source.adoc[image:kamelets/rabbitmq-source.svg[] RabbitMQ
Source]
diff --git a/docs/modules/ROOT/pages/openai-classification-action.adoc
b/docs/modules/ROOT/pages/openai-classification-action.adoc
new file mode 100644
index 0000000..0ae9ade
--- /dev/null
+++ b/docs/modules/ROOT/pages/openai-classification-action.adoc
@@ -0,0 +1,79 @@
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
+= image:kamelets/openai-classification-action.svg[] OpenAI Classification
Action
+
+*Provided by: "Apache Software Foundation"*
+
+Classifies a sentence using the OpenAI API.
+
+It requires an OpenAI account (beta accounts available at
https://beta.openai.com/).
+
+Training data for classification can be provided in advance by uploading a
file with purpose="classifications", see:
https://beta.openai.com/docs/api-reference/files/upload.
+
+The Kamelet accepts data in:
+- `text/plain` format (default)
+- `application/json` format: see reference at
https://beta.openai.com/docs/api-reference/classifications/create
+
+
+== Configuration Options
+
+The following table summarizes the configuration options available for the
`openai-classification-action` Kamelet:
+[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
+|===
+| Property| Name| Description| Type| Default| Example
+| *authorizationToken {empty}* *| Authorization Token| The authorization token
to use to contact the openAI API| string| |
+| engine| Engine| The OpenAI engine to use| string| `"davinci"`|
+| file| Examples File| The ID of an uploaded file containing examples for
classification| string| | `"file-9HbeJXxtG7pg1YTXRx1v1fmn"`
+| format| Format| The response format ('text/plain' or 'application/json' are
supported)| string| `"text/plain"`|
+|===
+
+NOTE: Fields marked with ({empty}*) are mandatory.
+
+== Usage
+
+This section summarizes how the `openai-classification-action` can be used in
various contexts.
+
+=== Knative Action
+
+The `openai-classification-action` Kamelet can be used as intermediate step in
a binding.
+
+.openai-classification-action-binding.yaml
+[source,yaml]
+----
+apiVersion: camel.apache.org/v1alpha1
+kind: KameletBinding
+metadata:
+ name: openai-classification-action-binding
+spec:
+ source:
+ ref:
+ kind: Kamelet
+ apiVersion: camel.apache.org/v1alpha1
+ name: timer-source
+ properties:
+ message: "Hello"
+ steps:
+ - ref:
+ kind: Kamelet
+ apiVersion: camel.apache.org/v1alpha1
+ name: openai-classification-action
+ properties:
+ authorizationToken: "The Authorization Token"
+ sink:
+ ref:
+ kind: InMemoryChannel
+ apiVersion: messaging.knative.dev/v1
+ name: mychannel
+
+----
+
+Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K
installed] into the Kubernetes cluster you're connected to.
+
+Save the `openai-classification-action-binding.yaml` file into your hard
drive, then configure it according to your needs.
+
+You can run the action using the following command:
+
+[source,shell]
+----
+kubectl apply -f openai-classification-action-binding.yaml
+----
+// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
diff --git a/openai-classification-action.kamelet.yaml
b/openai-classification-action.kamelet.yaml
new file mode 100755
index 0000000..51f0c0f
--- /dev/null
+++ b/openai-classification-action.kamelet.yaml
@@ -0,0 +1,125 @@
+apiVersion: camel.apache.org/v1alpha1
+kind: Kamelet
+metadata:
+ name: openai-classification-action
+ annotations:
+ camel.apache.org/kamelet.icon:
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iODk0IiBoZWlnaHQ9IjE3MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNjI1LjU1IDM1LjIyYy0xMy43NSAwLTIzLjU3IDQuNy0yOC4zOSAxMy41OWwtMi41OSA0Ljc5VjM3LjU0aC0yMi40djk3Ljg1aDIzLjU2Vjc3LjE4YzAtMTMuOTEgNy41NS0yMS44OSAyMC43My0yMS44OSAxMi41NiAwIDE5Ljc2IDcuNzYgMTkuNzYgMjEuMzF2NTguNzloMjMuNTZ2LTYzYzAtMjMuMjYtMTIuOC0zNy4xNy0zNC4yMy0zNy4xN3ptLTExNC4yMiAwYy0yNy
[...]
+ camel.apache.org/provider: "Apache Software Foundation"
+ camel.apache.org/kamelet.group: "OpenAI"
+ labels:
+ camel.apache.org/kamelet.type: "action"
+spec:
+ definition:
+ title: "OpenAI Classification Action"
+ description: |
+ Classifies a sentence using the OpenAI API.
+
+ It requires an OpenAI account (beta accounts available at
https://beta.openai.com/).
+
+ Training data for classification can be provided in advance by uploading
a file with purpose="classifications", see:
https://beta.openai.com/docs/api-reference/files/upload.
+
+ The Kamelet accepts data in:
+ - `text/plain` format (default)
+ - `application/json` format: see reference at
https://beta.openai.com/docs/api-reference/classifications/create
+
+ required:
+ - authorizationToken
+ type: object
+ properties:
+ authorizationToken:
+ title: Authorization Token
+ description: The authorization token to use to contact the openAI API
+ type: string
+ format:
+ title: Format
+ description: The response format ('text/plain' or 'application/json'
are supported)
+ type: string
+ default: text/plain
+ engine:
+ title: Engine
+ description: The OpenAI engine to use
+ type: string
+ default: davinci
+ file:
+ title: Examples File
+ description: The ID of an uploaded file containing examples for
classification
+ type: string
+ example: "file-9HbeJXxtG7pg1YTXRx1v1fmn"
+ types:
+ in:
+ mediaType: text/plain
+ out:
+ mediaType: text/plain
+ dependencies:
+ - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT"
+ - "camel:jackson"
+ - "camel:jsonpath"
+ - "camel:core"
+ - "camel:kamelet"
+ - "camel:http"
+ flow:
+ from:
+ uri: kamelet:source
+ steps:
+ - choice:
+ when:
+ - simple: "${header[Content-Type]} == null ||
${header[Content-Type]} == 'text/plain'"
+ steps:
+ - convert-body-to:
+ type: "java.lang.String"
+ - transform:
+ simple: "${bean:type:java.util.Map?method=of('query',
${body})}"
+ - marshal:
+ json: {}
+ - unmarshal:
+ json:
+ library: Jackson
+ unmarshalTypeName: com.fasterxml.jackson.databind.JsonNode
+ - choice:
+ when:
+ - simple: "${body.has('model')} == false"
+ steps:
+ - set-property:
+ name: "field"
+ constant: "model"
+ - set-property:
+ name: "value"
+ constant: "{{engine}}"
+ - bean: "org.apache.camel.kamelets.utils.transform.InsertField"
+ - set-property:
+ name: "file"
+ constant: "{{file:}}"
+ - choice:
+ when:
+ - simple: "${body.has('file')} == false && ${exchangeProperty.file}
!= null"
+ steps:
+ - set-property:
+ name: "field"
+ constant: "file"
+ - set-property:
+ name: "value"
+ simple: "${exchangeProperty.file}"
+ - bean: "org.apache.camel.kamelets.utils.transform.InsertField"
+ - marshal:
+ json: {}
+ - set-header:
+ name: "Authorization"
+ simple: "Bearer {{authorizationToken}}"
+ - set-header:
+ name: "Content-Type"
+ constant: "application/json"
+ - to: "https://api.openai.com/v1/classifications"
+ - remove-header:
+ header-name: "Authorization"
+ - set-property:
+ name: format
+ constant: "{{format}}"
+ - choice:
+ when:
+ - simple: "${exchangeProperty.format} == 'text/plain'"
+ steps:
+ - transform:
+ jsonpath: "$.label"
+ - set-header:
+ name: "Content-Type"
+ constant: "text/plain"