Witty Autocomplete Agent
Witty Autocomplete Agent is an AI agent that helps users to fill Data Contract schemas faster. It leverages the Witty Autocomplete Agent which, by contacting the LLM provider defined in Witty, generates fields suggestions.

Prerequisites
- Witty Autocomplete Agent microservice must be up & running and reachable from Witboost Core.
 
Configuring the agent
In your values.yaml add these lines:
# inside your values.yaml
ui:
  appConfig:
    # ... other configurations  ...
    witty:
      scaffolder:
        smartSuggestions:
          baseUrl: <base URL where Witty Autocomplete Agent is running>
          enabled: true
This will tell Witboost Core where to send autocomplete requests coming from enabled templates.
Setting up a Witty template
Witty Autocomplete is available both for Creation and Edit templates kinds. However, as of now, you can only enable Witty for tables and its inner rows.
Now, let's take this template as a reference:
apiVersion: witboost.com/v1
kind: EditTemplate
metadata:
  name: edit-template
  title: Edit Template
  description: Edit Template
spec:
  owner: agile_lab
  useCaseTemplateId:
    - urn:dmb:utm:my-template:0.0.0
  parameters:
    - title: Data Contract Schema
      properties:
        schema:
          title: Schema
          description: Data Contract Schema
          type: array
          ui:ArrayFieldTemplate: ArrayTableTemplate
          default: []
          items:
            type: object
            ui:ObjectFieldTemplate: TableRowTemplate
            required:
              - name
              - dataType
            properties:
              name:
                type: string
                title: Name
              surname:
                type: string
                title: Surname
  # ... other template stuff ...
To enable Witty on this template table, we will modify the schema property, which is an ArrayTableTemplate, and set it to be a WittyTableTemplate as follows:
apiVersion: witboost.com/v1
kind: EditTemplate
metadata:
  name: edit-template
  title: Edit Template
  description: Edit Template
spec:
  owner: agile_lab
  useCaseTemplateId:
    - urn:dmb:utm:my-template:0.0.0
  parameters:
    - title: Data Contract Schema
      properties:
        schema:
          title: Schema
          description: Data Contract Schema
          type: array
          ui:ArrayFieldTemplate: WittyTableTemplate
          default: []
          items:
            type: object
            ui:ObjectFieldTemplate: TableRowTemplate
            required:
              - name
              - dataType
            properties:
              name:
                type: string
                title: Name
              surname:
                type: string
                title: Surname
  # ... other template stuff ...
Finally, we use WittyTableRowTemplate in place of TableRowTemplate:
apiVersion: witboost.com/v1
kind: EditTemplate
metadata:
  name: edit-template
  title: Edit Template
  description: Edit Template
spec:
  owner: agile_lab
  useCaseTemplateId:
    - urn:dmb:utm:my-template:0.0.0
  parameters:
    - title: Data Contract Schema
      properties:
        schema:
          title: Schema
          description: Data Contract Schema
          type: array
          ui:ArrayFieldTemplate: WittyTableTemplate
          default: []
          items:
            type: object
            ui:ObjectFieldTemplate: WittyTableRowTemplate
            required:
              - name
              - dataType
            properties:
              name:
                type: string
                title: Name
              surname:
                type: string
                title: Surname
  # ... other template stuff ...
But we are not done yet! We have just enabled Witty on this table. Now, we need to decide which are the fields to be autocompletable by the agent. When at least one field is configured, the Witty Table autocomplete button will show up.
Witty Enabled Fields
Witty Autocomplete currently supports three types of fields:
- WittyTextPicker
 - CustomUrlPicker
 - EntitySearchPicker
 
WittyTextPicker
Let's define both name and surname as Witty-enabled fields:
schema:
  title: Schema
  description: Data Contract Schema
  type: array
  ui:ArrayFieldTemplate: WittyTableTemplate
  default: []
  items:
    type: object
    ui:ObjectFieldTemplate: WittyTableRowTemplate
    required:
      - name
      - dataType
    properties:
      name:
        type: string
        title: Name
        ui:field: WittyTextPicker
      surname:
        type: string
        title: Surname
        ui:field: WittyTextPicker
That's it! Now both Name and Surname fields will be adorned by the Witty Autocomplete button.
CustomUrlPicker
To use Witty Autocomplete in a CustomUrlPicker, you have to enable smart suggestion by putting wittySuggestions.enabled in template.
Here's an example
schema:
  title: Schema
  description: Data Contract Schema
  type: array
  ui:ArrayFieldTemplate: WittyTableTemplate
  default: []
  items:
    type: object
    ui:ObjectFieldTemplate: WittyTableRowTemplate
    required:
      - name
      - dataType
    properties:
      businessTags:
        title: Business Tags
        type: array
        wittySuggestions:
          enabled: true
        description: Business Tags
        ui:field: CustomUrlPicker
        ui:style:
          minWidth: 400
        ui:options:
          allowArbitraryValues: false
          selectedField: value
        ui:displayFields:
          - id
          - value
          - description
        ui:apiSpec:
          retrieval:
            microserviceId: 'mocked-microservice'
            params:
              limit: 10
              areaType: ${{ domain }}
          validation:
            microserviceId: 'mocked-microservice'
EntitySearchPicker
To use Witty Autocomplete in a EntitySearchPicker, you have to enable smart suggestion by putting wittySuggestions.enabled in template.
schema:
  title: Schema
  description: Data Contract Schema
  type: array
  ui:ArrayFieldTemplate: WittyTableTemplate
  default: []
  items:
    type: object
    ui:ObjectFieldTemplate: WittyTableRowTemplate
    required:
      - name
      - dataType
    properties:
      key_results:
        title: Key Results
        description: Key Results
        type: array
        ui:field: EntitySearchPicker
        ui:options:
          multiSelection: true
          entities:
            - type: Remote
              wittySuggestions:
                enabled: true
              displayName: Remote
              fieldsToSave:
                - id
                - name
                - description
              columns:
                - name: 'Key Result'
                  path: '{{name}}'
                - name: 'Desc'
                  path: '{{description}}'
              apiSpec:
                retrieval:
                  baseUrl: 'url'
                  path: '/path/to/api'
                  method: POST
To ensure the AI agent can provide accurate and meaningful suggestions, it is crucial that every option includes a clear and concise description. These descriptions serve as essential context for the language model, enabling it to better understand the purpose and usage of each option. Without detailed descriptions, the agent’s ability to generate relevant and precise field suggestions may be limited, leading to less effective or ambiguous recommendations.
Advanced settings
You can supply some additional settings to a Witty table. To do so, you can add properties into the WittyTableTemplate. Here you have a list of available properties:
apiVersion: witboost.com/v1
kind: EditTemplate
metadata:
  name: edit-template
  title: Edit Template
  description: Edit Template
spec:
  owner: agile_lab
  useCaseTemplateId:
    - urn:dmb:utm:my-template:0.0.0
  parameters:
    - title: Data Contract Schema
      properties:
        schema:
          title: Schema
          description: Data Contract Schema
          type: array
          witty:
            context: # a list of strings that can be attached into the request to give additional context to the underlying LLM model
              - each row of this table is a set of metadata about columns of a dataset.
              - each metadata row follows the open metadata specification
          ui:ArrayFieldTemplate: WittyTableTemplate
          default: []
          items:
  # ... other template stuff ...
Here is a detailed table of possible witty table configurations. Each property must be set on the WittyTableTemplate component.
| Property | Description | Default value | 
|---|---|---|
witty.context | (optional) Additional context that can be supplied to the Witty service for better scoping of the autocomplete objective | None |