The Ollama docs where very out of date and needed updating so I have
updated them and added some screenshots so its easier to follow.
I have also added a new Ollama model to the platform, "llama3.2" as that
is what i based the tutorial off and its name is easy to find in the
list of models
I also added a new folder in the "imgs" dir to store the Ollama related
photo just to keep things tidy
- Resolves#8326
Create a Twitter integration with some small frontend changes.
### Changes
1. Add Twitter OAuth 2.0 with PKCE support for authentication.
2. Add a way to multi-select from a list of enums by creating a
multi-select on the frontend.
3. Add blocks for Twitter integration.
4. `_types.py` for repetitive enums and input types.
5. `_builders.py` for creating parameters without repeating the same
logic.
6. `_serializer.py` to serialize the Tweepy enums into dictionaries so
they can travel easily from Pyro5.
7. `_mappers.py` to map the frontend values to the correct request
values.
> I have added a new multi-select feature because my list contains many
items, and selecting all of them makes the block cluttered. This new
block displays only the first two items and then show something like "2
more" . It works only for list of enums.
### Blocks
Block Name | What It Does | Error Reason | Manual Testing
-- | -- | -- | --
`TwitterBookmarkTweetBlock` | Bookmark a tweet on Twitter | No error | ✅
`TwitterGetBookmarkedTweetsBlock` | Get all your bookmarked tweets from
Twitter | No error | ✅
`TwitterRemoveBookmarkTweetBlock` | Remove a bookmark for a tweet on
Twitter | No error | ✅
`TwitterHideReplyBlock` | Hides a reply of one of your tweets | No error
| ✅
`TwitterUnhideReplyBlock` | Unhides a reply to a tweet | No error | ✅
`TwitterLikeTweetBlock` | Likes a tweet | No error | ✅
`TwitterGetLikingUsersBlock` | Gets information about users who liked
one of your tweets | No error | ✅
`TwitterGetLikedTweetsBlock` | Gets information about tweets liked by
you | No error | ✅
`TwitterUnlikeTweetBlock` | Unlikes a tweet that was previously liked |
No error | ✅
`TwitterPostTweetBlock` | Create a tweet on Twitter with the option to
include one additional element such as media, quote, or deep link. | No
error | ✅
`TwitterDeleteTweetBlock` | Deletes a tweet on Twitter using Twitter ID
| No error | ✅
`TwitterSearchRecentTweetsBlock` | Searches all public Tweets in Twitter
history | No error | ✅
`TwitterGetQuoteTweetsBlock` | Gets quote tweets for a specified tweet
ID | No error | ✅
`TwitterRetweetBlock` | Retweets a tweet on Twitter | No error | ✅
`TwitterRemoveRetweetBlock` | Removes a retweet on Twitter | No error |
✅
`TwitterGetRetweetersBlock` | Gets information about who has retweeted a
tweet | No error | ✅
`TwitterGetUserMentionsBlock` | Returns Tweets where a single user is
mentioned, just put that user ID | No error | ✅
`TwitterGetHomeTimelineBlock` | Returns a collection of the most recent
Tweets and Retweets posted by you and users you follow | No error | ✅
`TwitterGetUserTweetsBlock` | Returns Tweets composed by a single user,
specified by the requested user ID | No error | ✅
`TwitterGetTweetBlock` | Returns information about a single Tweet
specified by the requested ID | No error | ✅
`TwitterGetTweetsBlock` | Returns information about multiple Tweets
specified by the requested IDs | No error | ✅
`TwitterUnblockUserBlock` | Unblock a specific user on Twitter | No
error | ✅
`TwitterGetBlockedUsersBlock` | Get a list of users who are blocked by
the authenticating user | No error | ✅
`TwitterBlockUserBlock` | Block a specific user on Twitter | No error |
✅
`TwitterUnfollowUserBlock` | Allows a user to unfollow another user
specified by target user ID | No error | ✅
`TwitterFollowUserBlock` | Allows a user to follow another user
specified by target user ID | No error | ✅
`TwitterGetFollowersBlock` | Retrieves a list of followers for a
specified Twitter user ID | Need Enterprise level access | ❌
`TwitterGetFollowingBlock` | Retrieves a list of users that a specified
Twitter user ID is following | Need Enterprise level access | ❌
`TwitterUnmuteUserBlock` | Allows a user to unmute another user
specified by target user ID | No error | ✅
`TwitterGetMutedUsersBlock` | Returns a list of users who are muted by
the authenticating user | No error | ✅
`TwitterMuteUserBlock` | Allows a user to mute another user specified by
target user ID | No error | ✅
`TwitterGetUserBlock` | Gets information about a single Twitter user
specified by ID or username | No error | ✅
`TwitterGetUsersBlock` | Gets information about multiple Twitter users
specified by IDs or usernames | No error | ✅
`TwitterSearchSpacesBlock` | Returns live or scheduled Spaces matching
specified search terms [for a week only] | No error | ✅
`TwitterGetSpacesBlock` | Gets information about multiple Twitter Spaces
specified by Space IDs or creator user IDs | No error | ✅
`TwitterGetSpaceByIdBlock` | Gets information about a single Twitter
Space specified by Space ID | No error | ✅
`TwitterGetSpaceBuyersBlock` | Gets list of users who purchased a ticket
to the requested Space | I do not have a monetized account for this | ✅
`TwitterGetSpaceTweetsBlock` | Gets list of Tweets shared in the
requested Space | No error | ✅
`TwitterUnfollowListBlock` | Unfollows a Twitter list for the
authenticated user | No error | ✅
`TwitterFollowListBlock` | Follows a Twitter list for the authenticated
user | No error | ✅
`TwitterListGetFollowersBlock` | Gets followers of a specified Twitter
list | Enterprise level access | ❌
`TwitterGetFollowedListsBlock` | Gets lists followed by a specified
Twitter user | Enterprise level access | ❌
`TwitterGetListBlock` | Gets information about a Twitter List specified
by ID | No error | ✅
`TwitterGetOwnedListsBlock` | Gets all Lists owned by the specified user
| No error | ✅
`TwitterRemoveListMemberBlock` | Removes a member from a Twitter List
that the authenticated user owns | No error | ✅
`TwitterAddListMemberBlock` | Adds a member to a Twitter List that the
authenticated user owns | No error | ✅
`TwitterGetListMembersBlock` | Gets the members of a specified Twitter
List | No error | ✅
`TwitterGetListMembershipsBlock` | Gets all Lists that a specified user
is a member of | No error | ✅
`TwitterGetListTweetsBlock` | Gets tweets from a specified Twitter list
| No error | ✅
`TwitterDeleteListBlock` | Deletes a Twitter List owned by the
authenticated user | No error | ✅
`TwitterUpdateListBlock` | Updates a Twitter List owned by the
authenticated user | No error | ✅
`TwitterCreateListBlock` | Creates a Twitter List owned by the
authenticated user | No error | ✅
`TwitterUnpinListBlock` | Enables the authenticated user to unpin a
List. | No error | ✅
`TwitterPinListBlock` | Enables the authenticated user to pin a List. |
No error | ✅
`TwitterGetPinnedListsBlock` | Returns the Lists pinned by the
authenticated user. | No error | ✅
`TwitterGetDMEventsBlock` | Gets a list of Direct Message events for the
authenticated user | Need Enterprise level access | ❌
`TwitterSendDirectMessageBlock` | Sends a direct message to a Twitter
user | Need Enterprise level access | ❌
`TwitterCreateDMConversationBlock` | Creates a new group direct message
| Need Enterprise level access | ❌
### Need to add more stuff
1. A normal input to select date and time.
2. Some more enterprise-level blocks, especially webhook triggers.
Supported triggers
Event Name | Description
-- | --
Posts (by user) | User creates a new post.
Post deletes (by user) | User deletes an existing post.
@mentions (of user) | User is mentioned in a post.
Replies (to or from user) | User replies to a post or receives a reply
from another user.
Retweets (by user or of user) | User retweets a post or someone retweets
the user's post.
Quote Tweets (by user or of user) | User quote tweets a post or someone
quote tweets the user's post.
Retweets of Quoted Tweets (by user or of user) | Retweets of quote
tweets by the user or of the user.
Likes (by user or of user) | User likes a post or someone likes the
user's post.
Follows (by user or of user) | User follows another user or another user
follows the user.
Unfollows (by user) | User unfollows another user.
Blocks (by user) | User blocks another user.
Unblocks (by user) | User unblocks a previously blocked user.
Mutes (by user) | User mutes another user.
Unmutes (by user) | User unmutes a previously muted user.
Direct Messages sent (by user) | User sends direct messages to other
users.
Direct Messages received (by user) | User receives direct messages from
other users.
Typing indicators (to user) | Indicators showing when someone is typing
a message to the user.
Read receipts (to user) | Indicators showing when the user has read a
message.
Subscription revokes (by user) | User revokes a subscription to a
service or content.
---------
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
- Resolves#8930
- Depends on #8725
### Changes 🏗️
- feat(platform): Support multiple credentials inputs on blocks
Aside from `credentials`, fields within the name pattern `*_credentials`
are now also supported!
- Update docs with info on multi credentials support
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
- [x] Ask @aarushik93 to test
- Resolves#8931
- Follow-up to #8358
### Changes 🏗️
- Avoid double specifying provider and cred types on `credentials`
inputs
- Move `credentials` sub-schema validation from `CredentialsField` to
`CredentialsMetaInput.validate_credentials_field_schema(..)`, which is
called in `BlockSchema.__pydantic_init_subclass__`
- Use `ProviderName` enum globally
<!-- Clearly explain the need for these changes: -->
We want to be able to test the monitor page with importing and exporting
agents
### Changes 🏗️
- Adds more test ids
- Builds out monitor.page.ts
- adds import export tests
- Fixes#8791, fixes#8795, fixes#8792
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [ ] I have clearly listed my changes in the PR description
- [ ] I have made a test plan
- [ ] I have tested my changes according to the test plan:
Writing/Running the automated tests
### Changes 🏗️
Adding incremental documentation based on YouTube series:
- How to Submit an Agent to the AutoGPT Marketplace
- How to Download and Import an Agent from the AutoGPT Marketplace
(Local Hosting)
- Creating a Basic AI Agent with AutoGPT
- How to Edit an Agent in AutoGPT
- How to Delete an Agent in AutoGPT
---------
Co-authored-by: Bently <tomnoon9@gmail.com>
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
<!-- Clearly explain the need for these changes: -->
Nick wants others to be able to write tests besides Nick
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
- Fixes various import errors across the docs to fix dead links
- Adds Docs for making and debugging your own tests
---------
Co-authored-by: Swifty <craigswift13@gmail.com>
- Move `autogpt_libs.supabase_integration_credentials_store` into
`backend`
- `.store` -> `backend.integrations.credentials_store`
- `.types` -> added to `backend.data.model`
- Rename `SupabaseIntegrationCredentialsStore` to
`IntegrationCredentialsStore`
We wanted to get a few security things in quickly in #8403 and had to
make some compromises to do so. This picks those up and fixes them.
- Resolves#8540
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
---------
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Aarushi <50577581+aarushik93@users.noreply.github.com>
- feat(blocks): Add GitHub Pull Request Trigger block
## feat(platform): Add support for Webhook-triggered blocks
- ⚠️ Add `PLATFORM_BASE_URL` setting
- Add webhook config option and `BlockType.WEBHOOK` to `Block`
- Add check to `Block.__init__` to enforce type and shape of webhook event filter
- Add check to `Block.__init__` to enforce `payload` input on webhook blocks
- Add check to `Block.__init__` to disable webhook blocks if `PLATFORM_BASE_URL` is not set
- Add `Webhook` model + CRUD functions in `backend.data.integrations` to represent webhooks created by our system
- Add `IntegrationWebhook` to DB schema + reference `AgentGraphNode.webhook_id`
- Add `set_node_webhook(..)` in `backend.data.graph`
- Add webhook-related endpoints:
- `POST /integrations/{provider}/webhooks/{webhook_id}/ingress` endpoint, to receive webhook payloads, and for all associated nodes create graph executions
- Add `Node.is_triggered_by_event_type(..)` helper method
- `POST /integrations/{provider}/webhooks/{webhook_id}/ping` endpoint, to allow testing a webhook
- Add `WebhookEvent` + pub/sub functions in `backend.data.integrations`
- Add `backend.integrations.webhooks` module, including:
- `graph_lifecycle_hooks`, e.g. `on_graph_activate(..)`, to handle corresponding webhook creation etc.
- Add calls to these hooks in the graph create/update endpoints
- `BaseWebhooksManager` + `GithubWebhooksManager` to handle creating + registering, removing + deregistering, and retrieving existing webhooks, and validating incoming payloads
## Other improvements
- fix(blocks): Allow having an input and output pin with the same name
- fix(blocks): Add tooltip with description in places where block inputs are rendered without `NodeHandle`
- feat(blocks): Allow hiding inputs (e.g. `payload`) with `SchemaField(hidden=True)`
- fix(frontend): Fix `MultiSelector` component styling
- feat(frontend): Add `AlertDialog` UI component
- feat(frontend): Add `NodeMultiSelectInput` component
- feat(backend/data): Add `NodeModel` with `graph_id`, `graph_version`; `GraphModel` with `user_id`
- Add `make_graph_model(..)` helper function in `backend.data.graph`
- refactor(backend/data): Make `RedisEventQueue` generic and move to `backend.data.execution`
- refactor(frontend): Deduplicate & clean up code for different block types in `generateInputHandles(..)` in `CustomNode`
- dx(backend): Add `MissingConfigError`, `NeedConfirmation` exception
---------
Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>