weaviate-agents
Version:
JS/TS client for Weaviate Agents
159 lines (158 loc) • 5.37 kB
JavaScript
export const mapApiResponse = (response) => ({
original_query: response.originalQuery,
collection_names: response.collectionNames,
searches: mapApiSearches(response.searches),
aggregations: mapApiAggregations(response.aggregations),
usage: mapApiUsage(response.usage),
total_time: response.totalTime,
is_partial_answer: response.isPartialAnswer,
missing_information: response.missingInformation,
final_answer: response.finalAnswer,
sources: mapApiSources(response.sources),
});
const mapApiSearches = (searches) => searches.map((searchGroup) => searchGroup.map((result) => ({
collection: result.collection,
queries: result.queries,
filters: result.filters.map(mapApiPropertyFilters),
filter_operators: result.filterOperators,
})));
const mapDateFilterValue = (value) => {
if ("exactTimestamp" in value) {
return {
exact_timestamp: value.exactTimestamp,
operator: value.operator,
};
}
else if ("dateFrom" in value &&
"dateTo" in value &&
value.dateFrom != null &&
value.dateTo != null) {
return {
date_from: value.dateFrom,
date_to: value.dateTo,
inclusive_from: value.inclusiveFrom,
inclusive_to: value.inclusiveTo,
};
}
else if ("dateFrom" in value && value.dateFrom != null) {
return {
date_from: value.dateFrom,
inclusive_from: value.inclusiveFrom,
};
}
else if ("dateTo" in value && value.dateTo != null) {
return {
date_to: value.dateTo,
inclusive_to: value.inclusiveTo,
};
}
else {
return undefined;
}
};
const mapApiPropertyFilters = (filters) => filters
.map((filter) => {
switch (filter.filterType) {
case "integer":
return {
filter_type: "integer",
property_name: filter.propertyName,
operator: filter.operator,
value: filter.value,
};
case "integerArray":
return {
filter_type: "integer_array",
property_name: filter.propertyName,
operator: filter.operator,
value: filter.value,
};
case "text":
return {
filter_type: "text",
property_name: filter.propertyName,
operator: filter.operator,
value: filter.value,
};
case "textArray":
return {
filter_type: "text_array",
property_name: filter.propertyName,
operator: filter.operator,
value: filter.value,
};
case "boolean":
return {
filter_type: "boolean",
property_name: filter.propertyName,
operator: filter.operator,
value: filter.value,
};
case "booleanArray":
return {
filter_type: "boolean_array",
property_name: filter.propertyName,
operator: filter.operator,
value: filter.value,
};
case "dateRange":
const value = mapDateFilterValue(filter.value);
if (!value) {
return undefined;
}
return {
filter_type: "date_range",
property_name: filter.propertyName,
value,
};
case "dateArray":
return {
filter_type: "date_array",
property_name: filter.propertyName,
operator: filter.operator,
value: filter.value,
};
case "geo":
return {
filter_type: "geo",
property_name: filter.propertyName,
latitude: filter.latitude,
longitude: filter.longitude,
max_distance_meters: filter.maxDistanceMeters,
};
case "isNull":
return {
filter_type: "is_null",
property_name: filter.propertyName,
is_null: filter.isNull,
};
default:
return undefined;
}
})
.filter((filter) => filter !== undefined);
const mapApiAggregations = (aggregations) => aggregations.map((aggregationGroup) => aggregationGroup.map((result) => ({
collection: result.collection,
search_query: result.searchQuery,
groupby_property: result.groupbyProperty,
aggregations: result.aggregations.map(mapApiPropertyAggregation),
filters: mapApiPropertyFilters(result.filters),
})));
const mapApiPropertyAggregation = (aggregation) => ({
property_name: aggregation.propertyName,
metrics: aggregation.metrics,
top_occurrences_limit: "topOccurrencesLimit" in aggregation
? aggregation.topOccurrencesLimit
: undefined,
});
const mapApiUsage = (usage) => ({
requests: usage.requests,
request_tokens: usage.requestTokens,
response_tokens: usage.responseTokens,
total_tokens: usage.totalTokens,
details: usage.details,
});
const mapApiSources = (sources) => sources.map((source) => ({
object_id: source.objectId,
collection: source.collection,
}));