This is an automated email from the ASF dual-hosted git repository.

dhanak pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-docs.git


The following commit(s) were added to refs/heads/main by this push:
     new b07a8ceb6 [Fix #599] Add Python documentation (#600)
b07a8ceb6 is described below

commit b07a8ceb6b87dda54afb6eb64ec7dbd581000a74
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Wed Mar 20 13:56:15 2024 +0100

    [Fix #599] Add Python documentation (#600)
    
    * [Fix #599] Add python documentation
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Gonzalo Muñoz <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Gonzalo Muñoz <[email protected]>
    
    * [Fix #599] Gonzalos comments
    
    * Update 
serverlessworkflow/modules/ROOT/pages/core/custom-functions-support.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    * Update 
serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
    
    Co-authored-by: Kalyani Desai <[email protected]>
    
    ---------
    
    Co-authored-by: Gonzalo Muñoz <[email protected]>
    Co-authored-by: Kalyani Desai <[email protected]>
---
 serverlessworkflow/modules/ROOT/nav.adoc           |   1 +
 .../ROOT/pages/core/custom-functions-support.adoc  |   4 +
 .../integrations/custom-functions-python.adoc      | 115 +++++++++++++++++++++
 3 files changed, 120 insertions(+)

diff --git a/serverlessworkflow/modules/ROOT/nav.adoc 
b/serverlessworkflow/modules/ROOT/nav.adoc
index f4e96b381..0daa1601b 100644
--- a/serverlessworkflow/modules/ROOT/nav.adoc
+++ b/serverlessworkflow/modules/ROOT/nav.adoc
@@ -131,6 +131,7 @@
 *** Integrations of external services 
 **** 
xref:use-cases/advanced-developer-use-cases/integrations/camel-routes-integration.adoc[]
 **** 
xref:use-cases/advanced-developer-use-cases/integrations/custom-functions-knative.adoc[]
+**** 
xref:use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc[]
 **** 
xref:use-cases/advanced-developer-use-cases/integrations/expose-metrics-to-prometheus.adoc[]
 **** 
xref:use-cases/advanced-developer-use-cases/integrations/serverless-dashboard-with-runtime-data.adoc[]
 *** Testing
diff --git 
a/serverlessworkflow/modules/ROOT/pages/core/custom-functions-support.adoc 
b/serverlessworkflow/modules/ROOT/pages/core/custom-functions-support.adoc
index 6bbbee125..706ac7cc5 100644
--- a/serverlessworkflow/modules/ROOT/pages/core/custom-functions-support.adoc
+++ b/serverlessworkflow/modules/ROOT/pages/core/custom-functions-support.adoc
@@ -300,6 +300,10 @@ The Camel route is responsible to produce the return value 
in a way that the wor
 
 include::../../pages/_common-content/camel-valid-responses.adoc[]
 
+[[con-func-python]
+== Python custom function
+{product_name} implements a custom function to execute embedded Python scripts 
and functions. See 
xref:use-cases/advanced-developer-use-cases/integrations/custom-functions-knative.adoc[Invoking
 Python from {product_name}]
+
 [[con-func-knative]]
 == Knative custom function
 
diff --git 
a/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
 
b/serverlessworkflow/modules/ROOT/pages/use-cases/advanced-developer-use-cases/integrations/custom-functions-python.adoc
new file mode 100644
index 000000000..c22ce81e8
--- /dev/null
+++ 
b/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 must add 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 the execution of Python script in the same memory 
address as 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 an argument of the function call through 
the `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 a special context variable: `$WORKFLOW.python`. Therefore, if you want 
to set the `rng` variable from the previous script as the `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 must define a serverless workflow function definition that invokes the 
Python function. You should specify, within the `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 a 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 the `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-see for all interested in the topic. 
+
+== Additional resources
+
+* xref:core/custom-functions-support.adoc[Custom functions for your 
{product_name} service]
+* xref:core/understanding-jq-expressions.adoc[Understanding JQ expressions]
+
+include::../../../_common-content/report-issue.adoc[]
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to