#![warn(missing_docs)]
pub mod arrow;
pub mod error;
pub mod grpc;
pub mod http;
pub mod middleware;
pub mod models;
pub mod playground;
pub mod proxy;
pub use arrow::{arrow_batch, ArrowBatchRequest, ARROW_CONTENT_TYPE};
pub use error::ApiError;
pub use http::{
router, router_daemon, router_daemon_with_arrow, router_with_auth, router_with_state,
};
pub use middleware::{AuthConfig, RateLimitConfig, RateLimiter, REQUEST_ID_HEADER};
pub use models::{ModelInfo, ModelsResponse};
pub use proxy::{ProxyOutcome, ProxySource, SystemProxy};
use std::sync::Arc;
use openkind_engine::EngineRegistry;
#[derive(Clone)]
pub struct AppState {
pub registry: Arc<EngineRegistry>,
pub playground_models: Option<Arc<dyn playground::PlaygroundModels>>,
pub proxy: Option<Arc<dyn proxy::SystemProxy>>,
pub(crate) arrow_admission: Arc<tokio::sync::Semaphore>,
}
impl AppState {
pub fn new(registry: EngineRegistry) -> Self {
Self {
registry: Arc::new(registry),
playground_models: None,
proxy: None,
arrow_admission: Arc::new(tokio::sync::Semaphore::new(arrow::ARROW_ADMISSION_UNITS)),
}
}
}