| 261 | } |
| 262 | |
| 263 | int main(int argc, char * argv[]) { |
| 264 | ggml_backend_load_all(); |
| 265 | |
| 266 | rpc_server_params params; |
| 267 | if (!rpc_server_params_parse(argc, argv, params)) { |
| 268 | fprintf(stderr, "Invalid parameters\n"); |
| 269 | return 1; |
| 270 | } |
| 271 | |
| 272 | if (params.host != "127.0.0.1") { |
| 273 | fprintf(stderr, "\n"); |
| 274 | fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); |
| 275 | fprintf(stderr, "WARNING: Host ('%s') is != '127.0.0.1'\n", params.host.c_str()); |
| 276 | fprintf(stderr, " Never expose the RPC server to an open network!\n"); |
| 277 | fprintf(stderr, " This is an experimental feature and is not secure!\n"); |
| 278 | fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); |
| 279 | fprintf(stderr, "\n"); |
| 280 | } |
| 281 | |
| 282 | ggml_backend_t backend = create_backend(params); |
| 283 | if (!backend) { |
| 284 | fprintf(stderr, "Failed to create backend\n"); |
| 285 | return 1; |
| 286 | } |
| 287 | std::string endpoint = params.host + ":" + std::to_string(params.port); |
| 288 | size_t free_mem, total_mem; |
| 289 | if (params.backend_mem > 0) { |
| 290 | free_mem = params.backend_mem; |
| 291 | total_mem = params.backend_mem; |
| 292 | } else { |
| 293 | get_backend_memory(backend, &free_mem, &total_mem); |
| 294 | } |
| 295 | const char * cache_dir = nullptr; |
| 296 | std::string cache_dir_str; |
| 297 | if (params.use_cache) { |
| 298 | cache_dir_str = fs_get_cache_directory() + "rpc/"; |
| 299 | if (!fs_create_directory_with_parents(cache_dir_str)) { |
| 300 | fprintf(stderr, "Failed to create cache directory: %s\n", cache_dir_str.c_str()); |
| 301 | return 1; |
| 302 | } |
| 303 | cache_dir = cache_dir_str.c_str(); |
| 304 | } |
| 305 | |
| 306 | ggml_backend_reg_t reg = ggml_backend_reg_by_name("RPC"); |
| 307 | if (!reg) { |
| 308 | fprintf(stderr, "Failed to find RPC backend\n"); |
| 309 | return 1; |
| 310 | } |
| 311 | |
| 312 | auto start_server_fn = (decltype(ggml_backend_rpc_start_server)*) ggml_backend_reg_get_proc_address(reg, "ggml_backend_rpc_start_server"); |
| 313 | if (!start_server_fn) { |
| 314 | fprintf(stderr, "Failed to obtain RPC backend start server function\n"); |
| 315 | return 1; |
| 316 | } |
| 317 | |
| 318 | start_server_fn(backend, endpoint.c_str(), cache_dir, free_mem, total_mem); |
| 319 | |
| 320 | ggml_backend_free(backend); |
nothing calls this directly
no test coverage detected