104 lines
2.6 KiB
Rust
104 lines
2.6 KiB
Rust
//! FFI module for exposing sgl-model-gateway preprocessing and postprocessing functions
|
|
//! to C-compatible languages (e.g., Golang via cgo)
|
|
//!
|
|
//! This module provides C-compatible function signatures for:
|
|
//! - Tokenizer operations (encode, decode, chat template)
|
|
//! - Tool parser operations (parse tool calls)
|
|
//! - Tool constraint generation
|
|
//! - gRPC client SDK (complete request-response flow)
|
|
//!
|
|
//! # Safety
|
|
//! All functions marked with `#[no_mangle]` and `extern "C"` must be called
|
|
//! with valid pointers and follow the documented memory management rules.
|
|
|
|
// Re-export error types
|
|
pub use error::{SglErrorCode, set_error_message, set_error_message_fmt, clear_error_message};
|
|
|
|
// Re-export memory management functions
|
|
pub use memory::{sgl_free_string, sgl_free_token_ids};
|
|
|
|
// Re-export tokenizer functions
|
|
pub use tokenizer::{
|
|
TokenizerHandle,
|
|
sgl_tokenizer_create_from_file,
|
|
sgl_tokenizer_encode,
|
|
sgl_tokenizer_apply_chat_template,
|
|
sgl_tokenizer_apply_chat_template_with_tools,
|
|
sgl_tokenizer_decode,
|
|
sgl_tokenizer_free,
|
|
};
|
|
|
|
// Re-export tool parser functions
|
|
pub use tool_parser::{
|
|
ToolParserHandle,
|
|
sgl_tool_parser_create,
|
|
sgl_tool_parser_parse_complete,
|
|
sgl_tool_parser_parse_incremental,
|
|
sgl_tool_parser_reset,
|
|
sgl_tool_parser_free,
|
|
};
|
|
|
|
// Re-export gRPC converter functions
|
|
pub use grpc_converter::{
|
|
GrpcResponseConverterHandle,
|
|
sgl_grpc_response_converter_create,
|
|
sgl_grpc_response_converter_convert_chunk,
|
|
sgl_grpc_response_converter_free,
|
|
};
|
|
|
|
// Re-export client SDK functions
|
|
pub use client::{
|
|
SglangClientHandle,
|
|
sgl_client_create,
|
|
sgl_client_free,
|
|
};
|
|
|
|
// Re-export stream functions
|
|
pub use stream::{
|
|
SglangStreamHandle,
|
|
sgl_stream_read_next,
|
|
sgl_stream_free,
|
|
};
|
|
|
|
// Re-export client stream function (defined in client.rs but used by stream)
|
|
pub use client::sgl_client_chat_completion_stream;
|
|
|
|
// Re-export preprocessor functions
|
|
pub use preprocessor::{
|
|
sgl_preprocess_chat_request,
|
|
sgl_preprocess_chat_request_with_tokenizer,
|
|
sgl_preprocessed_request_free,
|
|
};
|
|
|
|
// Re-export postprocessor functions
|
|
pub use postprocessor::{
|
|
sgl_postprocess_stream_chunk,
|
|
sgl_postprocess_stream_chunks_batch,
|
|
};
|
|
|
|
// Re-export utility functions
|
|
pub use utils::sgl_generate_tool_constraints;
|
|
|
|
// Sub-modules
|
|
mod error;
|
|
mod memory;
|
|
mod tokenizer;
|
|
mod tool_parser;
|
|
mod grpc_converter;
|
|
mod client;
|
|
mod stream;
|
|
mod utils;
|
|
mod preprocessor;
|
|
mod postprocessor;
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_error_codes() {
|
|
assert_eq!(SglErrorCode::Success as i32, 0);
|
|
assert_eq!(SglErrorCode::InvalidArgument as i32, 1);
|
|
}
|
|
}
|