Skip to content

Commit e473dcd

Browse files
authored
Merge pull request #846 from dcSpark/feature/rust-node
Added runner/os/tool-set fields to tools
2 parents b995c8c + 4521b90 commit e473dcd

File tree

19 files changed

+1005
-165
lines changed

19 files changed

+1005
-165
lines changed

shinkai-bin/shinkai-node/src/network/handle_commands_list.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2384,6 +2384,8 @@ impl Node {
23842384
app_id,
23852385
llm_provider,
23862386
mounts,
2387+
runner,
2388+
operating_system,
23872389
res,
23882390
} => {
23892391
let db_clone = Arc::clone(&self.db);
@@ -2403,6 +2405,8 @@ impl Node {
24032405
llm_provider,
24042406
node_name,
24052407
mounts,
2408+
runner,
2409+
operating_system,
24062410
res,
24072411
)
24082412
.await;

shinkai-bin/shinkai-node/src/network/v2_api/api_v2_commands_tools.rs

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,61 @@
11
use crate::{
2-
llm_provider::job_manager::JobManager, managers::IdentityManager, network::{node_error::NodeError, node_shareable_logic::download_zip_file, Node}, tools::{
3-
tool_definitions::definition_generation::{generate_tool_definitions, get_all_deno_tools}, tool_execution::execution_coordinator::{execute_code, execute_tool_cmd}, tool_generation::v2_create_and_send_job_message, tool_prompts::{generate_code_prompt, tool_metadata_implementation_prompt}
4-
}, utils::environment::NodeEnvironment
2+
llm_provider::job_manager::JobManager,
3+
managers::IdentityManager,
4+
network::{node_error::NodeError, node_shareable_logic::download_zip_file, Node},
5+
tools::{
6+
tool_definitions::definition_generation::{generate_tool_definitions, get_all_deno_tools},
7+
tool_execution::execution_coordinator::{execute_code, execute_tool_cmd},
8+
tool_generation::v2_create_and_send_job_message,
9+
tool_prompts::{generate_code_prompt, tool_metadata_implementation_prompt},
10+
},
11+
utils::environment::NodeEnvironment,
512
};
6-
713
use async_channel::Sender;
14+
use chrono::Utc;
815
use ed25519_dalek::{ed25519::signature::SignerMut, SigningKey};
916
use reqwest::StatusCode;
1017
use serde_json::{json, Map, Value};
11-
1218
use shinkai_http_api::node_api_router::{APIError, SendResponseBodyData};
1319
use shinkai_message_primitives::{
1420
schemas::{
15-
inbox_name::InboxName, indexable_version::IndexableVersion, job::JobLike, job_config::JobConfig, shinkai_name::ShinkaiSubidentityType, tool_router_key::ToolRouterKey
16-
}, shinkai_message::shinkai_message_schemas::{CallbackAction, JobCreationInfo, MessageSchemaType}, shinkai_utils::{shinkai_message_builder::ShinkaiMessageBuilder, signatures::clone_signature_secret_key}
21+
inbox_name::InboxName, indexable_version::IndexableVersion, job::JobLike, job_config::JobConfig,
22+
shinkai_name::ShinkaiSubidentityType, tool_router_key::ToolRouterKey,
23+
},
24+
shinkai_message::shinkai_message_schemas::{CallbackAction, JobCreationInfo, MessageSchemaType},
25+
shinkai_utils::{shinkai_message_builder::ShinkaiMessageBuilder, signatures::clone_signature_secret_key},
1726
};
1827
use shinkai_message_primitives::{
1928
schemas::{
20-
shinkai_name::ShinkaiName, shinkai_tools::{CodeLanguage, DynamicToolType}
21-
}, shinkai_message::shinkai_message_schemas::JobMessage
29+
shinkai_name::ShinkaiName,
30+
shinkai_tools::{CodeLanguage, DynamicToolType},
31+
},
32+
shinkai_message::shinkai_message_schemas::JobMessage,
2233
};
2334
use shinkai_sqlite::{errors::SqliteManagerError, SqliteManager};
35+
use shinkai_tools_primitives::tools::tool_types::{OperatingSystem, RunnerType};
2436
use shinkai_tools_primitives::tools::{
25-
deno_tools::DenoTool, error::ToolError, python_tools::PythonTool, shinkai_tool::{ShinkaiTool, ShinkaiToolWithAssets}, tool_config::{OAuth, ToolConfig}, tool_output_arg::ToolOutputArg, tool_playground::ToolPlayground
37+
deno_tools::DenoTool,
38+
error::ToolError,
39+
python_tools::PythonTool,
40+
shinkai_tool::{ShinkaiTool, ShinkaiToolWithAssets},
41+
tool_config::{OAuth, ToolConfig},
42+
tool_output_arg::ToolOutputArg,
43+
tool_playground::ToolPlayground,
2644
};
27-
45+
use std::path::PathBuf;
2846
use std::{
29-
collections::HashMap, env, fs::File, io::{Read, Write}, sync::Arc, time::Instant
47+
collections::HashMap,
48+
env,
49+
fs::File,
50+
io::{Read, Write},
51+
sync::Arc,
52+
time::Instant,
3053
};
54+
use tokio::fs;
3155
use tokio::{process::Command, sync::Mutex};
32-
use zip::{write::FileOptions, ZipWriter};
33-
3456
use x25519_dalek::PublicKey as EncryptionPublicKey;
3557
use x25519_dalek::StaticSecret as EncryptionStaticKey;
36-
37-
use chrono::Utc;
38-
39-
use std::path::PathBuf;
40-
use tokio::fs;
58+
use zip::{write::FileOptions, ZipWriter};
4159

