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();
    }
}