File size: 3,331 Bytes
7895d85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import fetch from 'node-fetch';
import { d as private_env } from './shared-server-49TKSBDM.js';
import dns from 'node:dns';

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(query, use_llm_for_teasers, do_multistep_search, use_accounting_docs, use_reranking, disable_thresholds, use_llm_for_filtering, find_transaction_maps_by_question, find_transaction_maps_by_operation, use_keywords, { abortController }) {
    const timeoutId = setTimeout(() => {
      abortController.abort();
    }, 6e4 * Number(private_env.SEARCH_API_REQUEST_TIMEOUT));
    const startTime = Date.now();
    try {
      const r = await fetch(`${this.url}/search`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify({
          "query": query,
          "top": 30,
          "use_llm_for_teasers": use_llm_for_teasers,
          "do_multistep_search": do_multistep_search,
          "use_accounting_docs": use_accounting_docs,
          "use_reranking": use_reranking,
          "disable_thresholds": disable_thresholds,
          "use_llm_for_filtering": use_llm_for_filtering,
          "find_transaction_maps_by_question": find_transaction_maps_by_question,
          "find_transaction_maps_by_operation": find_transaction_maps_by_operation,
          "use_keywords": use_keywords
        }),
        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 (find_transaction_maps_by_question || find_transaction_maps_by_operation) {
        return {
          transactionMapResults: response.transaction_maps_results,
          searchResults: null,
          consultations: null
        };
      } else {
        return {
          transactionMapResults: null,
          searchResults: response.results,
          consultations: response.consultations
        };
      }
    } catch (error) {
      if (abortController.signal.aborted || error.name === "AbortError") {
        throw new 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-0xoNRjpt.js.map