Skip to content

Commit 32052c9

Browse files
committed
Merge branch 'master' of github.com:Shuffle/shuffle-docs
2 parents 6b62876 + ca0842a commit 32052c9

File tree

5 files changed

+179
-78
lines changed

5 files changed

+179
-78
lines changed

articles/2.1.0-rc2.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Shuffle 2.1.0 release candidate: Deterministic AI Agents, High Availability and Datastore Automation
2+
3+
**2.1.0 Release Candidate**: May 7th - June 17th, 2025
4+
5+
![image](https://github.com/user-attachments/assets/10ce7e2d-eabe-4418-bb64-67401f2f6733)
6+
7+
## ✅ Important Updates
8+
There are more important updates on using deterministic, controlled AI Agents and LLM's coming in the full 2.1.0 release.
9+
We will be running a few release candidates before 2.1.0 is properly released at the start of August.
10+
11+
- *High Availability for Orborus:*
12+
Added high availability and tracking for Orborus in both cloud and on-prem environments, improving reliability and failover support.
13+
14+
- *Datastore Category Automation and Publishing*
15+
Making Datastore Categories public is now available, and can be controlled on the [/admin?tab=datastore](https://shuffler.io/admin?tab=datastore) page.
16+
This system allows e.g. subscribing to others' published threat lists or publishing your own detection rulesets.
17+
18+
![image](https://github.com/user-attachments/assets/94343581-a3e4-4f23-acef-8a29e7ee7385)
19+
20+
Datastore Automation can be controlled from within specific categories. For now, it supports running workflows and sending webhooks natively.
21+
22+
![image](https://github.com/user-attachments/assets/4cbb1c63-ea3f-4b1f-b1b0-605daab81952)
23+
24+
## 🚀 Features
25+
26+
- *Singul*:
27+
Singul is now able to upload translations automatically to the Shuffle Datastore. It is additionally getting a frontend library to manage apps and authentication in third-party platforms.
28+
29+
- *Partner & Use Case System:*
30+
Introduced a new system for managing partners and use cases, enhancing organizational and workflow flexibility.
31+
32+
- *Bulk Datastore Updates:*
33+
Now allows setting datastore entries in bulk. Datastore has been updated with categories able to handle hundreds of thousands of entries.
34+
35+
- *Sub-organization Management Improvements:*
36+
- Sub-organization deletion and associated cache management.
37+
- Ability to skip SSO for admin on sub-organizations, simplifying admin experience.
38+
- Added a button with verification to the UI to delete a suborg
39+
40+
![image](https://github.com/user-attachments/assets/191d0bb9-b57e-48f4-8ab3-d4430eaaca22)
41+
42+
## 🐞 Bug Fixes
43+
44+
- *Multi-tenant Workflow Loading:*
45+
Resolved issues where sub-organization workflows would incorrectly load distributed workflows from the parent organization, preventing reference mismatches.
46+
47+
- *Organization Cache Fixes:*
48+
- Multiple fixes improving cache handling, particularly for large organizations and during org region redirection.
49+
- Ensured sub-organization cache is properly deleted when authentication is updated.
50+
51+
- *App Activation in Suborgs:*
52+
Fixed a problem where apps with the same app_name would not activate correctly in sub-organizations.
53+
54+
- *Failover Fixes:*
55+
Addressed failover edge cases for Orborus, improving stability.
56+
57+
- *Region Propagation:*
58+
Fixed issues with region information not propagating correctly across the platform.
59+
60+
## 🔧 Other Updates
61+
62+
- *Minor Print and Documentation Edits:*
63+
Various improvements in print statements and minor documentation updates.
64+
65+
- *Performance Optimizations:*
66+
- Various cache optimizations for faster loading of large organizations.
67+
- Removed unnecessary organization cache before request redirection.

articles/Shuffle_Pricing.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
![Shuffle Pricing](https://github.com/frikky/shuffle-docs/blob/master/assets/Shuffle_Pricing.png?raw=true)
2+
3+
# Overview
4+
5+
Shuffle's pricing is primarily based on two things:
6+
1. License - Based on App-Runs.
7+
2. Support - Based on Post-Onboarding Needs.
8+
9+
We also have [training](https://shuffler.io/training) and [professional services](https://shuffler.io/professional-services), but they are optional and available if you need them.
10+
11+
## What are App-Runs?
12+
13+
App-runs are the actual actions that run inside your workflow. They are a simple and transparent way to track the platform's usage.
14+
15+
For example, the workflow below has many nodes or 'actions'. Whenever it runs, these actions are counted as app-runs.
16+
17+
Only the actions that run are counted; the rest are ignored and not counted. In the workflow below, even though it has many actions, if it stops at the (red) filter action, only 4 app-runs are counted.
18+
19+
![Shuffle Pricing](https://github.com/frikky/shuffle-docs/blob/master/assets/Shuffle_Pricing_Workflow.png?raw=true)

assets/Shuffle_Pricing.png

24.9 KB
Loading
133 KB
Loading

docs/API.md

Lines changed: 93 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,98 @@ curl https://shuffler.io/api/v1/workflows/{workflow_id}/executions/{execution_id
243243
{"success": true}
244244
```
245245

246+
## Datastore API
247+
Datastore is a persistent storage mechanism you can use for workflows to talk to each other between executions, or for normal storage. Below are the endpoints related to datastore (cache) creation, listing, deletion and more. This API is available to Python apps by using self.set_cache("key", "value") and self.get_cache("key")
248+
249+
### Add a key
250+
To add a key to a specific category, add `"category": "name"` to the JSON body.
251+
252+
Methods: POST, PUT
253+
254+
```bash
255+
curl https://shuffler.io/api/v1/orgs/{org_id}/set_cache -H "Authorization: Bearer APIKEY" -d '{"key":"hi", "value":"1234", "category": "category"}'
256+
```
257+
258+
259+
**Success response**
260+
```json
261+
{"success": true}
262+
```
263+
264+
### Add multiple keys
265+
To add a key to a specific category, add `"category": "name"` to the JSON body. Only keys of the first discovered category will be added.
266+
267+
Methods: POST, PUT
268+
269+
```bash
270+
curl https://shuffler.io/api/v2/datastore?bulk=true -H "Authorization: Bearer APIKEY" -d '[{"key":"hi", "value":"1234", "category": "category"}]'
271+
```
272+
273+
274+
**Success response**
275+
```json
276+
{"success": true}
277+
```
278+
279+
280+
### Get a key
281+
Search for a cache key. For keys set in a workflow, it may unavailable with the normal API, and require execution_id & authorization in the JSON body.
282+
283+
To get a key from a specific category, add `"category": "name"` to the JSON body.
284+
285+
Methods: POST
286+
287+
```bash
288+
curl https://shuffler.io/api/v1/orgs/{org_id}/get_cache -H "Authorization: Bearer APIKEY" -d '{"org_id": "ORG_ID", "key": "hi"}'
289+
```
290+
291+
292+
**Success response**
293+
```json
294+
{"success":false,"workflow_id":"99951014-f0b1-473d-a474-4dc9afecaa75","execution_id":"f0b2b4e9-90ca-4835-bdd4-2889ef5f926f","org_id":"2e7b6a08-b63b-4fc2-bd70-718091509db1","key":"hi","value":"1234"}
295+
```
296+
297+
298+
### List all keys
299+
List existing datastore (cache) keys. By default, this will include the 50 last modified keys from any category.
300+
301+
To list keys from a specific category, ?category=<name> to the URL.
302+
303+
Available queries:
304+
- top: default 50. How many keys to return.
305+
- cursor: to get the next page
306+
- category: the category to get
307+
308+
Methods: GET
309+
310+
```bash
311+
curl https://shuffler.io/api/v1/orgs/{org_id}/list_cache -H "Authorization: Bearer APIKEY"
312+
```
313+
314+
315+
**Success response**
316+
```json
317+
{"success":true,"keys":[{"success":false,"workflow_id":"99951014-f0b1-473d-a474-4dc9afecaa75","execution_id":"f0b2b4e9-90ca-4835-bdd4-2889ef5f926f","org_id":"2e7b6a08-b63b-4fc2-bd70-718091509db1","key":"hi","value":"1234"}]}
318+
```
319+
320+
### Delete a key
321+
Deletes a key, completely removing all references to it.
322+
323+
To delete a key from a specific category, add `"category": "name"` to the JSON body.
324+
325+
Methods: DELETE
326+
327+
```bash
328+
curl https://shuffler.io/api/v1/orgs/{org_id}/delete_cache -H "Authorization: Bearer APIKEY" -d '{"org_id": "ORG_ID", "key": "hi"}'
329+
```
330+
331+
332+
**Success response**
333+
```json
334+
{"success": true}
335+
```
336+
337+
246338
## App API
247339
Apps are the building blocks used in [workflows](/docs/apps#workflows), as they contain the actions to be executed. First of all, there are two types of apps:
248340

@@ -589,83 +681,6 @@ curl https://shuffler.io/api/v1/users/generateapikey -H "Authorization: Bearer A
589681
{"success": true, "username": "username", "verified": false, "apikey": "new apikey"}
590682
```
591683

592-
## Datastore API
593-
Datastore is a persistent storage mechanism you can use for workflows to talk to each other between executions, or for normal storage. Below are the endpoints related to datastore (cache) creation, listing, deletion and more. This API is available to Python apps by using self.set_cache("key", "value") and self.get_cache("key")
594-
595-
### Add a key
596-
To add or edit a cache key use
597-
598-
To add a key to a specific category, add `"category": "name"` to the JSON body.
599-
600-
Methods: POST, PUT
601-
602-
```bash
603-
curl https://shuffler.io/api/v1/orgs/{org_id}/set_cache -H "Authorization: Bearer APIKEY" -d '{"key":"hi", "value":"1234"}'
604-
```
605-
606-
607-
**Success response**
608-
```json
609-
{"success": true}
610-
```
611-
612-
### Get a key
613-
Search for a cache key. For keys set in a workflow, it may unavailable with the normal API, and require execution_id & authorization in the JSON body.
614-
615-
To get a key from a specific category, add `"category": "name"` to the JSON body.
616-
617-
Methods: POST
618-
619-
```bash
620-
curl https://shuffler.io/api/v1/orgs/{org_id}/get_cache -H "Authorization: Bearer APIKEY" -d '{"org_id": "ORG_ID", "key": "hi"}'
621-
```
622-
623-
624-
**Success response**
625-
```json
626-
{"success":false,"workflow_id":"99951014-f0b1-473d-a474-4dc9afecaa75","execution_id":"f0b2b4e9-90ca-4835-bdd4-2889ef5f926f","org_id":"2e7b6a08-b63b-4fc2-bd70-718091509db1","key":"hi","value":"1234"}
627-
```
628-
629-
630-
### List all keys
631-
List existing datastore (cache) keys. By default, this will include the 50 last modified keys from any category.
632-
633-
To list keys from a specific category, ?category=<name> to the URL.
634-
635-
Available queries:
636-
- top: default 50. How many keys to return.
637-
- cursor: to get the next page
638-
- category: the category to get
639-
640-
Methods: GET
641-
642-
```bash
643-
curl https://shuffler.io/api/v1/orgs/{org_id}/list_cache -H "Authorization: Bearer APIKEY"
644-
```
645-
646-
647-
**Success response**
648-
```json
649-
{"success":true,"keys":[{"success":false,"workflow_id":"99951014-f0b1-473d-a474-4dc9afecaa75","execution_id":"f0b2b4e9-90ca-4835-bdd4-2889ef5f926f","org_id":"2e7b6a08-b63b-4fc2-bd70-718091509db1","key":"hi","value":"1234"}]}
650-
```
651-
652-
### Delete a key
653-
Deletes a key, completely removing all references to it.
654-
655-
To delete a key from a specific category, add `"category": "name"` to the JSON body.
656-
657-
Methods: DELETE
658-
659-
```bash
660-
curl https://shuffler.io/api/v1/orgs/{org_id}/delete_cache -H "Authorization: Bearer APIKEY" -d '{"org_id": "ORG_ID", "key": "hi"}'
661-
```
662-
663-
664-
**Success response**
665-
```json
666-
{"success": true}
667-
```
668-
669684
## File API
670685
Below are the endpoints related to file creation, uploading, downloading, listing and more. This API is available to Python apps by using self.set_files(files) and self.get_file(file_id)
671686

@@ -1154,4 +1169,4 @@ As you can see, I triggered this Singul execution through the Singul app (not th
11541169
<img src="https://github.com/frikky/shuffle-docs/blob/master/assets/singul-debugging-step2.png?raw=true">
11551170

11561171

1157-
Based on the output, and the input mentioned in "Body", you should be able to figure out what is going on here.
1172+
Based on the output, and the input mentioned in "Body", you should be able to figure out what is going on here.

0 commit comments

Comments
 (0)