Task Executor
What's TaskExecutor?
TaskExecutor facilitates building of applications that utilize the computational power of the Golem Network
in a transparent and efficient manner. It is a @golem-sdk/golem-js based library allowing running computation tasks,
designed for batch map-reduce like scenarios.
With TaskExecutor, developers can focus on implementing their computational tasks without delving into the details of communicating
with the Golem Network or managing modules such as payments or market.
System requirements
To use task-executor
, it is necessary to have yagna installed, with a recommended minimum version of v0.15.0. Yagna is a
service that communicates and performs operations on the Golem Network, upon your requests via the SDK. You
can follow these instructions
to set it up.
Simplified installation steps
In order to get started and on Golem Network and obtain test GLM tokens (tGLM
) that will allow you to build on the
test network, follow these steps:
Join the network as a requestor and obtain test tokens
curl -sSf https://join.golem.network/as-requestor | bash -
yagna service run
yagna payment init --sender --network holesky
yagna payment fund --network holesky
yagna payment status --network holesky
Obtain your app-key
to use with TaskExecutor
If you don't have any app-keys available from yagna app-key list
, go ahead and create one with the command below.
You will need this key in order to communicate with yagna
from your application via golem-js
.You can set it
as YAGNA_APPKEY
environment variable.
yagna app-key create my-golem-app
Installation
@golem-sdk/task-executor
is available as a NPM package.
npm install @golem-sdk/task-executor
Building
To build a library available to the Node.js environment:
npm run build
This will generate production code in the dist/
directory ready to be used in your Node.js or browser applications.
Usage
Hello World example
import { TaskExecutor } from "@golem-sdk/task-executor";
import { pinoPrettyLogger } from "@golem-sdk/pino-logger";
(async function main() {
const executor = await TaskExecutor.create({
logger: pinoPrettyLogger({ level: "info" }),
demand: {
workload: {
imageTag: "golem/alpine:latest",
},
},
market: {
rentHours: 0.5,
pricing: {
model: "linear",
maxStartPrice: 0.5,
maxCpuPerHourPrice: 1.0,
maxEnvPerHourPrice: 0.5,
},
},
});
try {
await executor.run(async (exe) => console.log((await exe.run("echo 'Hello World'")).stdout));
} catch (error) {
console.error("Computation failed:", error);
} finally {
await executor.shutdown();
}
})();
More examples
The examples directory in the repository contains various usage patterns for the TaskExecutor. You can browse
through them and learn about the recommended practices. All examples are automatically tested during our release
process.
In case you find an issue with the examples, feel free to submit
an issue report to the repository.
You can find even more examples and tutorials in
the JavaScript API section of the Golem Network Docs.
Supported environments
The library is designed to work with LTS versions of Node (starting from 18)
and with browsers.
Documentation
Debugging
The library uses the debug package to provide debug logs. To enable them, set the DEBUG
environment variable to task-executor:*
to see the related log lines. For more information, please refer to the debug package documentation.
Testing
Read the dedicated testing documentation to learn more about how to run tests of the library.
Contributing
It is recommended to run unit tests and static code analysis before committing changes.
npm run lint
npm run format
See also
- Golem, a global, open-source, decentralized supercomputer that anyone can access.
- Learn what you need to know to set up your Golem requestor node:
- Learn about preparing your own Docker-like images for
the VM runtime