File size: 3,280 Bytes
9923f3d
2ab515e
9923f3d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2ab515e
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import fetch from 'node-fetch';
import { D as DEFAULT_SEARCH_INPUT_PARAMS } from './constants-PEBBwOxo.js';
import { d as private_env } from './shared-server-49TKSBDM.js';
import dns from 'node:dns';

function createSearchInputParams(overrides = {}) {
  return {
    ...DEFAULT_SEARCH_INPUT_PARAMS,
    ...overrides,
    categories: {
      ...DEFAULT_SEARCH_INPUT_PARAMS.categories,
      ...overrides.categories || {}
    }
  };
}
dns.setDefaultResultOrder("ipv4first");
class FullTextSearchService {
  url = "";
  constructor(url) {
    this.url = url;
  }
  async health() {
    try {
      const r = await fetch(`${this.url}/health`, {
        method: "GET",
        headers: {
          "Content-Type": "application/json"
        }
      });
      const data = await r.json();
      if (data.status === "ok") {
        return data.status;
      }
    } catch (error) {
      console.log(JSON.parse(JSON.stringify(error)));
    }
    return "unavailable";
  }
  async search(params, abortController) {
    const timeoutId = setTimeout(() => {
      abortController.abort();
    }, 6e4 * Number(private_env.SEARCH_API_REQUEST_TIMEOUT));
    const startTime = Date.now();
    const data = createSearchInputParams(params);
    console.info("Search request sent with parameters:");
    console.info(data);
    try {
      const r = await fetch(`${this.url}/search`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify(data),
        signal: abortController.signal
      });
      if (!r.ok) {
        console.error(`Failed to load search results: ${await r.text()}`);
        throw new Error(`Не удалось загрузить результаты поиска. Возможно, поиск ещё не запустился. Попробуйте отправить запрос ещё раз.`);
      }
      const response = await r.json();
      if (params.find_transaction_maps_by_question || params.find_transaction_maps_by_operation) {
        return {
          transactionMapResults: response.transaction_maps_results,
          results: null,
          explanations: response.explanations || null,
          consultations: null,
          metrics: response.metrics
        };
      } else {
        return {
          transactionMapResults: null,
          results: response.results,
          explanations: response.explanations || null,
          consultations: response.consultations,
          query: response.query,
          metrics: response.metrics,
          llmResponses: response.llm_responses
        };
      }
    } catch (error) {
      if (abortController.signal.aborted || error.name === "AbortError") {
        throw new Error(`Сервис поиска не отвечает. Попробуйте изменить и повторить запрос ${JSON.stringify(error)}`);
      }
      console.log(JSON.parse(JSON.stringify(error)));
      throw error;
    } finally {
      const endTime = Date.now();
      const difference = Math.abs(endTime - startTime) / 1e3;
      console.log("Search response time:", difference);
      clearTimeout(timeoutId);
    }
  }
}

export { FullTextSearchService as F };
//# sourceMappingURL=FullTextSearchService-uxuytyJu.js.map