4260
impl Node {
4361
/// Searches for Shinkai tools using both vector and full-text search (FTS)
@@ -505,6 +523,9 @@ impl Node {
505523
sql_queries: Some(payload.metadata.sql_queries),
506524
file_inbox: None,
507525
assets: payload.assets.clone(),
526+
runner: payload.metadata.runner,
527+
operating_system: payload.metadata.operating_system,
528+
tool_set: payload.metadata.tool_set,
508529
};
509530
ShinkaiTool::Deno(tool, false)
510531
}
@@ -529,6 +550,9 @@ impl Node {
529550
sql_queries: Some(payload.metadata.sql_queries),
530551
file_inbox: None,
531552
assets: payload.assets.clone(),
553+
runner: payload.metadata.runner,
554+
operating_system: payload.metadata.operating_system,
555+
tool_set: payload.metadata.tool_set,
532556
};
533557
ShinkaiTool::Python(tool, false)
534558
}
@@ -882,6 +906,8 @@ impl Node {
882906
llm_provider: String,
883907
node_name: ShinkaiName,
884908
mounts: Option<Vec<String>>,
909+
runner: Option<RunnerType>,
910+
operating_system: Option<Vec<OperatingSystem>>,
885911
res: Sender<Result<Value, APIError>>,
886912
) -> Result<(), NodeError> {
887913
if Self::validate_bearer_token(&bearer, db.clone(), &res).await.is_err() {
@@ -909,6 +935,8 @@ impl Node {
909935
bearer,
910936
node_name,
911937
mounts,
938+
runner,
939+
operating_system,
912940
)
913941
.await;
914942

shinkai-bin/shinkai-node/src/tools/tool_execution/execution_coordinator.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,32 @@
11
use crate::llm_provider::job_manager::JobManager;
2+
use crate::managers::IdentityManager;
23
use crate::tools::tool_definitions::definition_generation::generate_tool_definitions;
34
use crate::tools::tool_execution::execution_custom::try_to_execute_rust_tool;
45
use crate::tools::tool_execution::execution_deno_dynamic::{check_deno_tool, execute_deno_tool};
56
use crate::tools::tool_execution::execution_header_generator::{check_tool, generate_execution_environment};
67
use crate::tools::tool_execution::execution_python_dynamic::execute_python_tool;
78
use crate::utils::environment::fetch_node_environment;
8-
9+
use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine};
10+
use chrono::Utc;
11+
use ed25519_dalek::SigningKey;
12+
use regex::Regex;
13+
use reqwest::Client;
914
use serde_json::json;
1015
use serde_json::{Map, Value};
16+
use sha2::{Digest, Sha256};
1117
use shinkai_message_primitives::schemas::shinkai_name::ShinkaiName;
1218
use shinkai_message_primitives::schemas::shinkai_tools::CodeLanguage;
1319
use shinkai_message_primitives::schemas::shinkai_tools::DynamicToolType;
1420
use shinkai_message_primitives::schemas::tool_router_key::ToolRouterKey;
1521
use shinkai_sqlite::oauth_manager::OAuthToken;
1622
use shinkai_sqlite::SqliteManager;
1723
use shinkai_tools_primitives::tools::error::ToolError;
18-
1924
use shinkai_tools_primitives::tools::shinkai_tool::ShinkaiTool;
2025
use shinkai_tools_primitives::tools::tool_config::{OAuth, ToolConfig};
21-
use tokio::sync::Mutex;
22-
23-
use crate::managers::IdentityManager;
24-
use ed25519_dalek::SigningKey;
25-
26-
use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine};
27-
use chrono::Utc;
28-
use regex::Regex;
29-
use reqwest::Client;
30-
use sha2::{Digest, Sha256};
26+
use shinkai_tools_primitives::tools::tool_types::{OperatingSystem, RunnerType};
3127
use std::collections::HashMap;
3228
use std::sync::Arc;
29+
use tokio::sync::Mutex;
3330
use x25519_dalek::PublicKey as EncryptionPublicKey;
3431
use x25519_dalek::StaticSecret as EncryptionStaticKey;
3532

