mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-31 09:58:19 -05:00
52ad474df3787fb94de14c29f263f092a27b9bce
7791 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
55d6495155 |
fix(backend): Increase logging level threshold of RPC service to WARNING (#9576)
Increase the logging threshold to WARNING to avoid chatty RPC service request logs. Before:  |
||
|
|
b5c100748f |
fix(library): Anchor message to bottom of page (#9572)
This PR fixes the layout of the Library page. It properly anchors the 'old experience' message to the bottom of the viewport and improves the overall page structure using semantic HTML and Tailwind best practices. Resolves: #9524 ### Changes 🏗️ - Restructured the LibraryPage component to use proper semantic HTML with a `<main>` element - Added a fixed Alert component at the bottom of the viewport with 8px margin - Used ShadcN Alert component for the 'old experience' message for UI consistency - Implemented responsive behavior to hide the alert on mobile screens - Optimized Tailwind classes by using the `container` utility and removing redundant styles - Improved accessibility and UX by using appropriate semantic elements ### Screenshot <img width="926" alt="image" src="https://github.com/user-attachments/assets/e393007c-639e-4383-922c-41fa67133da8" /> ### 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: <details> <summary>Alert Message at Bottom of Library Page</summary> - [ ] Visit the Library page and verify the alert appears fixed at the bottom with 8px margin - [ ] Resize browser window to various desktop sizes and confirm alert remains centered - [ ] Scroll through Library page content and verify the alert stays fixed at the bottom - [ ] Open developer tools and toggle to mobile view (width < 640px) to confirm alert is hidden - [ ] Test in both light and dark mode to ensure alert styling is consistent with theme - [ ] Click the "here" link in the alert and verify it navigates to the monitoring page - [ ] Verify that QuestionMarkCircled icon in the alert is properly styled and visible </details> --------- Co-authored-by: Bentlybro <tomnoon9@gmail.com> |
||
|
|
09494809c1 |
Enhance process management with error handling and lifecycle improvements (#9565)
Enhance process management with error handling, lifecycle improvements, and better resource management - Added robust error handling for process startup failures. - Implemented proper cleanup of processes during failure scenarios. - Added detailed error logging for process failures and cleanup operations. - Enhanced process lifecycle with health checks. - Added success logging for process terminations. These updates enhance the reliability and maintainability of the system. --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
122be761b6 |
fix(frontend): Consolidate Application Buttons to ShadcN Base Button Component (#9570)
Our application currently uses multiple inconsistent button implementations across the codebase. This PR standardizes buttons to use our base Button component that leverages ShadcN, improving UI consistency, maintainability, and accessibility. Resolves: #9567 ### Changes 🏗️ - Replaced custom button implementations in various components with our base Button component and greatly reduced redundant overlapping styles. - Paired with our designer to streamline our `globals.css` to match the desired approach. - Added button variant documentation in Storybook - Deprecated the obsolete 'primary' class and marked it. ### Screenshots 📷 #### Variants <img width="466" alt="image" src="https://github.com/user-attachments/assets/9e4f6360-57ec-4f28-b702-e57252d67def" /> <img width="418" alt="image" src="https://github.com/user-attachments/assets/a9af17dc-e8bc-429d-a9ac-8380e34b9089" /> <img width="129" alt="image" src="https://github.com/user-attachments/assets/2df5d184-bb49-4640-bfb4-879360ca35e6" /> ### 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: <details> <summary>Button Consolidation Test Plan</summary> Visual Verification - [ ] Verify all button variants (default, destructive, outline, secondary, ghost, link) render correctly - [ ] Confirm button styling is consistent across all themes (light, dark, etc.) - [ ] Validate that the rounded-full style is applied to appropriate variants Functional Testing - [ ] Test click handlers continue to work on all migrated buttons - [ ] Verify hover, focus, and active states display correctly on all buttons - [ ] Confirm disabled states are working properly - [ ] Test loading state animations and behavior Responsive Testing - [ ] Verify button layouts on mobile devices (< 640px) - [ ] Confirm button layouts on tablet devices (640px - 1024px) - [ ] Test button layouts on desktop screens (> 1024px) </details> --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
3adc9724fe |
fix(backend): Error out execution when no starting node is available (#9566)
### Changes 🏗️ Prevent a graph being executed and do nothing by erroring out when no starting node is available. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
e7888ddb9f |
feat(backend): Enable safe URL redirect on web requests for blocks (#9555)
We've disabled the request for security reasons, and the current request library breaks on the 301 web response. ### Changes 🏗️ Add manually safe URL redirect on our web request layer. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
265a9265f7 |
feat(backend): low balance notiifcation (#9534)
<!-- Clearly explain the need for these changes: --> For emailing, we want the user to know when an agent stopped because their balance was too low. This is the first step of that. ### Changes 🏗️ - Raise InsufficientBalanceError from credit system rather than value error when user runs out of money - Handle when an agent output isn't hooked up well - Fix the contents of the email for low balance to be a bit more aligned with the PRD - expose the topup intent from the db manager - objectify the execution stats so we can pass it around a bit more type safe - extract the notification stuff in manager into a function <!-- Concisely describe all of the changes made in this pull request: --> ### 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: --> - [x] Set balance to $0.01 - [x] Run an agent that costs something more than $0.01 - [x] Check you get an email - [x] Check your top up link works --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
27a5635607 |
feat(platform): Library Agent "Delete" functionality (#9546)
- Resolves #9545 ### Changes 🏗️ - fix(platform): Make "Delete" button on `/monitoring` soft-delete the `LibraryAgent` instead of hard-deleting the corresponding `AgentGraph` - feat(frontend): Add "Delete agent" button on `/library/agents/[id]` Technical: - fix(backend): Accept partial input on `update_library_agent` endpoint - feat(backend): Add `GET /api/library/agents/{library_agent_id}` endpoint - refactor(frontend): Replace use of `GraphMeta` by `LibraryAgent` where possible on `/library/agents/[id]` Also, out of scope but important: - fix(frontend): Hide buttons that require direct graph access depending on `agent.can_access_graph` ### 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: - Go to the Library and select an agent - [x] -> `/library/agents/[id]` should load normally - Save this URL for later (especially the ID)! - Click "Delete agent" on `/library/agents/[id]` - [x] -> should show a confirmation dialog - Click "Delete" to confirm - [x] -> should redirect back to `/library` - [x] -> deleted agent should no longer be listed in the Library - Click "Delete agent" on `/monitoring` - [x] -> should show a confirmation dialog - Click "Delete" to confirm - [x] -> agent should disappear from agent list - [x] -> views should reset / deselect the deleted agent where applicable |
||
|
|
ef00ab51e0 | fix(backend): Cleanup on validation logic for AgentExecutorBlock & SmartDecisionMakerBlock | ||
|
|
36447a0c58 |
feat(backend): Add tool execution response on Smart Decision Block (#9552)
**Proposal / Request For Comments** The tool calling provided by the LLM provider requires an output generated by the tool to be looped back as part of the conversation history. The scope of this PR is trying to address the need to fulfill the feature expectation. ### Changes 🏗️ * `Last Tool Output` is introduced to loop back the output of the tool back to Smart Decision Block. * Smart Decision Block execution will be pending unless the `Last Tool Output` us provided where a pending tool call is present in the conversation history. * **Known hack**: The last tool output will prefill all the pending tool calls from the conversation history. * A few tweaks were required to allow a blocking loop to be executed without awaiting on all the inbound links. <img width="1395" alt="image" src="https://github.com/user-attachments/assets/fdad4407-621b-45d0-a457-76b2d4c853b9" /> ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
1e31136358 |
fix(backend): Fix json to_dict method on string value
|
||
|
|
a024b9a398 | fix(backend): Fix conversation history propagation on SmartDecisionBlock & AIBlock | ||
|
|
83d879ea65 |
fix(backend): Use raw content from the LLM as conversation history (#9551)
### Changes 🏗️ Instead of parsing an LlmMessage by ourselves, we use raw content from the LLM as conversation history and accept any format it introduces. Example output: ``` [ { "role": "system", "content": "Thinking carefully step by step decide which function to call. Always choose a function call from the list of function signatures. The test graph is basically an all knowing answer machine you can use it to get an answer" }, { "role": "user", "content": "Hey how's the weather today" }, { "role": "assistant", "audio": null, "content": null, "refusal": null, "tool_calls": [ { "id": "call_Z7CKKIkldylmfWJdE6ZnDxjr", "type": "function", "function": { "name": "storevalueblock", "arguments": "{\"input\":\"I don't have context for your location. Could you provide one?\"}" } } ], "function_call": null } ] ``` ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
d3b83b79f9 |
fix(backend): Append prompt into the conversations output & Remove unused output pin on SmartDecisionBlock (#9550)
### Changes 🏗️ Append prompt into the conversations output & Remove unused output pin on SmartDecisionBlock. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
91b1cc90aa | fix(backend): Fix failure of get_graph_metadata call on SmartDecisionMaker.py | ||
|
|
7747ad8f4c |
feat(backend): Add conversation history as Smart Decision Block output (#9540)
Now that the MVP for Smar Decision Block is available, we need to add this info in the block output: Messages (list) - The messages list sent to the LLM plus its generated response as the latest assistant entry. This is a single list of dictionaries in standard LLM API format). ### Changes 🏗️ * Add `conversations` output pin that populates the update `conversation_history` input pin with the assistant response. * Refactored `Smart Decision Block` to avoid downloading the whole graph on each execution, remove code duplication, declutter data fetching. * Minor UI issue on the smart decision block entry in the search bar. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> Co-authored-by: Swifty <craigswift13@gmail.com> |
||
|
|
f6c93eeeff |
feat(platform): Cost indication for agent runs (#9527)
- Resolves #9181 ### Changes 🏗️ - Add agent run cost indication to `/monitoring` and `/library/agents/[id]` Backend: - Add `GraphExecutionMeta.cost` property - value sourced from `AgentGraphExecution.stats["cost"]` ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [ ] I have tested my changes according to the test plan: - Run an agent - [ ] Check out the agent run on `/library/agents/[id]` -> should show cost - [ ] Check out the agent run on `/monitoring` -> should show cost |
||
|
|
52ee7d150e |
fix(frontend): Remove unused Stripe on frontend (#9536)
### Changes 🏗️ Remove Stripe on frontend. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
c1b12d4a12 |
feat(backend): Add cost on node & graph execution stats (#9520)
<!-- Clearly explain the need for these changes: --> We want the agent run data to be accurate, which means we need to collect it in the right place and with the correct data ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Updates email templates - Updates how we collect the data for the agent run event ### 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: --> - [x] Run agents and read the email we get --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
d7cdf751a8 |
fix(backend): allow more than one arg on the tuple (#9535)
<!-- Clearly explain the need for these changes: --> We allow tuples to be returned from exceptions, but pydantic restricts their size to 1 b/c the typehint. This fixes that ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Adds `, ...` to the tuple type hint ### 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: --> - [x] Extracted from other pr where it was tested as part of an exception |
||
|
|
58f6491496 |
feat(backend): Propagate error arguments on RPC exceptions (#9533)
<!-- Clearly explain the need for these changes: --> ### Changes 🏗️ Exception can contain more than message, so we propagate the whole args as long as it is serializable. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
1011b70d41 |
fix(platform): Add Block Costs for SDM Block (#9531)
The Smart Decision Maker block needs to have costs associated with it.
### Changes 🏗️
- Added config for SDM Block Costs
|
||
|
|
538ad06547 |
fix(backend): Fix exception response on RPC error & Missing Graph Running Status (#9529)
HttpResponse error introduced by RPC is buggy since we are returning the exception as is instead of the string version of it. Also `RUNNING` status on the graph execution is missing. ### Changes 🏗️ * Refactored & fixed the exception return handling on RPC failure. * Add `RUNNING` status update during the graph execution. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
5f5d30a17a |
fix(backend): Use Pyro for RPC by default (#9528)
- Follow-up to #9508 HTTP-based RPC has not been fully tested and should be disabled by default. ### Changes 🏗️ - Disable HTTP-based RPC and use Pyro by default |
||
|
|
af8ea93260 |
feat(backend): handle bounced emails from postmark (#9506)
<!-- Clearly explain the need for these changes: --> If we bounce too many emails from Postmark, they will be really upset with us, which is not so good. We need a way to react when we bounce emails, so we set it up so they notify us via webhooks. We also need to build authentication into those webhooks to prevent random people from sending us fake webhooks. All this together means we need a new route for the inbound webhook. To do this, we need a way to track if the email address is valid. So, after chatting with @itsababseh, we are adding a validated email field that defaults to `True` because all the users are already validated in prod. In dev, we may suffer. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Adds special API Key auth handler to the libs so that we can easily test stuff on the /docs endpoint and re-use it if needed - Adds New Secret for this API key from postmark - Adds a validatedEmail boolean to the`User` table - Adds a postmark endpoint to the routers list for handling the inbound webhook from Postmark - "Handle" all the various things this endpoint could send us (most of them we do nothing about) ### 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: --> - [x] Sign up with john@example.com email (the one postmark uses in webhooks) - [x] Set email validation to true - [x] Send the bounce webhook notice - [x] Check it gets set to false #### For configuration changes: - [x] `.env.example` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) |
||
|
|
108b0aaa4c |
feat(blocks): Enabled block Usage for Smart Decision Maker Block (#9514)
Originally we did not allow Blocks to be used as tools due to the limitations of communicating the correct tool function signatures. It has however, been decided to allow them to be used knowing that there are limitations with them. ### Changes 🏗️ - Added ability to execute blocks as tools ### Checklist 📋 <img width="613" alt="Screenshot 2025-02-25 at 12 49 26" src="https://github.com/user-attachments/assets/e614f56d-2bdc-46c9-8c2c-e56f80343bde" /> - create an agent with an SDM block and a block as a tool - run agent and make sure the block can be called as a tool #### 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: --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
e752f0f342 |
feat(platform/library): Agent Library v2 (#9407)
- Resolves #8774 - Resolves #8775 - Includes back-end work for #9168 - Partially implements #8776 - Partially implements #8777 ### Changes 🏗️ - Add `/library` page - Change target of "Library" navigation link from `/monitoring` to `/library` - Move `/agents/[id]` page to `/library/agents/[id]` - Set application background color to `bg-neutral-50` - Redirect to new library agent's "runs" page (`/library/agents/[id]`) after adding from marketplace Further (technical) frontend changes: - Add types and client methods for all library API endpoints - Added `primary` variant to `agptui/Button` component Backend changes: - Add functionality to library backend - Aggregate agent status - Image generation for use in library view - Add `LibraryAgent.imageUrl` column to DB schema - Sorting & pagination - Explicit relation between library agents and their graph's creator - Refactor & update API endpoints for DX - Other minor refactoring - Add missing but required `MEDIA_GCS_BUCKET_NAME` to `.env.example` ### 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: - `/library` - [x] Create agent from scratch -> should show up on `/library` - [x] Add agent to library from marketplace -> should show up on `/library` - [x] Click on agent in `/library` -> should go to `/library/agents/[id]` - [x] Test sorting & pagination functionality - `/library/agents/[id]` - [x] Fill out inputs and click "Run" -> should run like normally - [x] Select completed agent run -> should show all inputs & outputs - [x] Click "run again" on a completed agent run -> should run successfully with same input - [x] `/monitoring` should still work the same as before --------- Co-authored-by: abhi1992002 <abhimanyu1992002@gmail.com> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
b603ed2d2a |
feature(platform) Smart Decision Maker Block (#9490)
## Task The SmartDecisionMakerBlock is a specialized block in a graph-based system that leverages a language model (LLM) to make intelligent decisions about which tools or functions to invoke based on a user-provided prompt. It is designed to process input data, interact with a language model, and dynamically determine the appropriate tools to call from a set of available options, making it a powerful component for AI-driven workflows. ## How It Works in Practice - **Scenario:** Imagine a workflow where a user inputs, "Send an email to John about the meeting." The SmartDecisionMakerBlock is connected to tools like send_email, schedule_meeting, and search_contacts. - **Execution:** 1. The block receives the prompt and system instructions (e.g., "Choose a function to call"). 2.It identifies the available tools from the graph and constructs their signatures (e.g., send_email(recipient, subject, body)). 3. The LLM analyzes the prompt and decides to call send_email with arguments like recipient: "John", subject: "Meeting", body: "Let’s discuss...". 4. The block yields these tool-specific outputs, which can be picked up by downstream nodes to execute the email-sending action. ## Changes 🏗️ - Add the Smart Decision Maker (SDM) block. - Break circular imports in integration code.  ## Work in Progress ⚠️ **Important note this is a temporary UX for the system - UX will be addressed in a future PR** ⚠️ ### Current Status I’m currently focused on the smart decision logic. The main additions in the ongoing PR include: - Defining function signatures for OpenAI function-calling schemas based on node links and the linked blocks. - Adding tests for function signature generation. - Force all tool calls to be made via an agent. (Need to uncomment) - Restrict each tool call entry to a single node. - simplify the output emission process, to emit each parameter one at a time. - Change test to use agents and hardcode output how I think it should work to test it does actually work - Hook up openai, in a simplified way, to test the function calling (mock for testing) - Once all the above is working, use credentials system and build of llm.py ### What’s Next - Review Process ### Reviewers Phase 1 This PR is now ready for review, during the first phase of reviews I'm looking for comments on approach and logic. Out of scope: code style and organization at this stage ### Reviewers Phase 2 Once we are all happy with the approach and logic. We can open the review process to general code quality and nits, to be considered. --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
f1fa9009b3 | fix(backend): Fix api host for FastAPI RPC Server | ||
|
|
d0d3cc07a3 |
fix(frontend): Minor UI changes; Align badges & buttons on LibraryV1 (#9512)
<!-- Clearly explain the need for these changes: --> ### Changes 🏗️ While V2 Library is coming, this has been my pet peeve <img width="1428" alt="image" src="https://github.com/user-attachments/assets/39c0b84e-4dfe-44e1-b455-cd0330ae7222" /> to <img width="1428" alt="image" src="https://github.com/user-attachments/assets/ab41973b-8ce8-4772-a4ab-e0dcd8b75464" /> ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
1d59fc869d |
feat(backend): Pyro to FastAPI migration for micro service (#9508)
Due to legacy reasons, we've been using Pyro for our inter-process communication channel. While it fulfilled our initial needs, there were a few limitations that have been encountered: * Each connection will reserve 1 thread, when the thread is running out there will be no connection being accepted by the service. * Lack of asynchronous execution mode, we are locked in the sync execution which ended up wasting the I/O bound workload. Moving away from this will unlock async execution support for agent blocks. * Low throughput, while the database is still the main bottleneck, we've started seeing instances where the service is being denied due to the high traffic of the Pyro service. ### Changes 🏗️ Replace the usage of Pyro with the FastAPI Rest HTTP server and make the code work. Introduced the new config: `use_http_based_rpc`: Whether to use HTTP-based RPC for communication between services. If it's enabled FastAPI will be used, if it's disabled existing Pyro will be used. ### 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: --> - [x] Create from scratch and execute an agent with at least 3 blocks with cost (AI blocks). - [x] Import an agent from file upload, and confirm it executes correctly <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [x] `.env.example` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
a694cf1e9d |
chore(libs/deps-dev): bump ruff from 0.9.3 to 0.9.6 in /autogpt_platform/autogpt_libs in the development-dependencies group across 1 directory (#9454)
Bumps the development-dependencies group with 1 update in the /autogpt_platform/autogpt_libs directory: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.9.3 to 0.9.6 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/releases">ruff's releases</a>.</em></p> <blockquote> <h2>0.9.6</h2> <h2>Release Notes</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Add <code>external_task.{ExternalTaskMarker, ExternalTaskSensor}</code> for <code>AIR302</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16014">#16014</a>)</li> <li>[<code>flake8-builtins</code>] Make strict module name comparison optional (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15951">#15951</a>)</li> <li>[<code>flake8-pyi</code>] Extend fix to Python <= 3.9 for <code>redundant-none-literal</code> (<code>PYI061</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16044">#16044</a>)</li> <li>[<code>pylint</code>] Also report when the object isn't a literal (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15985">#15985</a>)</li> <li>[<code>ruff</code>] Implement <code>indented-form-feed</code> (<code>RUF054</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16049">#16049</a>)</li> <li>[<code>ruff</code>] Skip type definitions for <code>missing-f-string-syntax</code> (<code>RUF027</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16054">#16054</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-annotations</code>] Correct syntax for <code>typing.Union</code> in suggested return type fixes for <code>ANN20x</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/16025">#16025</a>)</li> <li>[<code>flake8-builtins</code>] Match upstream module name comparison (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16006">#16006</a>)</li> <li>[<code>flake8-comprehensions</code>] Detect overshadowed <code>list</code>/<code>set</code>/<code>dict</code>, ignore variadics and named expressions (<code>C417</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15955">#15955</a>)</li> <li>[<code>flake8-pie</code>] Remove following comma correctly when the unpacked dictionary is empty (<code>PIE800</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16008">#16008</a>)</li> <li>[<code>flake8-simplify</code>] Only trigger <code>SIM401</code> on known dictionaries (<a href="https://redirect.github.com/astral-sh/ruff/pull/15995">#15995</a>)</li> <li>[<code>pylint</code>] Do not report calls when object type and argument type mismatch, remove custom escape handling logic (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15984">#15984</a>)</li> <li>[<code>pyupgrade</code>] Comments within parenthesized value ranges should not affect applicability (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16027">#16027</a>)</li> <li>[<code>pyupgrade</code>] Don't introduce invalid syntax when upgrading old-style type aliases with parenthesized multiline values (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16026">#16026</a>)</li> <li>[<code>pyupgrade</code>] Ensure we do not rename two type parameters to the same name (<code>UP049</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16038">#16038</a>)</li> <li>[<code>pyupgrade</code>] [<code>ruff</code>] Don't apply renamings if the new name is shadowed in a scope of one of the references to the binding (<code>UP049</code>, <code>RUF052</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16032">#16032</a>)</li> <li>[<code>ruff</code>] Update <code>RUF009</code> to behave similar to <code>B008</code> and ignore attributes with immutable types (<a href="https://redirect.github.com/astral-sh/ruff/pull/16048">#16048</a>)</li> </ul> <h3>Server</h3> <ul> <li>Root exclusions in the server to project root (<a href="https://redirect.github.com/astral-sh/ruff/pull/16043">#16043</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-datetime</code>] Ignore <code>.replace()</code> calls while looking for <code>.astimezone</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16050">#16050</a>)</li> <li>[<code>flake8-type-checking</code>] Avoid <code>TC004</code> false positive where the runtime definition is provided by <code>__getattr__</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16052">#16052</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Improve <code>ruff-lsp</code> migration document (<a href="https://redirect.github.com/astral-sh/ruff/pull/16072">#16072</a>)</li> <li>Undeprecate <code>ruff.nativeServer</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16039">#16039</a>)</li> </ul> <h2>Contributors</h2> <ul> <li><a href="https://github.com/AlexWaygood"><code>@AlexWaygood</code></a></li> <li><a href="https://github.com/Daverball"><code>@Daverball</code></a></li> <li><a href="https://github.com/InSyncWithFoo"><code>@InSyncWithFoo</code></a></li> <li><a href="https://github.com/Lee-W"><code>@Lee-W</code></a></li> <li><a href="https://github.com/MichaReiser"><code>@MichaReiser</code></a></li> <li><a href="https://github.com/carlosgmartin"><code>@carlosgmartin</code></a></li> <li><a href="https://github.com/dhruvmanila"><code>@dhruvmanila</code></a></li> <li><a href="https://github.com/dylwil3"><code>@dylwil3</code></a></li> <li><a href="https://github.com/junhsonjb"><code>@junhsonjb</code></a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's changelog</a>.</em></p> <blockquote> <h2>0.9.6</h2> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Add <code>external_task.{ExternalTaskMarker, ExternalTaskSensor}</code> for <code>AIR302</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16014">#16014</a>)</li> <li>[<code>flake8-builtins</code>] Make strict module name comparison optional (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15951">#15951</a>)</li> <li>[<code>flake8-pyi</code>] Extend fix to Python <= 3.9 for <code>redundant-none-literal</code> (<code>PYI061</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16044">#16044</a>)</li> <li>[<code>pylint</code>] Also report when the object isn't a literal (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15985">#15985</a>)</li> <li>[<code>ruff</code>] Implement <code>indented-form-feed</code> (<code>RUF054</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16049">#16049</a>)</li> <li>[<code>ruff</code>] Skip type definitions for <code>missing-f-string-syntax</code> (<code>RUF027</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16054">#16054</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-annotations</code>] Correct syntax for <code>typing.Union</code> in suggested return type fixes for <code>ANN20x</code> rules (<a href="https://redirect.github.com/astral-sh/ruff/pull/16025">#16025</a>)</li> <li>[<code>flake8-builtins</code>] Match upstream module name comparison (<code>A005</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16006">#16006</a>)</li> <li>[<code>flake8-comprehensions</code>] Detect overshadowed <code>list</code>/<code>set</code>/<code>dict</code>, ignore variadics and named expressions (<code>C417</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15955">#15955</a>)</li> <li>[<code>flake8-pie</code>] Remove following comma correctly when the unpacked dictionary is empty (<code>PIE800</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16008">#16008</a>)</li> <li>[<code>flake8-simplify</code>] Only trigger <code>SIM401</code> on known dictionaries (<a href="https://redirect.github.com/astral-sh/ruff/pull/15995">#15995</a>)</li> <li>[<code>pylint</code>] Do not report calls when object type and argument type mismatch, remove custom escape handling logic (<code>PLE1310</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15984">#15984</a>)</li> <li>[<code>pyupgrade</code>] Comments within parenthesized value ranges should not affect applicability (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16027">#16027</a>)</li> <li>[<code>pyupgrade</code>] Don't introduce invalid syntax when upgrading old-style type aliases with parenthesized multiline values (<code>UP040</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16026">#16026</a>)</li> <li>[<code>pyupgrade</code>] Ensure we do not rename two type parameters to the same name (<code>UP049</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16038">#16038</a>)</li> <li>[<code>pyupgrade</code>] [<code>ruff</code>] Don't apply renamings if the new name is shadowed in a scope of one of the references to the binding (<code>UP049</code>, <code>RUF052</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/16032">#16032</a>)</li> <li>[<code>ruff</code>] Update <code>RUF009</code> to behave similar to <code>B008</code> and ignore attributes with immutable types (<a href="https://redirect.github.com/astral-sh/ruff/pull/16048">#16048</a>)</li> </ul> <h3>Server</h3> <ul> <li>Root exclusions in the server to project root (<a href="https://redirect.github.com/astral-sh/ruff/pull/16043">#16043</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-datetime</code>] Ignore <code>.replace()</code> calls while looking for <code>.astimezone</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16050">#16050</a>)</li> <li>[<code>flake8-type-checking</code>] Avoid <code>TC004</code> false positive where the runtime definition is provided by <code>__getattr__</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16052">#16052</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Improve <code>ruff-lsp</code> migration document (<a href="https://redirect.github.com/astral-sh/ruff/pull/16072">#16072</a>)</li> <li>Undeprecate <code>ruff.nativeServer</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/16039">#16039</a>)</li> </ul> <h2>0.9.5</h2> <h3>Preview features</h3> <ul> <li>Recognize all symbols named <code>TYPE_CHECKING</code> for <code>in_type_checking_block</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/15719">#15719</a>)</li> <li>[<code>flake8-comprehensions</code>] Handle builtins at top of file correctly for <code>unnecessary-dict-comprehension-for-iterable</code> (<code>C420</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15837">#15837</a>)</li> <li>[<code>flake8-logging</code>] <code>.exception()</code> and <code>exc_info=</code> outside exception handlers (<code>LOG004</code>, <code>LOG014</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15799">#15799</a>)</li> <li>[<code>flake8-pyi</code>] Fix incorrect behaviour of <code>custom-typevar-return-type</code> preview-mode autofix if <code>typing</code> was already imported (<code>PYI019</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15853">#15853</a>)</li> <li>[<code>flake8-pyi</code>] Fix more complex cases (<code>PYI019</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15821">#15821</a>)</li> <li>[<code>flake8-pyi</code>] Make <code>PYI019</code> autofixable for <code>.py</code> files in preview mode as well as stubs (<a href="https://redirect.github.com/astral-sh/ruff/pull/15889">#15889</a>)</li> <li>[<code>flake8-pyi</code>] Remove type parameter correctly when it is the last (<code>PYI019</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/15854">#15854</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
cca99c850d |
fix(frontend): Minor UI tweak, fix non-accessible button on phone screen (#9504)
### Changes 🏗️ Fix these buttons:  <img width="337" alt="image" src="https://github.com/user-attachments/assets/702bf3e1-7168-4372-8dcf-71abdea0bc19" /> <img width="337" alt="image" src="https://github.com/user-attachments/assets/362a5e44-3bd4-4849-ba92-8b21cfcfe767" /> ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> --------- Co-authored-by: Abhimanyu Yadav <122007096+Abhi1992002@users.noreply.github.com> |
||
|
|
bfcc0c93b3 |
feat: add Codecov test analytics for flaky and failed tests (#9420)
Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> |
||
|
|
d310943f34 |
chore(backend/deps): bump websockets from 13.1 to 14.2 in /autogpt_platform/backend (#9398)
Bumps [websockets](https://github.com/python-websockets/websockets) from 13.1 to 14.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/python-websockets/websockets/releases">websockets's releases</a>.</em></p> <blockquote> <h2>14.2</h2> <p>See <a href="https://websockets.readthedocs.io/en/stable/project/changelog.html">https://websockets.readthedocs.io/en/stable/project/changelog.html</a> for details.</p> <h2>14.1</h2> <p>See <a href="https://websockets.readthedocs.io/en/stable/project/changelog.html">https://websockets.readthedocs.io/en/stable/project/changelog.html</a> for details.</p> <h2>14.0</h2> <p>See <a href="https://websockets.readthedocs.io/en/stable/project/changelog.html">https://websockets.readthedocs.io/en/stable/project/changelog.html</a> for details.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
0b992223df |
feat(frontend): Onboarding flow UI (#9485)
### Changes 🏗️ This PR adds interactive UI for the onboarding flow, without any connection to the backend. Visit `/onboarding` to see it! - Add Onboarding pages to `app/onboarding/` - Add Onboarding components to `components/onboarding` Note: - Backend isn't connected, so the agents won't run and state isn't preserved - Onboarding state is lost on refresh ### 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: <!-- Put your test plan here: --> - [ ] ... |
||
|
|
70d095ba98 |
fix(frontend): Fix Run/Stop button on Builder page refresh (#9503)
When opened graph is running and Builder page is refreshed the bottom says `Run` but should show `Stop` instead. ### Changes 🏗️ - Fix state on refresh, so that the bottom button is `Stop` if graph is currently running ### 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] Refresh still retrieves past and ongoing execution updates - [x] Bottom Builder button says `Stop` when page is refreshed and graph is running - [x] `Stop` button works and terminates execution |
||
|
|
a692eedb1c |
feat(backend): Notification Integration for credits system (#9488)
<!-- Clearly explain the need for these changes: --> ### Changes 🏗️ Add email notifications on refund events. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details>autogpt-platform-beta-v0.4.11 |
||
|
|
4ae016606b |
feat(backend): move failed messages into a dead letter queue (#9501)
<!-- Clearly explain the need for these changes: --> When we fail to process something, we don't want to keep retrying forever. We should store those and process them later ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Fix the type of the failed exchange from Direct to Topic to allow filtering based on name (allows us later to do more advanced handling of queue types) - abstract processing the messages in a queue a bit to reduce repeated code - abstract how we check if a user wants a notification so that its a bit easier to process - Handle errors better - Abstract model parsing ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> --------- Co-authored-by: Bently <tomnoon9@gmail.com> |
||
|
|
63005631f0 |
fix(frontend): Remove invalid font class names (#9499)
There are many occurrences in the UI code that we are defining the font through class but it refers to the invalid font-family names. This causes the component to end up rendering the text using Times New Roman. ### Changes 🏗️ Remove manual font definition through string font-family name. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
296eee0b4f |
feat(platform/library): Library v2 > Agent Runs page (#9051)
- Resolves #8780 - Part of #8774 ### Changes 🏗️ - Add new UI components - Add `/agents/[id]` page, with sub-components: - `AgentRunsSelectorList` - `AgentRunSummaryCard` - `AgentRunStatusChip` - `AgentRunDetailsView` - `AgentRunDraftView` - `AgentScheduleDetailsView` Backend improvements: - Improve output of execution-related API endpoints: return `GraphExecution` instead of `NodeExecutionResult[]` - Reduce log spam from Prisma in tests General frontend improvements: - Hide nav link names on smaller screens to prevent navbar overflow - Clean up styling and fix sizing of `agptui/Button` Technical frontend improvements: - Fix tailwind config size increments - Rename `font-poppin` -> `font-poppins` - Clean up component implementations and usages - Yeet all occurrences of `variant="default"` - Remove `default` button variant as duplicate of `outline`; make `outline` the default - Fix minor typing issues DX: - Add front end type-check step to `pre-commit` config - Fix logging setup in conftest.py ### 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: - `/agents/[id]` (new) - Go to page -> list of runs loads - Create new run -> runs; all I/O is visible - Click "Run again" -> runs again with same input - `/monitoring` (existing) - Go to page -> everything loads - Selecting agents and agent runs works --------- Co-authored-by: Nicholas Tindle <nicktindle@outlook.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Swifty <craigswift13@gmail.com> Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co> |
||
|
|
f722c70c50 |
feat(blocks): add base for smartlead, apollo, and zerobounce blocks (#9387)
<!-- Clearly explain the need for these changes: --> We want to support some more advanced search specific actions. These are the base API layers and sample blocks for some of the services we need. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - support pydantic models as an output format - add apollo - add smartlead - add zerobounce ### 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: --> - [x] Built agents to test --------- Co-authored-by: Krzysztof Czerwinski <34861343+kcze@users.noreply.github.com> Co-authored-by: Bently <tomnoon9@gmail.com> |
||
|
|
a0be165835 |
feat(settings): Rework user settings page with Form, loading skeleton… (#9476)
Implemented a fully functional user settings page allowing changes to account details and notification preferences. This change uses a server first approach and adds much needed form validation to this page. This PR has added loading skeletons for better UX during data fetching. Refactored related components to support these changes and finally implemented server actions to streamline data ingestion. ## Note to developers: At the moment the notification switches set back to default upon save. We will want to pass in this information after the api is implemented. ## Changes 🏗️ Rebuilt / Refactored `SettingsFormInput` to `SettingsForm`: - Implemented Form Validation - Implemented a form schema with Zod to validate user input - Added toast messaging to properly inform the user if the form has been successfully completed or if there is an error in thrown from the server action. Added `loading.tsx` - Using `Skeletons` we can deliver a better loading UI for our users causing less screen shifting. Added `actions.ts` - Added a server action for the settings page. This server action will handle the updating of user's settings for this page. It handles the interaction between the application and supabase. After this server action is ran we revalidate the path for our settings page ensuring proper data passed to our components. There is an additional TODO for @ntindle for the api endpoint getting created. This endpoint will cover the newly added notification switches and it's toggles. ## Screenshots 📷 ### Before Changes: <img width="1083" alt="image" src="https://github.com/user-attachments/assets/f5283fd5-705b-47cf-a7fa-4ca4d7f03444" /> ### After Changes: <img width="762" alt="image" src="https://github.com/user-attachments/assets/20f96f01-b138-4eb7-8867-ce62a2d603d4" /> <img width="1083" alt="image" src="https://github.com/user-attachments/assets/0ae363f5-068f-48e5-8b0f-c079a08f9242" /> <img width="1083" alt="image" src="https://github.com/user-attachments/assets/8cb045ef-f322-4992-881e-fb92281c55cb" /> #### Form Validation <img width="1083" alt="image" src="https://github.com/user-attachments/assets/b78cfef6-94da-49f1-9c93-56cdb9ea4c96" /> <img width="1083" alt="image" src="https://github.com/user-attachments/assets/ade5dce9-8c4b-40eb-aa0f-ff6d31bc3c3c" /> <img width="245" alt="image" src="https://github.com/user-attachments/assets/88866bbf-4e33-43d9-b04a-b53ac848852d" /> ### 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: <details> <summary>Test Plan</summary> - [ ] Goto the route of `profile/settings` - [ ] Add an invalid email and notice the new validation messaging - [ ] Add invalid passwords that do not match and or is under 8 characters notice the new validation messaging - [ ] Select the cancel button and notice that the form has been set back to the default values - [ ] With the form untouched notice the `Save changes` button is disabled. Toggle a switch and notice the `Save changes` button is now enabled. - [ ] Enter in a valid pair of new passwords in the `New Password` and `Confirm New Password` input fields and select `Save changes` - [ ] Enter in the same passwords again and notice that we will now be shown an Error. This error is bubbling up from supabase in our backend and is stating `New password should be different from the old password` </details> --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Nicholas Tindle <nicktindle@outlook.com> Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
d1832ce10b |
fix(frontend): Fix return type and usage of api.listLibraryAgents() (#9498)
- Follow-up to #9258 The front end is fetching `/library/agents` -> `LibraryAgent[]` but using the result as `GraphMeta[]`. This breaks a bunch of things. ### Changes 🏗️ Frontend: - Add `LibraryAgent` type for `api.listLibraryAgents()` - Amend all broken usages of `LibraryAgent` objects - Introduce branded typing for `LibraryAgent.id` and `GraphMeta.id` to disallow mixing them. This prevents incorrect use in the future, and reduces the chance of this frontend issue accumulating interest on existing open PRs. Backend: - Add a migration to create `LibraryAgent` objects for all existing `AgentGraphs` ### 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: --> - [x] Check that all existing agents are listed in the agents list on `/monitoring` (check against DB or `GET /api/graphs`) - [x] Check that all views of `/monitoring` work - [x] Try to run an agent and check its status |
||
|
|
dcbbe11c53 |
fix(backend): correctly check if email service is set up (#9497)
<!-- Clearly explain the need for these changes: --> I made a mistake in how we check if postmark exists ### Changes 🏗️ - adds a more explicit setting of postmark to none and extra checking to prevent its use if it isn’t set <!-- Concisely describe all of the changes made in this pull request: --> ### 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: --> - [x] I have no plan, it’s a simple logic bug so if it passes CI it’s good |
||
|
|
43460b8553 |
feat(platform): Add Dispute & Refund resolution process (#9466)
### Changes 🏗️ Added the dispute & refund handling on the system. https://github.com/user-attachments/assets/2d9c7b48-2ee1-401d-be65-5e9787c8130e ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
0117006373 |
fix(backend): Fix failing poetry.lock validation on CI (#9489)
### Changes 🏗️ Poetry.lock is using the old version that the CI is not using. Set the Poetry version to ^2.1.1. ### 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: <!-- Put your test plan here: --> - [ ] ... <details> <summary>Example test plan</summary> - [ ] Create from scratch and execute an agent with at least 3 blocks - [ ] Import an agent from file upload, and confirm it executes correctly - [ ] Upload agent to marketplace - [ ] Import an agent from marketplace and confirm it executes correctly - [ ] Edit an agent from monitor, and confirm it executes correctly </details> #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> |
||
|
|
e550846737 |
feat(backend): add ability to send emails to notification service (#9469)
<!-- Clearly explain the need for these changes: --> We need a way to send emails for the email service to function. We will depend on Postmark to do that. This PR adds a simple email-sending service with the required settings to make it work. It also builds on the previous agent run by sending the emails that are in the immediate queue. Keep in mind that the email template leaves a bit to be desired. ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Add `email.py` with the minimum required to send an email (plus type handling) - Add settings configs for the token and the send address to the `settings.py` and `.env.example` - Add a db call to get user email by ID since the `metadata` field of `prisma.models.User` isn't serializable over our message bus tool `Pyro` that the `DatabaseManager` uses - Add a horrible `AgentRun` email template using `jinja2` - Add `postmarker` to `pyproject.toml` ### 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: --> - [x] Build and run an agent and make sure it emails me (must be signed into same domain as receiving address for now) #### For configuration changes: - [x] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [x] I have added a check that disables email if config is not set correctly - [x] I have included a list of my configuration changes in the PR description (under **Changes**) --------- Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
15275e2ce1 |
feat(backend): spawn the notifications service + basic test (#9464)
We want to send emails on a schedule, in response to events, and be expandable without being overbearing on the amount of effort to implement. We also want this to use rabbitmq and be easy for other services to send messages into. This PR adds the first use of the service to simply show a log message ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - Adds a new backend service for notifications - Adds first notification into the service -> Agent Execution - Adds spawning the notification service Also - Adds RabbitMQ to CI so we can test stuff - Adds a minor fix for one of the migrations that I thought was causing failures, but isn't but the change is still useful ### 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: --> - [x] Built and ran an agent and ensured the following log line appeared which shows the event would have sent an email ``` 2025-02-10 15:52:02,232 INFO Processing notification: user_id='96b8d2f5-a036-437f-bd8e-ba8856028553' type=<NotificationType.AGENT_RUN: 'AGENT_RUN'> data=AgentRunData(agent_name='CalculatorBlock', credits_used=0.0, execution_time=0.0, graph_id='30e5f332-a092-4795-892a-b063a8c7bdd9', node_count=1) created_at=datetime.datetime(2025, 2, 10, 15, 52, 2, 162865) ``` #### For configuration changes: - [ ] `.env.example` is updated or already compatible with my changes - [ ] `docker-compose.yml` is updated or already compatible with my changes - [ ] I have included a list of my configuration changes in the PR description (under **Changes**) None of the other ports are configurable via .env.example listing so left as is <details> <summary>Examples of configuration changes</summary> - Changing ports - Adding new services that need to communicate with each other - Secrets or environment variable changes - New or infrastructure changes such as databases </details> --------- Co-authored-by: Reinier van der Leer <pwuts@agpt.co> |
||
|
|
ce1d63c517 |
feat(backend): Library v2 Agents and Presets (#9258)
- Blocked by #9267 This re-introduces changes from the following PRs with fixes: - #9218 - #9211 ### Changes 🏗️ - See #9218 - See #9211 Fixes: - Fix Prisma query statements in `v2.library.db` - Fix creation of (library) agents - Fix test cleanup of (library) agents - Fix handling and passing of `node_input` parameters ### 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] Create & run a new agent - [x] Update & run an existing agent |