big_llm/TODO
2025-08-16 20:25:23 -07:00

245 lines
5.7 KiB
Plaintext

1. Initialization Module (lm::runtime)
include/lm/runtime/init.hpp
cpp
#pragma once
#include <string>
#include <nlohmann/json.hpp> // JSON library
#include <filesystem>
namespace lm::runtime {
class SystemState {
public:
// Singleton access
static SystemState& get_instance();
// Initialize from JSON config
void initialize(const std::filesystem::path& config_path);
// Configuration accessors
const nlohmann::json& config() const noexcept;
std::string get_string(const std::string& key) const;
int get_int(const std::string& key, int default_val = 0) const;
// Subsystem states
bool is_tokenizer_ready() const noexcept;
bool is_model_loaded() const noexcept;
private:
SystemState() = default; // Private constructor
nlohmann::json config_;
bool tokenizer_ready_ = false;
bool model_loaded_ = false;
};
} // namespace lm::runtime
2. Shutdown Module (lm::runtime)
include/lm/runtime/shutdown.hpp
cpp
#pragma once
#include <nlohmann/json.hpp>
#include <filesystem>
namespace lm::runtime {
class ShutdownHandler {
public:
// Serialize state to JSON
static void save_state(
const std::filesystem::path& output_path,
bool include_model_weights = false
);
// Cleanup hooks
static void register_cleanup(void (*func)());
static void execute_cleanup();
};
} // namespace lm::runtime
3. Implementation Files
src/runtime/init.cpp
cpp
#include "lm/runtime/init.hpp"
#include <fstream>
#include <stdexcept>
using namespace lm::runtime;
void SystemState::initialize(const std::filesystem::path& config_path) {
try {
// Load JSON config
std::ifstream f(config_path);
config_ = nlohmann::json::parse(f);
// Validate required fields
if (!config_.contains("tokenizer") || !config_.contains("model")) {
throw std::runtime_error("Invalid config: missing required sections");
}
// Initialize subsystems
tokenizer_ready_ = initialize_tokenizer(config_["tokenizer"]);
model_loaded_ = initialize_model(config_["model"]);
} catch (const std::exception& e) {
throw std::runtime_error("Initialization failed: " + std::string(e.what()));
}
}
// ... (Other method implementations)
src/runtime/shutdown.cpp
cpp
#include "lm/runtime/shutdown.hpp"
#include <vector>
#include <mutex>
namespace {
std::vector<void (*)()> cleanup_functions;
std::mutex cleanup_mutex;
}
void ShutdownHandler::save_state(
const std::filesystem::path& output_path,
bool include_model_weights)
{
nlohmann::json state;
// Capture framework state
state["tokenizer"] = serialize_tokenizer_state();
state["model"] = serialize_model_state(include_model_weights);
state["threading"] = serialize_thread_pool_stats();
// Write to file
std::ofstream(output_path) << state.dump(2); // Pretty print
}
void ShutdownHandler::register_cleanup(void (*func)()) {
std::lock_guard<std::mutex> lock(cleanup_mutex);
cleanup_functions.push_back(func);
}
void ShutdownHandler::execute_cleanup() {
std::lock_guard<std::mutex> lock(cleanup_mutex);
for (auto it = cleanup_functions.rbegin(); it != cleanup_functions.rend(); ++it) {
(*it)(); // Execute in reverse order
}
}
4. Configuration JSON Schema
config_schema.json
json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["tokenizer", "model"],
"properties": {
"tokenizer": {
"type": "object",
"properties": {
"type": {"enum": ["bpe", "sentencepiece"]},
"vocab_path": {"type": "string"},
"dropout": {"type": "number", "minimum": 0, "maximum": 1}
}
},
"model": {
"type": "object",
"properties": {
"path": {"type": "string"},
"max_seq_len": {"type": "integer", "minimum": 1}
}
},
"threading": {
"type": "object",
"properties": {
"worker_threads": {"type": "integer", "minimum": 1}
}
}
}
}
5. Usage Example
Initialization
cpp
#include "lm/runtime/init.hpp"
int main() {
try {
auto& state = lm::runtime::SystemState::get_instance();
state.initialize("config.json");
if (!state.is_model_loaded()) {
throw std::runtime_error("Model failed to load");
}
} catch (const std::exception& e) {
std::cerr << "Fatal error: " << e.what() << std::endl;
return 1;
}
}
Shutdown
cpp
#include "lm/runtime/shutdown.hpp"
void cleanup_db_connections() {
// Custom cleanup logic
}
int main() {
lm::runtime::ShutdownHandler::register_cleanup(cleanup_db_connections);
// ... run application ...
lm::runtime::ShutdownHandler::save_state("shutdown_state.json");
lm::runtime::ShutdownHandler::execute_cleanup();
}
6. CMake Integration
cmake
# Add to your CMakeLists.txt
find_package(nlohmann_json 3.9 REQUIRED)
add_library(lm_runtime
src/runtime/init.cpp
src/runtime/shutdown.cpp
)
target_link_libraries(lm_runtime
PRIVATE nlohmann_json::nlohmann_json
)
Key Features
Thread-Safe Cleanup: Reverse-order execution of registered handlers
Config Validation: JSON schema verification during initialization
State Capture: Full system snapshot on shutdown
Singleton Pattern: Controlled access to system state
Error Handling
Error Case Recovery Action
Invalid JSON Throw std::runtime_error with path info
Missing Required Field Fail fast during initialization
Shutdown Serialization Failure Log warning, continue cleanup
This implementation provides a robust foundation for managing the framework lifecycle. Would you like to add any of the following?
Configuration hot-reloading
Encrypted config files
Distributed state serialization