@@ -418,6 +415,8 @@ pub async fn execute_code(
418415
bearer: String,
419416
node_name: ShinkaiName,
420417
mounts: Option<Vec<String>>,
418+
runner: Option<RunnerType>,
419+
operating_system: Option<Vec<OperatingSystem>>,
421420
) -> Result<Value, ToolError> {
422421
eprintln!("[execute_code] tool_type: {}", tool_type);
423422
// Route based on the prefix
@@ -439,6 +438,8 @@ pub async fn execute_code(
439438
support_files,
440439
code,
441440
mounts,
441+
runner,
442+
operating_system,
442443
)
443444
.await
444445
}
@@ -459,6 +460,8 @@ pub async fn execute_code(
459460
support_files,
460461
code,
461462
mounts,
463+
runner,
464+
operating_system,
462465
)
463466
.await
464467
}

shinkai-bin/shinkai-node/src/tools/tool_execution/execution_deno_dynamic.rs

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ use std::path::PathBuf;
33

44
use serde_json::{Map, Value};
55
use shinkai_message_primitives::schemas::shinkai_name::ShinkaiName;
6-
use shinkai_tools_primitives::tools::deno_tools::{DenoTool, ToolResult};
6+
use shinkai_tools_primitives::tools::deno_tools::DenoTool;
77
use shinkai_tools_primitives::tools::error::ToolError;
88
use shinkai_tools_primitives::tools::parameters::Parameters;
99
use shinkai_tools_primitives::tools::tool_config::{OAuth, ToolConfig};
1010
use shinkai_tools_primitives::tools::tool_output_arg::ToolOutputArg;
11+
use shinkai_tools_primitives::tools::tool_types::{OperatingSystem, RunnerType, ToolResult};
1112

