Node SDK Visit the GitHub Repo
Installation
npm install @getmetal/metal-sdk
# or
yarn add @getmetal/metal-sdk
Retrieval
App Setup
Param Type Description
apiKeystring The API Key for your Org. Learn more. clientIdstring The Client ID for your Org. Learn more. indexIdstring The ID of the index you want to connect with. Learn more.
import { Metal } from "@getmetal/metal-sdk" ;
const metal = new Metal ( "pk_123" , "ci_123" , "index-id" );
addApp()
Parameters
Param Type Description
namestring Name of the app.
const app = await metal . addApp ({
name: "My App" ,
indexes: [ "index-id" ]
});
getApp()
Parameters
Param Type Description
appIdstring Identifier for the app.
const app = await metal . getApp ( "app-id" );
getApps()
const apps = await metal . getApps ();
updateApp()
Parameters
Param Type Description
appIdstring The unique identifier of the app you want to update. namestring (optional) The updated name for the App. indexesarray (optional) An updated array of the index connected to the app.
const app = await metal . updateApp ( "app-id" , { name: "updated name" , indexes: [ "index-id" ] });
addIndex()
Parameters
Param Type Description
modelstring Identifier for the model being used, e.g., “text-embedding-ada-002”. namestring Name of the index. datasourcestring Unique identifier for the Datasource. indexTypestring Type of index structure, e.g., “FLAT”, “HNSW”. dimensionsnumber Number of dimensions for the index. e.g.1536 filtersarray An array of filters specifying fields for advanced searching.
Filters
Param Type Description
fieldstring Name of the attribute you wish to filter by. typestring Type of the attribute (e.g., “string”, “number”).
const payload = {
model: "text-embedding-ada-002" ,
name: "my index" ,
datasource: "<datasource_id>" ,
indexType: "FLAT" ,
dimensions: 1536 ,
filters: [
{
field: "name" ,
type: "string"
},
{
field: "age" ,
type: "number"
}
]
};
const newIndex = await metal . addIndex ( payload );
getIndex()
Parameters
Param Type Description
indexIdstring Identifier for the index.
const index = await metal . getIndex ( "index-id" );
index()
Add a single embedding to an index. When invoked, we will generate an embedding with one of the below embedding params and store it into a vector db.
You can only pass one of the following fields: text, imageUrl, or
embedding. We only embed one field in a single request.
const textEmbedding = await metal . index ({ text: "Rocket" });
// or
const imgEmbedding = await metal . index ({ imageUrl: "https://path-to.img" });
// or
const rawEmbedding = await metal . index ({ embedding: [ 0.1 , 0.2 , 0.3 ] });
You can also pass an optional id and metadata object to be stored with the embedding. Eg.
const opts = {
id: "rocket1" ,
metadata: {
category: "space" ,
another: "field" ,
},
};
const embedding = await metal . index ({
text: "Rocket" ,
... opts ,
});
Parameters
Param Type Description
Embed - embedding number[] Raw embedding to be indexed. Embed - imageUrl string A URL for an image to be embedded and indexed. Embed - text string The text to be embedded and indexed. idstring Optional. Identifier for your embedding. metadataobject Optional. A flexible metdata object to be stored w/ the embedding.
indexMany()
Bulk add multiple embedding documents to an index. When invoked, we will generate an embedding with one of the below “Embed” params and store it in a vector index.
You can only pass one of the following fields: text, imageUrl, or
embedding. We only embed one field in a single request.
Parameters
Param Type Description
indexstring Required. Index id. embeddingnumber[] Raw embeddings to be indexed. imageUrlstring A URL for an image to be vectorized and indexed. textstring The text to be vectorized and indexed. idstring Optional. identifier for your embedding. metadataobject Optional. A flexible metdata object to be stored w/ the embedding.
await metal . indexMany ([
{ text: "Megadeth" , index: "index-id" },
{ text: "Metallica" , index: "index-id" },
]);
search()
Parameters
Param Type Description
embeddingnumber[] Raw embeddings to be searched. imageUrlstring A URL for an image to be vectorized and searched. textstring The text to be vectorized and searched. filtersFilter Filters included for filtered search. indexIdstring Optional index id where record will get indexed. idsOnlyboolean Return only the ids of the documents. limitnumber Number of documents returned by the API
Filter Object
Param Type Description
andFilterItem[] And clause, all members have to be satisfied. orFilterItem[] Or clause, at least one member has to be satisfied.
Filter Item
Param Type Description
fieldstring Name of the field to filter valuestring | number Value to match the filter operatorstring One of: eq, gt, gte, lt, lte.
const results = await metal . search ({
text: "term-to-search" ,
filters: { and: [{ field: "favoriteNumber" , value: 666 , operator: "lt" }] },
indexId: "indexId" ,
idsOnly: false ,
limit: 100 ,
});
getOne()
Retrieve a single embedding document.
Parameters
Param Type Description
idstring The ID of the document to retrieve. indexIdstring Optional. index id where record will get indexed.
const document = await metal . getOne ( "documentId-123" );
getMany()
Parameters
Name Type Description
idsArray of str An array of document IDs to retrieve. indexIdstr, optional The ID of the index from which to retrieve documents. If not provided, the default index ID will be used.
const documentIDs = [ 'document_id_123' , 'document_id_456' ];
const result = await Metal . getMany ( documentIDs );
getQueries()
Parameters
Name Type Description
indexIdstr The ID of the index from which to retrieve documents.
const queries = await metal . getQueries ( "index-id" );
deleteOne()
Delete a single embedding document.
Parameters
Param Type Description
idstring The ID of the document to delte. indexIdstring Optional. The ID of the index containing the document.
const document = await metal . deleteOne ( "documentId-123" );
deleteMany()
Deletes multiple documents in an index based on their IDs.
Parameters
Param Type Description
idstring[] The IDs of the documents to delete. indexIdstring Optional. The ID of the index containing the document.
const document = await metal . deleteOne ( "documentId-123" );
Memory (Motorhead)
App Setup
Param Type Description
apiKeystring For Managed. The API Key for your Org. [details](- Create an API Key for Authentication . clientIdstring For Managed.The Client ID for your Org. [details](- Create an API Key for Authentication . baseUrlstring For Self-hosted. The URL path to your motorhead instance
import { Motorhead } from "@getmetal/metal-sdk" ;
// Managed
const motorhead = new Motorhead ({ apiKey: "apiKey" , clientId: "clientId" });
// Self-hosted
const motorhead = new Motorhead ({
baseUrl: "https://motorhead.yourdomain.com" ,
});
addMemory()
interface Memory {
messages : {
content : string ;
role : "AI" | "Human" ;
};
context : string ;
}
Param Type Description
sessionIdstring The ID of the session. If the session does not exist, it will create one memoryMemory[] A memory payload to update the session memory
const memoryPayload = {
messages: [
{ role: "Human" , content: "Who is the best vocalist of all time?" },
{ role: "AI" , content: "Ozzy!" },
],
context:
"User ask what can he eat in Colombia. The AI responds arepas are really nice" ,
};
await motorhead . addMemory ( "session-id" , memoryPayload );
getMemory()
Param Type Description
sessionIdstring The ID of the session to retrieve memory for
await motorhead . getMemory ( "session-id" );
deleteMemory()
Param Type Description
sessionIdstring The ID of the session to delete memory for
await motorhead . deleteMemory ( "session-id" );
Datasources
addDatasource()
Add a new Datasource to your Metal instance.
Parameters
Name Type Description
namestring Name of the Datasource. sourcetypestring Type of the source. It can either be ‘File’ or ‘Text’. autoExtractboolean Flag indicating whether auto-extraction is enabled. metadataFieldsarray An array of fields specifying which attributes you wish to extract. Each object should have name, type, and description properties.
Name Type Description
namestring Name of the attribute you wish to extract. typestring Type of the attribute (e.g., “String”, “Number”). descriptionstring Brief description or example of the attribute. autoExtractboolean Determines if attribute will be auto extracted from content or not.
const dataSourcePayload = {
name: "my datasource" ,
sourcetype: "File" ,
autoExtract: true ,
metadataFields: [
{
name: "band" ,
type: "String" ,
description: "Which heavy metal band is represented by the iconic mascot Eddie?" ,
autoExtract: true ,
}
]
};
const response = await metal . addDatasource ( datasourcePayload );
updateDatasource()
Parameters
Name Type Description
datasourceIdstring Identifier of the Datasource you want to update. namestring Updated name of the Datasource. sourcetypestring Updated type of the source. Either ‘File’ or ‘Text’. autoExtractboolean Updated flag indicating whether auto-extraction is enabled. metadataFieldsarray Updated fields specifying which attributes you wish to extract.
const updatedDatasourcePayload = {
name: "updated_datasource" ,
sourcetype: "Text" ,
autoExtract: false ,
metadataFields: [
{
name: "song" ,
type: "String" ,
description: "Which was Iron Maiden's first single?"
}
]
};
const response = await Metal . updateDatasource ( "existing_dataSourceId" , updatedDataSourcePayload );
getDatasource()
Parameters
Name Type Description
dataSourceIdstring Identifier of the Datasource you want to retrieve information about.
const datasourceId = "existing_datasourceId" ;
const response = await Metal . getDatasource ( datasourceId );
getAllDatasources()
Parameters
Name Type Description
limitnumber (Optional) The maximum number of Datasources to return. Default is 10, with a maximum of 100. pagenumber (Optional) The page number for pagination. Should be a positive integer up to 100.
const limit = 10 ;
const page = 2 ;
const response = await Metal . getAllDatasources ({ limit , page });
deleteDatasource()
Parameters
Name Type Description
datasourceIdstring The ID of the Datasource you want to delete.
const datasourceId = 'your_data_source_id' ;
const response = await Metal . deleteDatasource ( datasourceId );
Data Entities
addDataEntity()
Parameters
Name Type Description
datasourceIdstring The ID of the datasource where the file belongs. filepathstring The local file path of the file to upload. metadataobject Additional Metadata that isn’t extracted.
Example
const datasourceId = 'your_datasource_id' ;
const filePath = './file_path.csv' ;
const results = await metal . addDataEntity ({
datasource: datasourceId ,
filepath ,
metadata: {
band: 'Iron Maiden' ,
song: 'The Trooper' ,
},
});
getDataEntity()
Parameters
Name Type Description
idstring The ID of the data entity you want to retrieve.
const dataEntityId = 'your_dataentity_id' ;
const dataEntity = await metal . getDataEntity ( dataEntityId );
getAllDataEntities()
Parameters
Name Type Description
datasourceIDstring The ID of the datasource for which you want to list the data entities. limitnumber (Optional) The maximum number of data entities to return. Default is 10, with a maximum of 100. pagenumber (Optional) The page number for pagination. Should be a positive integer up to 100.
const datasourceID = 'your_datasource_id' ;
const page = 1 ;
const limit = 10 ;
const dataEntities = await Metal . listDataEntities ( datasourceID , page , limit );
deleteDataEntity()
Parameters
Name Type Description
idstring The ID of the data entity you want to delete.
Example
const dataEntityID = 'your_dataentity_id' ;
const result = await Metal . deleteDataEntity ( dataEntityID );
Checkout the code on Github