kaldesai commented on code in PR #600:
URL:
https://github.com/apache/incubator-kie-kogito-docs/pull/600#discussion_r1531865908
##########
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc:
##########
@@ -0,0 +1,115 @@
+= Invoking Python from {product_name}
+:compat-mode!:
+// Metadata:
+:description: Describe Python execution capabilities
+:keywords: kogito, workflow, quarkus, serverless, python, AI
+
+This document describes how to integrate python scripts and functions into
your workflow using {product_name} custom functions. The code appearing in this
document is copied from
link:{kogito_sw_examples_url}/serverless-workflow-python-quarkus[`serverless-workflow-python-quarkus`]
example application and
link:{kogito_runtimes_url}/quarkus/addons/python/integration-tests/src/main/resources/PythonService.sw.json[PythonService]
integration test.
+
+== Enable Python support
+
+ To enable Python support, you need to the python add-on dependency to your
{prouct_name} module `pom.xml` file
+
+[source,xml]
+----
+<dependency>
+ <groupId>org.apache.kie.sonataflow</groupId>
+ <artifactId>sonataflow-addons-quarkus-python</artifactId>
+</dependency>
+----
+
+== Invoking embedded Python script.
+
+{product_name} supports of execution python script in the same memory address
than the running workflow.
+
+To invoke a python script the first step is to define a custom python function
at the beginning of the flow.
+
+[source,json]
+----
+ "functions": [
+ {
+ "name": "python",
+ "type": "custom",
+ "operation": "script:python"
+ }
+ ]
+----
+
+Once done, you can use that function several times to execute arbitrary python
code. The python code is provided as argument of the function call through
`script` property.
+
+[source,json]
+----
+"functionRef":
+ "refName": "python",
+ "arguments": {
+ "script": "import numpy as np"
+ }
+ }
+----
+
+Previous snippet imports link:https://numpy.org/[numpy] library. The same
python function can be invoked again to generate an array containing three
random numbers between 0 and 10.
+
+[source,json]
+----
+"functionRef": {
+ "refName": "python",
+ "arguments": {
+ "script": "rng = np.random.default_rng().integers(low=0,high=10,size=3)"
+ }
+ }
+----
+
+To access the result of the embedded python invocation, {product_name}
provides an special context variable: `$WORKFLOW.python`. Therefore, if you
want to set `rng` variable from previous script as `output` property of the
workflow model, you write
+
+[source,json]
+----
+"stateDataFilter" : {
+ "output" : "{result:$WORKFLOW.python.rng}"
+}
+----
+
+== Invoking Python function.
+
+You can also invoke functions from standard or custom python modules.
+
+You need to define a serverless workflow function definition that invokes the
python function. You should specific, within `operation` property, the name of
the python module and function to be invoked when the function is called. You
should separate the module name and the function name using `::` and prefix
them with `services::python:`
+
+The following example defines a function that invokes standard python function
link:https://www.geeksforgeeks.org/python-math-factorial-function/[math.factorial(x)]
+[source,json]
+----
+ "functions" : [ {
+ "name" : "factorial",
+ "operation" : "service:python:math::factorial",
+ "type" : "custom"
+ }
+----
+
+Once you have defined the function, you might call it passing the expected
arguments. In the case of factorial, a integer stored in property `x` of the
workflow model.
+
+[source,json]
+----
+ "functionRef" : {
+ "refName": "factorial",
+ "arguments" : ".x"
+ }
+----
+
+The return value of the function can be handled as any other function result
using `actionDataFilter.toStateData` Serverless Workflow construct. The
following will set a workflow model property called `result` with the factorial
invocation returned value.
+
+[source,json]
+----
+ "actionDataFilter" : {
+ "toStateData" : ".result"
+ }
+----
+
+== Further reading
+
+The
link:{kogito_sw_examples_url}/serverless-workflow-openvino-quarkus[Openvino]
illustrates the powerful AI capabilities of integrating workflows with Python.
It is a must seen for all interested on the topic.
Review Comment:
```suggestion
The
link:{kogito_sw_examples_url}/serverless-workflow-openvino-quarkus[Openvino]
illustrates the powerful AI capabilities of integrating workflows with Python.
It is a must-see for all interested in the topic.
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]