UNPKG

@roadiehq/rag-ai-backend-retrieval-augmenter

Version:

61 lines (57 loc) 1.73 kB
'use strict'; 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