@roadiehq/rag-ai-backend-retrieval-augmenter
Version:
61 lines (57 loc) • 1.73 kB
JavaScript
;
var backendCommon = require('@backstage/backend-common');
var errors = require('@backstage/errors');
const embeddingsSourceToBackstageSearchType = (source) => {
switch (source) {
case "catalog":
return "software-catalog";
case "tech-docs":
return "techdocs";
default:
return "software-catalog";
}
};
class SearchClient {
discoveryApi;
logger;
auth;
constructor(options) {
this.discoveryApi = options.discoveryApi;
this.logger = options.logger;
this.auth = backendCommon.createLegacyAuthAdapters({
...options,
discovery: options.discoveryApi
}).auth;
}
async query(query) {
const url = `${await this.discoveryApi.getBaseUrl("search")}/query?term=${query.term}&types[0]=${embeddingsSourceToBackstageSearchType(query.source)}`;
const { token } = await this.auth.getPluginRequestToken({
onBehalfOf: await this.auth.getOwnServiceCredentials(),
targetPluginId: "search"
});
const response = await fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`
}
});
if (!response.ok) {
this.logger.warn(
"Unable to query Backstage search API for embeddable results.",
await errors.ResponseError.fromResponse(response)
);
return [];
}
const searchResults = await response.json();
return searchResults.results?.map((searchResult) => ({
metadata: {
source: query.source,
location: searchResult.document.location
},
content: searchResult.document.text
})) ?? [];
}
}
exports.SearchClient = SearchClient;
//# sourceMappingURL=SearchClient.cjs.js.map