@@ -3,20 +3,34 @@ use crate::models::general::llm::{APIResponse, ChatCompletion, Message};
3
3
use dotenv:: dotenv;
4
4
use reqwest:: header:: { HeaderMap , HeaderValue } ;
5
5
use std:: env;
6
- // backend_hive
7
6
8
- // Call LLM GPT
7
+ /*
8
+ Этот код отвечает за взаимодействие с API OpenAI для вызова функции "Chat Completions",
9
+ которая используется для отправки сообщений и получения ответов от модели GPT
10
+ */
11
+
12
+ /*
13
+ Функция call_gpt выполняет следующие задачи:
14
+ Загружает API-ключи и другие параметры из окружения.
15
+ Создаёт HTTP-запрос для вызова API OpenAI.
16
+ Отправляет сообщения модели GPT и получает ответ.
17
+ Обрабатывает ошибки на каждом этапе.
18
+ Возвращает текст ответа от модели.
19
+ */
20
+
21
+ // message: Vec<Message>: Вектор сообщений (Message), которые отправляются в модель GPT. Это, например, история чата или конкретные запросы.
9
22
pub async fn call_gpt ( message : Vec < Message > ) -> Result < String , Box < dyn std:: error:: Error + Send > > {
23
+ // Загружает переменные окружения из файла .env в текущую среду.
10
24
dotenv ( ) . ok ( ) ;
11
25
12
26
// Extract api keys from .env
13
27
let api_key: String = env:: var ( "OPEN_AI_KEY" ) . expect ( "OPEN_AI_KEY not found" ) ;
14
28
let api_org: String = env:: var ( "OPEN_AI_ORG" ) . expect ( "OPEN_AI_ORG not found" ) ;
15
29
16
- // Confirm base url endpoint
30
+ // Это конечная точка OpenAI для вызова функции "Chat Completions"
17
31
let url: & str = "https://api.openai.com/v1/chat/completions" ;
18
32
19
- // Create client headers
33
+ // Создаётся объект HeaderMap, который хранит HTTP-заголовки.
20
34
let mut headers = HeaderMap :: new ( ) ;
21
35
headers. insert (
22
36
"authorization" ,
@@ -27,13 +41,18 @@ pub async fn call_gpt(message: Vec<Message>) -> Result<String, Box<dyn std::erro
27
41
HeaderValue :: from_str ( & api_org. as_str ( ) )
28
42
. map_err ( |e| -> Box < dyn std:: error:: Error + Send > { Box :: new ( e) } ) ?) ;
29
43
30
- // create reqwest client
44
+ // Создаётся клиент с предварительно заданными заголовками (default_headers).
31
45
let client = reqwest:: Client :: builder ( )
32
46
. default_headers ( headers)
33
47
. build ( )
34
48
. map_err ( |e| -> Box < dyn std:: error:: Error + Send > { Box :: new ( e) } ) ?;
35
49
36
50
// create chat completion
51
+ /*
52
+ model: Указание используемой модели (gpt-3.5-turbo).
53
+ messages: Сообщения, которые будут отправлены модели.
54
+ temperature: Параметр, определяющий степень случайности в ответах. Значение 0.1 указывает на минимальную случайность (ответы будут более детерминированными).
55
+ */
37
56
let chat_completion: ChatCompletion = ChatCompletion {
38
57
model : "gpt-3.5-turbo" . to_string ( ) ,
39
58
messages : message,
@@ -61,6 +80,8 @@ pub async fn call_gpt(message: Vec<Message>) -> Result<String, Box<dyn std::erro
61
80
. map_err ( |e| -> Box < dyn std:: error:: Error + Send > { Box :: new ( e) } ) ?;
62
81
63
82
//parse 'content' from massage from choice from api call response
83
+ // Первый элемент из массива choices (модель может вернуть несколько вариантов ответа).
84
+ // Поле message.content, которое содержит текст ответа.
64
85
Ok ( res. choices [ 0 ] . message . content . clone ( ) )
65
86
}
66
87
0 commit comments