This is the code repository for the world famous Einstein Vision and Language Model Builder package, also known affectionately as "The Einstein Playground".
The Einstein Vision and Language Model Builder is a UI layered on top of Einstein’s integrated REST APIs for Einstein . It enables you to more quickly upload datasets, train deep learning models and test the performance of those models through an easy-to-use GUI.
If you simply want to install and use the Playground in your org, bop over to the AppExchange listing. This will give you the opportunity to install the latest version of the managed package in your org and get started in minutes. Seriously. This is the easiest way to go.
If, however, you are looking for code examples of how to work with the Einstein.ai services, need to install an unmanaged version of the Playground, or are dying to propose some additions/extensions/fixes to the Playground, then you are in the right place.
The Einstein Vision and Language services provide REST API services to developers who want to add AI services into their custom applications - either on or off Salesforce Core. These are really powerful services, but being developer services, you have to either write custom code or use an HTTP request tool like cURL or Postman to get started.
Enter the Playground. The Playground really provides four capabilities:
- A User Interface, based on Salesforce Lightning Web Components, that enables a user to upload datasets, train models, test predictions, and evaluat the model performance
- Apex "wrapper" code that manages all the complexities of working with the Einstein.ai services such as constructing the JWT token, getting access tokens, refreshing tokens, etc. Global Apex class methods are provided to make predictions which greatly reduces the amount of custom code you need to write.
- Invocable Apex methods available to Process Builder and Flows to easily add predictions on unstructured text or images to your applications with no code.
- Lightning components that can be added to Lightning Record Pages or App Pages to add AI prediction capability to your UI.
There are actually two variants of the Playground - Managed and Unmanaged - contained on two Git branches - master and unmanaged. The master branch includes all the namespace stuff necessary to create a managed package. The unmanaged branch is the same code, just not set up with a namespace and not meant to be in a managed package.
The DX project on the master
branch is already configured to do development work on the managed package, includeing configuration for the einsteinplay
namespace. You will need to configure your DevHub to register the einsteinplay
namespace.
If you just want access to the unmanaged code, switch to the unmanaged
branch. You can push the code into a Scratch Org or convert it and use the mdapi to deploy it to a Dev Org.
Again, if what you need is any of the four things listed above, then go to the AppExchange listing, install the latest version of the managed package, and be on your merry way. If you need access to this source code, then read on.
Clone the repo to your local file system.
git clone https://github.com/dschultz-mo/EinsteinPlayground
run the init.sh script, passing an alias name for your new scratch org
./init.sh yourScratchOrgAlias
You can use the Salesforce CLI to deploy the source into a regular Salesforce org using the Metatdata API.
Authenticate against the deployment org
sfdx force:auth:web:login -a yourOrgAlias
Create an output directory for the to be converted source
mkdir mdapi
Convert the source from Salesforce DX format to Metatdata API format
sfdx force:source:convert -r force-app -d mdapi
Deploy the source
sfdx force:mdapi:deploy -d mdapi -u yourOrgAlias
There are no external dependencies. All JavaScript libraries required are included as static resources.
To use the Playground GUI, invocable Apex, global Apex or Lightning components, see the Einstein Vision and Language Model Builder User Guide.
Version updates can be found in the Einstein Vision and Language Model Builder Release Notes.
If you create any projects that depend on the Invocable Apex or Global Apex, let us know and we will call them out here!
Thanks to Mike Brosseau, René Winkelmeyer and all the other nameless pioneers who created countless code repos and snippets that lead to this project over the years. Also thanks to our previous maintainers. Dennis Schultz Surabhi Ravishankar
The Playground is updated and enhanced on a time-available basis. We would love to hear your ideas for what else could be done. Feel free to submit Issues on this repo.
But better still, we would love to see your contributions! Reach out if you have some ideas. If you are a coder, fork it and send a pull request.