Skip to content

Commit 9e0ee1f

Browse files
committed
add ai_task_response json decoder
1 parent 4373d1e commit 9e0ee1f

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

src/helpers/general.rs

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use crate::api_handler::call_request::call_gpt;
22
use crate::helpers::command_lines::PrintCommand;
33
use crate::models::general::llm::Message;
4+
use serde::de::DeserializeOwned;
5+
use serde::Deserialize;
46

57

68
// Extend AI function for specific output
@@ -35,7 +37,7 @@ pub async fn ai_task_request(
3537
msg_context: String,
3638
agent_position: &str,
3739
agent_operation: &str,
38-
function_pass: for<'a> fn(&'a str) -> &'static str,) -> String
40+
function_pass: for<'a> fn(&'a str) -> &'static str, ) -> String
3941
{
4042
// Расширяет функцию с помощью extend_ai_function, чтобы создать сообщение для LLM.
4143
let extend_message: Message = extend_ai_function(function_pass, &msg_context);
@@ -55,6 +57,30 @@ pub async fn ai_task_request(
5557
}
5658

5759

60+
/*
61+
Эта функция ai_task_request_decoded предназначена для вызова GPT через асинхронную функцию ai_task_request,
62+
получения строки-ответа, а затем преобразования (десериализации)
63+
этой строки в объект нужного типа T с использованием библиотеки serde.
64+
*/
65+
pub async fn ai_task_request_decoded<T: DeserializeOwned>( // тип T должен поддерживать десериализацию из JSON.
66+
msg_context: String,
67+
agent_position: &str,
68+
agent_operation: &str,
69+
function_pass: for<'a> fn(&'a str) -> &'static str,
70+
) -> T {
71+
72+
let llm_response: String = ai_task_request(
73+
msg_context,
74+
agent_position,
75+
agent_operation,
76+
function_pass
77+
).await;
78+
// Десериализует строку JSON в объект типа T
79+
let decoded_response: T = serde_json::from_str(&llm_response.as_str()).expect("Could not deserialize GPT response from serde_json");
80+
decoded_response
81+
}
82+
83+
5884
#[cfg(test)]
5985
mod tests {
6086
use super::*;

0 commit comments

Comments
 (0)