Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This contract is currently in the Proof-of-concept stage and still subject to change

Introduction

To expose AI services to our system, we need an API to be exposed for the MediaHaven installation. The contract of this API is as follows (anything can be added before the path):When creating new Module Plugins having of the following https://mediahaven.atlassian.net/wiki/spaces/CS/pages/edit-v2/4438884395#Categories

  • Embedding

  • GenerativeMetadata

then MediaHaven will connect to this plugin using REST API calls, which must implement the following methods depending on the category.

Methods

GET /config-rules
Status
colourBlue
titleALL CATEGORIES

It gives the possible configuration parameters for this connector

...

Code Block
languagejson
{
  "Rules": [
    {
      "Name": "TextModel",
      "Type": "String|Integer|Boolean",
      "Required": false,
      "Default" : "ada2"
    }
  ]
}

POST /text-embedding
Status
colourBlue
titleEMBEDDING

Expected parameters

...

Text as JSON body in Textproperty and Config based on config rules

...

Code Block
languagejson
{
  "Text": "Given me pictures of lamas",
  "Dimensions": 1536,
  "Config": {
    "TextModel" : "ada2"
  }
}

Expected headers

...

Code Block
x-api-key: <optional api key>

Output

Array of float (vector) with size equal to dimensions. The vector is normalized

POST /embedding

...

MUST BE normalized. When the provided dimensions are 0, the embedding should be in the natural dimensions used by the embedding. If the embeddings cannot be provided in the requested dimensions, then a 400 HTTP error code should be returned.

Ex.

Code Block
languagejson
{
  "Embedding": [ 
    -0.006929283495992422,
    -0.005336422007530928,
    ... (omitted for spacing)
    -4.547132266452536e-05,
    -0.024047505110502243]
}

POST /embedding
Status
colourBlue
titleEMBEDDING

Expected parameters

Record as JSON body in Metadata property and Config based on config rules

...

Code Block
languagejson
{
  "Config": {
    "TextModel" : "ada2"
  },
  "Metadata": {
    "RightsManagement": {
        "Permissions": {...},
        "RecordPhase": "Concept",
        "ExpiryDate": null,
        "ExpiryStatus": null,
        "Zone": {}
    },
    "Dimensions": 1536
  }
}

Expected headers

...

Code Block
x-api-key: <optional api key>

Output

Array of float (vector) with size equal to dimensions. The vector is normalizedMUST BE normalized. When the provided dimensions are 0, the embedding should be in the natural dimensions used by the embedding. If the embeddings cannot be provided in the requested dimensions, then a 400 HTTP error code should be returned.

Ex.

Code Block
languagejson
{
  "Embedding": [ 
    -0.006929283495992422,
    -0.005336422007530928,
    ... (omitted for spacing)
    -4.547132266452536e-05,
    -0.024047505110502243]
}

POST /describe
POST /generative-metadata/description
Status
colourBlue
titleGENERATIVE

Expected parameters

...

Record as JSON body in Metadata property and Config based on config rules

...

Code Block
languagejson
{
  "Config": {
    "TextModel" : "ada2"
  },
  "Metadata": {
    "RightsManagement": {
        "Permissions": {...},
        "RecordPhase": "Concept",
        "ExpiryDate": null,
        "ExpiryStatus": null,
        "Zone": {}
    }
  }
}

Expected headers

...

Code Block
x-api-key: <optional api key>

Output

Textual string

Ex.

Code Block
languagejson
{
  "Description": "This is an image of a cat"
}

POST /generative-metadata
Status
colourBlue
titleGENERATIVE

Record as JSON body in Metadata property, Fields with as items dotted keys and AI hint as value, Locale as the requested target locale for the output and finally Config based on config rules

...

Code Block
languagejson
{
  "Fields": { 
    "Descriptive.Description": {
      "Hint": "Give a description for the image"
     },
     "Descriptive.Keywords.Keyword": {
        "Hint": "Give a list of keywords. Generate around 10.",
        "Type": "array"
     }
  },
  "Locale": "en_US",
  "Config": {
    "TextModel" : "ada2"
  },
  "Metadata": {
    "RightsManagement": {
        "Permissions": {...},
        "RecordPhase": "Concept",
        "ExpiryDate": null,
        "ExpiryStatus": null,
        "Zone": {}
    }
  }
}

Expected headers

...

Code Block
x-api-key: <optional api key>

Output

Follow the input fields, the same structure should be returned A JSON object of generated fields with as keys dotted keys and as value the AI's generated value.

Ex:

Code Block
languagejson
{ 
  "MetadataGeneratedFields": {
    "Descriptive.Description": "This is an image of a cat",
    "Descriptive.Keywords.Keyword": ["Animal", "Cat", ...]  
  }
}