Delen via


Naslaginformatie over catalogus-API

Belangrijk

  • Foundry Local is beschikbaar in preview. Openbare preview-versies bieden vroege toegang tot functies die actief zijn geïmplementeerd.
  • Functies, benaderingen en processen kunnen worden gewijzigd of beperkte mogelijkheden hebben, voordat algemene beschikbaarheid (GA) wordt uitgevoerd.

Met Foundry Local kunt u uw eigen catalogusservice bouwen en integreren. Dit artikel behandelt:

  • Modelindeling vereist voor de catalogus-API
  • Aanvraag- en antwoordindeling vereist voor uw catalogus-API om te integreren met Foundry Local

Modelindeling

Modelbestanden in uw modelcatalogus moeten de ONNX-indeling (Open Neural Network Exchange) hebben om te kunnen werken met Foundry Local. Voor meer informatie over het compileren van Hugging Face- en PyTorch-modellen naar ONNX, raadpleegt u Compile Hugging Face-modellen om te worden uitgevoerd op Foundry Local.

API-indeling

Aanvraag

Implementeer een POST-eindpunt dat een hoofdtekst van een JSON-aanvraag accepteert in uw catalogusservice. De aanvraagindeling voor de catalogus-API is als volgt:

  • Methode: POST
  • Inhoudstype: application/json

De aanvraagbody moet een JSON-object met de volgende velden zijn:

  • resourceIds: Een matrix met resource-id's waarmee de resources worden opgegeven die moeten worden opgevraagd
    • resourceId: De id van de resource
    • entityContainerType: Het type entiteitscontainer (bijvoorbeeld Registry, Workspaceenzovoort)
  • indexEntitiesRequest: Een object dat de zoekparameters bevat.
    • filters: Een matrix met filterobjecten die de criteria opgeven voor het filteren van de zoekresultaten
      • field: Het veld waarop moet worden gefilterd (bijvoorbeeld type, kindenzovoort)
      • operator: de operator die moet worden gebruikt voor het filter. Bijvoorbeeld( eq is gelijk aan), ne (niet gelijk aan), gt (groter dan), lt (kleiner dan), enzovoort.
      • values: Een matrix met waarden die overeenkomen met het veld
    • orderBy: Een matrix met velden om de resultaten te ordenen op
    • searchText: Een tekenreeks die moet worden gezocht in de resultaten
    • pageSize: Het maximum aantal resultaten dat moet worden geretourneerd (voor paginering)
    • skip: Het aantal resultaten dat moet worden overgeslagen (voor paginering)
    • continuationToken: Een token voor paginering om door te gaan vanaf een vorige aanvraag

Filterbare velden (optioneel)

Implementeer de catalogus-API zodat deze de aanvraagindeling accepteert. Filteren aan serverzijde is optioneel. Het overslaan van filteren aan de serverzijde is sneller te implementeren, maar is minder efficiënt voor het zoeken naar modellen.

Als u filteren aan de serverzijde implementeert, gebruikt u de volgende velden:

  • type: Het type van het model (bijvoorbeeld models, datasetsenzovoort).
  • kind: Het type model (bijvoorbeeld Versioned, Unversionedenzovoort).
  • properties/variantInfo/variantMetadata/device: het apparaattype (bijvoorbeeld cpu, gpuenzovoort).
  • properties/variantInfo/variantMetadata/executionProvider: De uitvoeringsprovider (bijvoorbeeld cpuexecutionprovider, webgpuexecutionproviderenzovoort).

Voorbeeld van aanvraag

curl -X POST <your-catalog-api-endpoint> \
-H "Content-Type: application/json" \
-d '{
  "resourceIds": [
    {
      "resourceId": "azureml",
      "entityContainerType": "Registry"
    }
  ],
  "indexEntitiesRequest": {
    "filters": [
      {
        "field": "type",
        "operator": "eq",
        "values": [
          "models"
        ]
      },
      {
        "field": "kind",
        "operator": "eq",
        "values": [
          "Versioned"
        ]
      },
      {
        "field": "properties/variantInfo/variantMetadata/device",
        "operator": "eq",
        "values": [
          "cpu",
          "gpu"
        ]
      },
      {
        "field": "properties/variantInfo/variantMetadata/executionProvider",
        "operator": "eq",
        "values": [
          "cpuexecutionprovider",
          "webgpuexecutionprovider"
        ]
      }
    ],
    "pageSize": 10,
    "skip": null,
    "continuationToken": null
  }
}'

Reactie

Het antwoord van de catalogus-API is een JSON-object dat de zoekresultaten bevat. Het antwoordschema is als volgt:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "indexEntitiesResponse": {
      "type": "object",
      "properties": {
        "totalCount": {
          "type": "integer",
          "description": "The total count of entities."
        },
        "value": {
          "type": "array",
          "description": "An array of LocalModel objects.",
          "items": {
            "$ref": "#/definitions/LocalModel"
          }
        },
        "nextSkip": {
          "type": "integer",
          "description": "The number of items to skip for the next request."
        },
        "continuationToken": {
          "type": "string",
                    "description": "A token to continue fetching results."
        }
      }
    }
  },
  "definitions": {
    "LocalModel": {
      "type": "object",
      "properties": {
        "annotations": {
          "type": "object",
          "description": "Annotations associated with the model.",
          "properties": {
            "tags": {
              "type": "object",
              "description": "Tags associated with the annotation.",
              "properties": {
                "author": { "type": "string" },
                "alias": { "type": "string" },
                "directoryPath": { "type": "string" },
                "license": { "type": "string" },
                "licenseDescription": { "type": "string" },
                "promptTemplate": { "type": "string" },
                "task": { "type": "string" }
              }
            },
            "systemCatalogData": {
              "type": "object",
              "properties": {
                "publisher": { "type": "string" },
                "displayName": { "type": "string" }
              }
            },
            "name": { "type": "string" }
          }
        },
        "properties": {
          "type": "object",
          "description": "Properties of the model.",
          "properties": {
            "name": { "type": "string" },
            "version": { "type": "integer" },
            "alphanumericVersion": { "type": "string" },
            "variantInfo": {
              "type": "object",
              "properties": {
                "parents": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "assetId": { "type": "string" }
                    }
                  }
                },
                "variantMetadata": {
                  "type": "object",
                  "properties": {
                    "modelType": { "type": "string" },
                    "device": { "type": "string" },
                    "executionProvider": { "type": "string" },
                    "fileSizeBytes": { "type": "integer" }
                  }
                }
              }
            }
          }
        },
        "version": {
          "type": "string",
          "description": "The version of the model."
        },
        "assetId": {
          "type": "string",
          "description": "The asset ID of the model."
        }
      }
    }
  }
}