Spaces:
Build error
Build error
File size: 2,357 Bytes
1e5e94f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
import { singleton } from 'tsyringe';
import { GlobalLogger } from '../logger';
import { SecretExposer } from '../../shared/services/secrets';
import { AsyncLocalContext } from '../async-context';
import { SerperSearchQueryParams } from '../../shared/3rd-party/serper-search';
import { BlackHoleDetector } from '../blackhole-detector';
import { AsyncService } from 'civkit/async-service';
import { JinaSerpApiHTTP } from '../../shared/3rd-party/internal-serp';
import { WebSearchEntry } from './compat';
@singleton()
export class InternalJinaSerpService extends AsyncService {
logger = this.globalLogger.child({ service: this.constructor.name });
client!: JinaSerpApiHTTP;
constructor(
protected globalLogger: GlobalLogger,
protected secretExposer: SecretExposer,
protected threadLocal: AsyncLocalContext,
protected blackHoleDetector: BlackHoleDetector,
) {
super(...arguments);
}
override async init() {
await this.dependencyReady();
this.emit('ready');
this.client = new JinaSerpApiHTTP(this.secretExposer.JINA_SERP_API_KEY);
}
async doSearch(variant: 'web' | 'images' | 'news', query: SerperSearchQueryParams) {
this.logger.debug(`Doing external search`, query);
let results;
switch (variant) {
// case 'images': {
// const r = await this.client.imageSearch(query);
// results = r.parsed.images;
// break;
// }
// case 'news': {
// const r = await this.client.newsSearch(query);
// results = r.parsed.news;
// break;
// }
case 'web':
default: {
const r = await this.client.webSearch(query);
results = r.parsed.results?.map((x) => ({ ...x, link: x.url }));
break;
}
}
this.blackHoleDetector.itWorked();
return results as WebSearchEntry[];
}
async webSearch(query: SerperSearchQueryParams) {
return this.doSearch('web', query);
}
async imageSearch(query: SerperSearchQueryParams) {
return this.doSearch('images', query);
}
async newsSearch(query: SerperSearchQueryParams) {
return this.doSearch('news', query);
}
}
|