| 288 | } |
| 289 | |
| 290 | int main(int argc, char * argv[]) { |
| 291 | std::setlocale(LC_NUMERIC, "C"); |
| 292 | |
| 293 | ggml_backend_load_all(); |
| 294 | |
| 295 | rpc_server_params params; |
| 296 | if (!rpc_server_params_parse(argc, argv, params)) { |
| 297 | fprintf(stderr, "Invalid parameters\n"); |
| 298 | return 1; |
| 299 | } |
| 300 | |
| 301 | if (params.host != "127.0.0.1") { |
| 302 | fprintf(stderr, "\n"); |
| 303 | fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); |
| 304 | fprintf(stderr, "WARNING: Host ('%s') is != '127.0.0.1'\n", params.host.c_str()); |
| 305 | fprintf(stderr, " Never expose the RPC server to an open network!\n"); |
| 306 | fprintf(stderr, " This is an experimental feature and is not secure!\n"); |
| 307 | fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); |
| 308 | fprintf(stderr, "\n"); |
| 309 | } |
| 310 | |
| 311 | auto devices = get_devices(params); |
| 312 | if (devices.empty()) { |
| 313 | fprintf(stderr, "No devices found\n"); |
| 314 | return 1; |
| 315 | } |
| 316 | std::string endpoint = params.host + ":" + std::to_string(params.port); |
| 317 | const char * cache_dir = nullptr; |
| 318 | std::string cache_dir_str; |
| 319 | if (params.use_cache) { |
| 320 | cache_dir_str = fs_get_cache_directory() + "rpc/"; |
| 321 | if (!fs_create_directory_with_parents(cache_dir_str)) { |
| 322 | fprintf(stderr, "Failed to create cache directory: %s\n", cache_dir_str.c_str()); |
| 323 | return 1; |
| 324 | } |
| 325 | cache_dir = cache_dir_str.c_str(); |
| 326 | } |
| 327 | |
| 328 | ggml_backend_reg_t reg = ggml_backend_reg_by_name("RPC"); |
| 329 | if (!reg) { |
| 330 | fprintf(stderr, "Failed to find RPC backend\n"); |
| 331 | return 1; |
| 332 | } |
| 333 | |
| 334 | auto start_server_fn = (decltype(ggml_backend_rpc_start_server)*) ggml_backend_reg_get_proc_address(reg, "ggml_backend_rpc_start_server"); |
| 335 | if (!start_server_fn) { |
| 336 | fprintf(stderr, "Failed to obtain RPC backend start server function\n"); |
| 337 | return 1; |
| 338 | } |
| 339 | |
| 340 | start_server_fn(endpoint.c_str(), cache_dir, params.n_threads, devices.size(), devices.data()); |
| 341 | return 0; |
| 342 | } |
nothing calls this directly
no test coverage detected