use pyo3::prelude::*;
mod client;
mod cost;
mod drift;
mod models;
mod replay;
mod runtime;
mod sanitization;
mod storage;
use cost::*;
use drift::*;
use models::*;
use replay::*;
use runtime::{init_runtime, RuntimeConfig};
use sanitization::*;
use storage::*;
#[pyfunction]
fn init(py: Python) -> PyResult<()> {
let config = RuntimeConfig::default();
init_runtime(config)?;
let atexit = py.import("atexit")?;
let core_module = py.import("briefcase_ai._core")?;
let shutdown = core_module.getattr("_shutdown_runtime")?;
atexit.call_method1("register", (shutdown,))?;
Ok(())
}
#[pyfunction]
#[pyo3(signature = (worker_threads = 2))]
fn init_with_config(worker_threads: usize) -> PyResult<()> {
let config = RuntimeConfig { worker_threads };
init_runtime(config)
}
#[pyfunction]
fn is_initialized() -> bool {
runtime::is_initialized()
}
#[pyfunction]
fn _shutdown_runtime() -> PyResult<()> {
runtime::shutdown_runtime()
}
#[pymodule]
fn _core(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_class::<PyInput>()?;
m.add_class::<PyOutput>()?;
m.add_class::<PyModelParameters>()?;
m.add_class::<PyExecutionContext>()?;
m.add_class::<PyDecisionSnapshot>()?;
m.add_class::<PySnapshot>()?;
m.add_class::<PySqliteBackend>()?;
m.add_class::<PyLakeFSBackend>()?;
m.add_class::<PyDriftCalculator>()?;
m.add_class::<PyCostCalculator>()?;
m.add_class::<PySanitizer>()?;
m.add_class::<PyReplayEngine>()?;
m.add_class::<PySnapshotQuery>()?;
m.add_class::<client::PyBriefcaseClient>()?;
m.add_class::<client::PyValidatedClient>()?;
m.add_function(wrap_pyfunction!(init, m)?)?;
m.add_function(wrap_pyfunction!(init_with_config, m)?)?;
m.add_function(wrap_pyfunction!(is_initialized, m)?)?;
m.add_function(wrap_pyfunction!(_shutdown_runtime, m)?)?;
m.add("__version__", "2.4.1")?;
m.add("__author__", "Briefcase AI Team")?;
Ok(())
}