Creating Custom AI Actions for the AI Positron add-on
In the AI Positron Assistant preferences page, you can define a reference to a folder that contains custom actions.
Once the add-on is installed, the New Document wizard can be used to create either a new AI Positron Custom Action file that contains a custom action definition in JSON format or an AI Positron Custom Actions List that contains a JSON array with multiple defined actions. Validation and content completion are automatically provided for such custom action files. To edit multi-line parameter values, you can switch the edited action JSON definition file to the Author visual editor mode.
If the action definition files are saved in the custom actions folder defined in the AI Positron Assistant preferences page, the AI Positron Assistant view should automatically reload its Actions list to include them.
Various examples of custom AI actions can be found here and can be used as starting points for your own similar AI actions.
- id
-
A unique ID for the action. If the ID of the action starts with
agent.hidden.action.
, then the action is not visible to be invoked directly but can be called by using theinvoke_ai_action
function.Example:{ "id": "improve.grammar.custom.styles", "title": "...", ... }
Note:An Oxygen desktop plugin can contribute an extra translation.xml file that contains translations. Such a plugin may translate titles and descriptions for AI actions using the action ID as part of the key, for example:<key value="improve.grammar.custom.styles.title"> <val lang="en_US">Improve Styles</val> <val lang="de_DE">...</val> ... </key> <key value="improve.grammar.custom.styles.description"> <val lang="en_US">Analyze and improve styles.</val> <val lang="de_DE">...</val> ... </key>
- title
- The action name/title that gets presented in the UI.
Example:
{ "id": "improve.grammar.custom.styles", "title": "Improve Grammar and Styles", ... }
- description
- A longer description of what the AI action does, usually used as a tooltip.
Example:
{ "id": "...", "title": "Improve Grammar and Styles", "description": "Improve the grammar and styles based on the company's style guide." }
- short-description
- A shorter description for the AI action that usually appears under the
action title in the chat view. If not specified, it defaults to the
description value.
Example:
{ "id": "action.translate.to.english", "title": "English", "short-description": "Translate to English", "description": "Translate the selected content to English while preserving its original DITA XML markup.", .... }
- categoryId
- The optional category in which the AI action is visually grouped, if not
specified it defaults to
Other
. Example:{ "id": "improve.grammar.custom.styles", "title": "Improve Grammar and Styles", "categoryId": "Rewrite" }
- embed-assist
- Set this optional boolean parameter to
true
to add the AI action to the top right AI Positron Assistant drop-down button that appears when editing content in the Author visual editing mode. - quick-assist
- Set this optional boolean parameter to
true
to add the AI action to the quick assist bulb drop down menu that appears in the left vertical stripe. - profile
- Set this optional parameter to confine the AI action to be visible only when
the add-on is installed in certain application types.
Example:
{ "id": "action.create.new.xslt", "title": "Create New XSLT", "profile": "xml_editor, xml_developer", .... }
- framework
- A framework pattern (like 'An example of an AI action that shows this for any edited XML document (as it matches the
DITA*
') or content type name (like 'text/css
') that, when matched, presents the action when the document pertaining to the framework is opened. Example:{ "id": "generate.img.alternate.text", "title": "Generate Image Alternate Text", "framework": "*DITA*", ... }
text/xml
content type) can be found here. - prompt_ref
- A reference to a separate file (usually encoded in Markdown) that defines the entire action prompt.
- context
- Multi-line parameter value that defines the prompt that is sent to the AI along with the content to be processed.
- examples
- An optional JSON array that encodes examples that may help the AI better understand how to apply the prompt.
- expand-params
- A JSON array that can define values for parameters that should be expanded in the context content.
- parameters
- An array of parameters that can be used to specify an engine name,
temperature, or the available function definitions. Some of the most
commonly set parameters:
- engine
-
The optional name of the engine to use with the AI action, no matter what the default AI engine model is configured to be.
Example:{ "id": "action.review.logical.mistakes", ...., "parameters": { "engine": {"name": "o1"} } }
- temperature
- Temperature is an optional parameter that governs the randomness and thus the creativity of the responses. It is always a number between 0 (more deterministic) and 1 (more random). The default value is 0 and it should, in general, remain unspecified when your AI actions are intended for technical documentation that is precise in nature.
- function_refs
- An optional JSON array that describes which functions can be used when executing this action. The list of functions that can be referenced is available here.
- input-type
- Describes how the XML content from the document that is sent to the platform
should be processed, as regular XML including markup tags or as plain text
without the tags and with all DITA XML content references and key references
expanded. By default, its value is assumed to be 'markup', which means the
content is sent exactly as it is. Example of an AI action that requires the
input to be sent without any markup tags and with the DITA XML conrefs and
keyrefs
expanded:
{ "id": "action.answer.questions", "type": "show-response", "description": "Generate answers to questions you ask based on the selected text or on the entire document content.", "input-type": "plain-text", .... }
- type
- The type of the AI action. Some of the most commonly used type values are
listed below:
- replace-selection-with-fragment
- The most common type of action. Sends the selected content to
the AI platform and proposes to replace the selection with the
received response. If there is no selected content
automatically, the entire document is selected when the action
is invoked.Example:
{ "id" : "replace.bold.with.uicontrol", "title" : "Replace bold with uicontrol", "type" : "replace-selection-with-fragment", "context" : "Replace the bold element with the uicontrol element (<uicontrol>)....", }
- insert-schema-aware-fragment
- Inserts the content received from the AI engine in the current
document at the cursor position or at an offset specified by the
insert-modes
. If the inserted content is invalid at the proposed offset, the application attempts to find a proper location for it. Example:{ "id": "action.update.title.based.on.content", "type": "insert-schema-aware-fragment", "title": "Update Title", "context": "You are tasked with creating a title for the given text, summarizing it and focusing on its main points:" }
- prompt-user
- Shows a dialog box that asks for a context and then runs the
action.Example:
{ "id": "action.formula.equation", "title": "Formula/Equation", "type": "prompt-user", "additional_info": {"prompt-example": "hydrogen peroxide"}, ... }
- show-response
- Sends the selected content or the entire document to the AI
platform and shows the response to the end user.Example:
{ "id": "action.review.logical.mistakes", "title": "Logical Inconsistencies", "type": "show-response", "context": "Find logical and inconsistency mistakes in the content and return a report.", }
- create-new-document
- Shows a dialog box that asks for a context and then creates a
new document based on the received server response. The
"additional_info"/"properties"/"file_extension"
property can be set to impose an extension for the newly created document.Example:{ "id": "action.create.schematron.rules", "title": "Schematron Rules from Style Guide", "type": "create-new-document", "additional_info": { "properties": {"file_extension": "sch"} }, "prompt_ref": "prompts/create-schematron-rules.md" }
- insert-modes
- A JSON array that defines places for inserting the content in an XML
document. The first mode for which the XPath condition becomes true is run.
Such modes are used when the AI action
type
isinsert-schema-aware-fragment
.
Hope this helped, as always you can use the feedback form below if you want to ask more details about the possibilities of AI actions or want to brag about the custom AI actions you have created.