Concerto is a task management plugin that leverages chat history from various workspace channels to generate task actions. These actions include creating new tasks and updating the status of existing tasks. All actions are posted to a "Congregated Channel" for confirmation, ideally through a specific emoji reaction. Once confirmed, the plugin updates the corresponding Google Sheet. Example of a task management Spreadsheet.
Concerto uses GetStream for chat UI and storage services, and NodeJS for listening/sending to chat content and fetching the Gemini API. The NodeJS server using the information from AI to update a task management board in Google Sheet(in the future, this could be Jira, Github Project, etc.)
- Node v21 (or
nvm use
) - Enabled Google Workspace API
- With
credentials.js
andtoken.js
in the./server
directory. See the README in./server/services/googlesheet/README.md
for more details.
- With
- GetStream
- Chat API Key
- Chat API Token
- User Name and User Token
- Gemini API Key
- Create a
.env
file fromenv.sample
. The user inenv.sample
is a bot account created for demo purposes. If the project or user has expired, follow the GetStream tutorials to set up the project and create users. - Run
npm i
andnpm run start
. - Once the React app is running locally, you can see different channels representing various work groups in the product development organization.
- Create a
.env
file fromenv.sample
, and fill theAPI_KEY
variable with your Gemini key. Note that the example GetStream information might have expired. - Set up your own Workspace account and retrieve the
credentials.js
andtoken.js
files from./server/services/googlesheet
for OAuth consent. [Instructions on Google Sheet doc] - In another terminal, run
npm i
andnpm run start
.
For demo purposes, we have a series of scripts to automate conversations on the GetStream chat API. This can simulate real conversations within a company, create users with different roles, create channels, and load conversations into the desired channel. See the README in ./server/automation
for more details.
See the README in ./server/export
.
This enables users to use "/fetchAI" to manually call the API. We didn't end up using this apporach. Instead, we automatically collect the channel history when a conversation is pause(having a timeout) and generate actions through AI.