| 153 | } |
| 154 | |
| 155 | static bool rpc_server_params_parse(int argc, char ** argv, rpc_server_params & params) { |
| 156 | std::string arg; |
| 157 | for (int i = 1; i < argc; i++) { |
| 158 | arg = argv[i]; |
| 159 | if (arg == "-H" || arg == "--host") { |
| 160 | if (++i >= argc) { |
| 161 | return false; |
| 162 | } |
| 163 | params.host = argv[i]; |
| 164 | } else if (arg == "-t" || arg == "--threads") { |
| 165 | if (++i >= argc) { |
| 166 | return false; |
| 167 | } |
| 168 | params.n_threads = std::stoi(argv[i]); |
| 169 | if (params.n_threads <= 0) { |
| 170 | fprintf(stderr, "error: invalid number of threads: %d\n", params.n_threads); |
| 171 | return false; |
| 172 | } |
| 173 | } else if (arg == "-d" || arg == "--device") { |
| 174 | if (++i >= argc) { |
| 175 | return false; |
| 176 | } |
| 177 | params.device = argv[i]; |
| 178 | if (ggml_backend_dev_by_name(params.device.c_str()) == nullptr) { |
| 179 | fprintf(stderr, "error: unknown device: %s\n", params.device.c_str()); |
| 180 | fprintf(stderr, "available devices:\n"); |
| 181 | for (size_t i = 0; i < ggml_backend_dev_count(); i++) { |
| 182 | auto * dev = ggml_backend_dev_get(i); |
| 183 | size_t free, total; |
| 184 | ggml_backend_dev_memory(dev, &free, &total); |
| 185 | printf(" %s: %s (%zu MiB, %zu MiB free)\n", ggml_backend_dev_name(dev), ggml_backend_dev_description(dev), total / 1024 / 1024, free / 1024 / 1024); |
| 186 | } |
| 187 | return false; |
| 188 | } |
| 189 | } else if (arg == "-p" || arg == "--port") { |
| 190 | if (++i >= argc) { |
| 191 | return false; |
| 192 | } |
| 193 | params.port = std::stoi(argv[i]); |
| 194 | if (params.port <= 0 || params.port > 65535) { |
| 195 | return false; |
| 196 | } |
| 197 | } else if (arg == "-c" || arg == "--cache") { |
| 198 | params.use_cache = true; |
| 199 | } else if (arg == "-m" || arg == "--mem") { |
| 200 | if (++i >= argc) { |
| 201 | return false; |
| 202 | } |
| 203 | params.backend_mem = std::stoul(argv[i]) * 1024 * 1024; |
| 204 | } else if (arg == "-h" || arg == "--help") { |
| 205 | print_usage(argc, argv, params); |
| 206 | exit(0); |
| 207 | } else { |
| 208 | fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); |
| 209 | print_usage(argc, argv, params); |
| 210 | exit(0); |
| 211 | } |
| 212 | } |
no test coverage detected