Class: Assistant::TechnicalArticleManagementToolBuilder::UpdateRevisionTool
- Inherits:
-
ManagementTool
- Object
- RubyLLM::Tool
- ManagementTool
- Assistant::TechnicalArticleManagementToolBuilder::UpdateRevisionTool
- Defined in:
- app/services/assistant/technical_article_management_tool_builder.rb
Overview
Edits only the open ArticleRevision proposal, never the live Article.
Instance Method Summary collapse
-
#execute(id:, revision_id:, edit_token:, **attributes) ⇒ String
Updates an editable proposal under optimistic locking.
-
#name ⇒ String
Stable tool name.
Methods inherited from ManagementTool
Constructor Details
This class inherits a constructor from Assistant::TechnicalArticleManagementToolBuilder::ManagementTool
Instance Method Details
#execute(id:, revision_id:, edit_token:, **attributes) ⇒ String
Updates an editable proposal under optimistic locking.
462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 |
# File 'app/services/assistant/technical_article_management_tool_builder.rb', line 462 def execute(id:, revision_id:, edit_token:, **attributes) safely('update revision') do article = find_article!(id) (:update, article) attrs = attributes.symbolize_keys.slice( *REVISION_EDITABLE_FIELDS, *ArticleRevision::ARTICLE_DATA_FIELDS ) raise ToolError, 'No editable revision fields were provided.' if attrs.empty? TechnicalArticleManagementToolBuilder.validate_association_ids!(attrs) TechnicalArticleManagementToolBuilder.validate_revision_assignee!(attrs[:review_assignee_id]) if attrs.key?(:review_assignee_id) revision = find_revision!(article, revision_id) revision.with_lock do raise ToolError, 'Only a draft content revision can be edited.' unless revision.draft? raise ToolError, 'This content revision changed since it was read. Refresh it before editing.' unless TechnicalArticleManagementToolBuilder.revision_edit_token(revision) == edit_token.to_s revision.update!(attrs) end revision_response(article, revision) end end |
#name ⇒ String
Returns stable tool name.
451 |
# File 'app/services/assistant/technical_article_management_tool_builder.rb', line 451 def name = 'update_technical_article_revision' |