1213
use super::execution_header_generator::{check_tool, generate_execution_environment};
1314
use crate::utils::environment::fetch_node_environment;
@@ -27,6 +28,8 @@ pub async fn execute_deno_tool(
2728
support_files: HashMap<String, String>,
2829
code: String,
2930
mounts: Option<Vec<String>>,
31+
runner: Option<RunnerType>,
32+
operating_system: Option<Vec<OperatingSystem>>,
3033
) -> Result<Value, ToolError> {
3134
// Create a minimal DenoTool instance
3235
let tool = DenoTool {
@@ -49,6 +52,13 @@ pub async fn execute_deno_tool(
4952
sql_queries: None,
5053
file_inbox: None,
5154
assets: None,
55+
runner: runner.unwrap_or_default(),
56+
operating_system: operating_system.unwrap_or(vec![
57+
OperatingSystem::Linux,
58+
OperatingSystem::MacOS,
59+
OperatingSystem::Windows,
60+
]),
61+
tool_set: None,
5262
};
5363

5464
let env = generate_execution_environment(
@@ -98,21 +108,24 @@ pub async fn execute_deno_tool(
98108
}
99109
}
100110

101-
match tool.run_on_demand(
102-
env,
103-
node_env.api_listen_address.ip().to_string(),
104-
node_env.api_listen_address.port(),
105-
support_files,
106-
parameters,
107-
extra_config,
108-
node_storage_path,
109-
app_id.clone(),
110-
tool_id.clone(),
111-
node_name,
112-
false,
113-
assets_files,
114-
mounts,
115-
).await {
111+
match tool
112+
.run_on_demand(
113+
env,
114+
node_env.api_listen_address.ip().to_string(),
115+
node_env.api_listen_address.port(),
116+
support_files,
117+
parameters,
118+
extra_config,
119+
node_storage_path,
120+
app_id.clone(),
121+
tool_id.clone(),
122+
node_name,
123+
false,
124+
assets_files,
125+
mounts,
126+
)
127+
.await
128+
{
116129
Ok(run_result) => Ok(run_result.data),
117130
Err(e) => Err(e),
118131
}
@@ -145,6 +158,9 @@ pub async fn check_deno_tool(
145158
sql_queries: None,
146159
file_inbox: None,
147160
assets: None,
161+
runner: RunnerType::Any,
162+
operating_system: vec![OperatingSystem::Linux, OperatingSystem::MacOS, OperatingSystem::Windows],
163+
tool_set: None,
148164
};
149165

150166
let node_env = fetch_node_environment();
@@ -160,5 +176,6 @@ pub async fn check_deno_tool(
160176
node_storage_path,
161177
app_id.clone(),
162178
tool_id.clone(),
163-
).await
179+
)
180+
.await
164181
}

shinkai-bin/shinkai-node/src/tools/tool_execution/execution_python_dynamic.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ use serde_json::{Map, Value};
66
use shinkai_message_primitives::schemas::shinkai_name::ShinkaiName;
77
use shinkai_sqlite::SqliteManager;
88
use shinkai_tools_primitives::tools::{
9-
deno_tools::ToolResult,
109
error::ToolError,
1110
parameters::Parameters,
1211
python_tools::PythonTool,
1312
tool_config::{OAuth, ToolConfig},
1413
tool_output_arg::ToolOutputArg,
14+
tool_types::{OperatingSystem, RunnerType, ToolResult},
1515
};
1616
use std::sync::Arc;
1717

@@ -28,6 +28,8 @@ pub async fn execute_python_tool(
2828
support_files: HashMap<String, String>,
2929
code: String,
3030
mounts: Option<Vec<String>>,
31+
runner: Option<RunnerType>,
32+
operating_system: Option<Vec<OperatingSystem>>,
3133
) -> Result<Value, ToolError> {
3234
// Create a minimal DenoTool instance
3335
let tool = PythonTool {
@@ -50,6 +52,13 @@ pub async fn execute_python_tool(
5052
file_inbox: None,
5153
oauth: oauth.clone(),
5254
assets: None,
55+
runner: runner.unwrap_or_default(),
56+
operating_system: operating_system.unwrap_or(vec![
57+
OperatingSystem::Linux,
58+
OperatingSystem::MacOS,
59+
OperatingSystem::Windows,
60+
]),
61+
tool_set: None,
5362
};
5463

5564
let env = generate_execution_environment(

shinkai-bin/shinkai-node/src/tools/tool_implementation/native_tools/config_setup.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,8 @@ mod tests {
310310
use super::*;
311311

312312
use shinkai_embedding::model_type::{EmbeddingModelType, OllamaTextEmbeddingsInference};
313-
use shinkai_tools_primitives::tools::deno_tools::ToolResult;
314313
use shinkai_tools_primitives::tools::tool_config::BasicConfig;
314+
use shinkai_tools_primitives::tools::tool_types::{OperatingSystem, RunnerType, ToolResult};
315315
use shinkai_tools_primitives::tools::{deno_tools::DenoTool, shinkai_tool::ShinkaiTool};
316316
use std::path::PathBuf;
317317
use std::sync::Arc;
@@ -339,7 +339,6 @@ mod tests {
339339
fn create_deno_tool() -> ShinkaiTool {
340340
let mut initial_tool = ShinkaiTool::Deno(
341341
DenoTool {
342-
343342
name: "Test Tool".to_string(),
344343
homepage: Some("http://127.0.0.1/index.html".to_string()),
345344
author: "Test Author".to_string(),
@@ -374,6 +373,9 @@ mod tests {
374373
sql_queries: None,
375374
file_inbox: None,
376375
assets: None,
376+
runner: RunnerType::Any,
377+
operating_system: vec![OperatingSystem::Windows],
378+
tool_set: None,
377379
},
378380
true,
379381
);

0 commit comments

Comments
 (0)