base on Open-source toolkit to build an AI copilot for SaaS products <br>
<p align="center">
<a href="https://www.superflows.ai">
<img src="public/sf-logo-long.png" width="250px" alt="Superflows Logo" />
</a>
</p>
<h2 align="center" >Open Source alternative to OpenAI Assistants API</h3>
<p align="center"></p>
<p align="center"><a href="https://superflows.ai/crm-demo">๐ฎ Demo</a> ยท <a href="https://superflows.ai">๐ Website</a> ยท <a href="https://docs.superflows.ai">๐ Docs</a> ยท <a href="https://join.slack.com/t/superflowsusers/shared_invite/zt-1zf93teqq-0I9H_niiGruVDPFVSzGj9w">๐ฌ Slack</a> ยท <a href="https://github.com/Superflows-AI/chat-ui">๐ฅ React Components</a></p>
<br />
Superflows makes it easy to add an AI assistant to a software product. This lets users ask questions in natural language and the assistant makes calls to the software's API to answer them.
E.g. a CRM user could ask:
> Have we closed any deals with publishing companies? If so, who was involved in those deals?
or:
> Eve is ill today. Move her calls to the rest of the team - prioritise those who have had contact with the prospect before.
A user could ask their analytics assistant:
> Did the Google Ads campaign we ran last month have a positive ROI? How many conversions did it generate?
Superflows will make API calls to answer these questions or complete tasks, and write code to analyse and plot data.
**Check out a demo of Superflows in a CRM [here](https://superflows.ai/crm-demo).**
You can try out the cloud version for free [**here**](https://dashboard.superflows.ai) or self-host. You can learn more on the [docs pages](https://docs.superflows.ai/).
https://github.com/Superflows-AI/superflows/assets/33871096/b1b355d2-a851-4b11-aabb-3fd3ff375f5d
## Features
- [x] Calls API endpoints to complete tasks and answer questions for users
- [x] Writes code to analyse data and create plots ๐
- [x] Uses RAG (retrieval) to answer questions on static knowledge ๐
- [x] Developer dashboard to configure and test your AI assistant ๐๏ธ
- [x] Stateful streaming API ๐๏ธ
- [x] UI components (React components [here](https://github.com/Superflows-AI/chat-ui)) ๐ฅ๏ธ
- [x] Upload API specifications for fast set up ๐จ
- [x] Asks for user confirmation before taking potentially damaging actions โ
- [x] Track usage in dashboard ๐
- [x] Multi-LLM support (Finetuned GPT-3.5, GPT-4, Mixtral, Llama2...) ๐
- [x] Collects user feedback on AI replies for fine-tuning ๐
- [x] Self-hosting, including with fully open source model. **[Reach out](mailto:
[email protected]?subject=Self-hosting+OS+Model:+Superflows&body=Hi+Henry%2C%0A%0AI+work+at+COMPANY+as+ROLE.%0A%0AWe%27d+specifically+like+to+use+the+Open+Source+model+because+REASON.%0A%0AAll+the+best%2C%0AYOUR+NAME+%3A%29) if interested.** ๐
## Setup
Setting up an AI Assistant in [Superflows Cloud](https://dashboard.superflows.ai) is simple:
1. Upload your API specification
2. Test in the playground
3. Integrate into your product in 1 line of code
### Dashboard
Superflows has a developer dashboard where you can configure, evaluate and debug your AI assistant before putting it into production.
You can interact with your assistant on the <b>'Playground'</b>. <b>'Developer mode'</b> shows you under the hood of what the assistant is thinking and planning. <b>'Mock API responses'</b> enables you to check the behaviour of the assistant without connecting it to an API.
<img src="public/sf-crm-ai-corner.png" width="500px" alt="Superflows playground" />
The <b>'Actions'</b> page lets you control which API endpoints your assistant can call to answer user queries in a simple dashboard.
These endpoints can easily be uploaded via an Open API Specification, or entered manually.
<img src="public/sf-actions-corner.png" width="500px" alt="Superflows actions page" />
### UI Components
Superflows comes with out-of-the-box React UI components. These components let you integrate Superflows into your product in 1 line of code ([integration guide](https://docs.superflows.ai/docs/integration-guide/react)).
<img src="public/modal.png" width="500px" alt="Superflows modal" />
### API
The API specification can be found in the [docs](https://docs.superflows.ai/docs/category/api-specification).
## Support / talk with founders
- [Schedule Demo ๐](https://meetings-eu1.hubspot.com/matthew-phillips/superflows-demo)
- [Slack Community ๐ญ](https://join.slack.com/t/superflowsusers/shared_invite/zt-1zf93teqq-0I9H_niiGruVDPFVSzGj9w)
- Our numbers ๐ +44 (755) 7101-159 / +44 (780) 580-6766
- Our emails โ๏ธ [
[email protected]](mailto:
[email protected][email protected]&subject=Chat+about+Superflows) / [
[email protected]](mailto:
[email protected][email protected]&subject=Chat+about+Superflows)
## Self-hosting
We haven't written a self-hosting guide for Superflows yet. If you're interested in self-hosting, please reach out to us on [Slack](https://join.slack.com/t/superflowsusers/shared_invite/zt-1zf93teqq-0I9H_niiGruVDPFVSzGj9w) or [email](mailto:
[email protected][email protected]&subject=Interested+in+self-hosting).
## Roadmap
[Available here.](https://docs.superflows.ai/blog/roadmap)
## Setting up locally
- ### Local setup
You need to be running a local version of [Supabase](https://supabase.io) to develop this project locally.
[Here are comprehensive instructions on using the Supabase CLI](https://supabase.com/docs/guides/cli)
(note: if you have used Supabase in other projects before, you may have to `supabase stop` before running `supabase start`)
**If using `npm`**
```bash
npm i
npm install supabase --save-dev
npx supabase start
```
The 2nd command should give you an `anon_api_key` and a `service_role` key.
You'll need to enter these into the `.env` file. Check out `.env.example` for the format and variables required.
Once you fill in `.env.example`, rename it `.env`.
To run in development mode:
```bash
make run
```
(Alternatively, if you don't have `make`, use `npm run dev`)
- ### Docker Setup
Locate the `init.sh` file in the `docker/development` directory after cloning the project.
#### Prerequisites
- Ensure that git is installed on your system. If it's not installed, the script will notify you.
- Install docker and docker compose using the relevant installation guide for your operating system
#### Usage
If you are running on windows, preferably use the git bash cli or WSL, you might need sudo permissions
Make the Script Executable
Before using the script for the first time, ensure it is executable then run it:
chmod +x init.sh
./init.sh
This script is designed to facilitate the process of setting up and managing the Superflows development environment with Supabase and also to setup the base environment configuration in your project. It ensures that the Supabase repository is either cloned or updated, and it also checks and manages the .env file, merging the existing .env.example files if necessary.
By default the script runs docker compose to run start the containers and build (where required)
#### Verify contents and set custom env
The script should have created the supabase folder and also a .env file.
- Review the env variables and correct or change to suit your environment - the env should already contain sensible defaults (however)
- [optional] Set your OPENAI key [`OPENAI_API_KEY`] ([reach out to self-host our fine-tuned LLM](mailto:
[email protected]?subject=Self-hosting+OS+Model:+Superflows&body=Hi+Henry%2C%0A%0AI+work+at+COMPANY+as+ROLE.%0A%0AWe%27d+specifically+like+to+use+the+Open+Source+model+because+REASON.%0A%0AAll+the+best%2C%0AYOUR+NAME+%3A%29))
- [optional] set in your SMTP credentials to enable email
- Run the compose file (depending on what version of compose you have installed)
```
docker compose up -d build
```
or
```
docker-compose up -d build
```
", Assign "at most 3 tags" to the expected json: {"id":"2063","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"