Spaces:
Running
Running
File size: 1,787 Bytes
fc0860f 332826f fc0860f 332826f fc0860f 332826f fc0860f d9ce859 332826f d9ce859 332826f fc0860f d9ce859 332826f fc0860f 332826f fc0860f d9ce859 332826f d9ce859 fc0860f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <boost/asio.hpp>
#include <functional>
#include <string>
#include <thread>
#include <utility>
#include "config.h"
#include "http_helpers.h"
#include "model_manager.h"
#include "runtime_components.h"
#include "server.h"
namespace asio = boost::asio;
int main() {
const ManagerConfig config = load_manager_config();
const auto &bind_host = config.server.host;
const int bind_port = config.server.port;
ModelManager manager(config);
ApiKeyAuth auth(config);
RateLimiterStore rate_limiter(config.rate_limit);
RequestRegistry registry;
MetricsRegistry metrics;
Scheduler scheduler(manager, registry, metrics, config.queue);
std::string init_error;
if (auth.enabled()) {
log_line("auth: enabled api_keys=" + std::to_string(config.api_keys.size()));
} else {
log_line("auth: disabled (no configured api keys)");
}
log_line("startup: loading default model");
if (!manager.initialize_default(init_error)) {
log_line("startup: default model failed: " + init_error);
} else {
log_line("startup: default model ready");
}
asio::io_context ioc{1};
asio::ip::tcp::acceptor acceptor{
ioc,
{asio::ip::make_address(bind_host), static_cast<unsigned short>(bind_port)}};
log_line("manager listening on " + bind_host + ":" + std::to_string(bind_port));
for (;;) {
asio::ip::tcp::socket socket{ioc};
acceptor.accept(socket);
std::thread(
&do_session,
std::move(socket),
std::ref(manager),
std::cref(config),
std::cref(auth),
std::ref(rate_limiter),
std::ref(registry),
std::ref(metrics),
std::ref(scheduler)).detach();
}
}
|