use composable::*;
use orp::model::Model;
use orp::pipeline::*;
use orp::params::RuntimeParameters;
use gliner::util::result::Result;
use gliner::model::params::Parameters;
use gliner::model::pipeline::{token::TokenPipeline, relation::RelationPipeline};
use gliner::model::input::{text::TextInput, relation::schema::RelationSchema};
fn main() -> Result<()> {
const MODEL_PATH: &str = "models/gliner-multitask-large-v0.5/onnx/model.onnx";
const TOKENIZER_PATH: &str = "models/gliner-multitask-large-v0.5/tokenizer.json";
let params: Parameters = Parameters::default();
let runtime_params = RuntimeParameters::default();
let mut relation_schema = RelationSchema::new();
relation_schema.push_with_allowed_labels("founded", &["person"], &["company"]);
let input = TextInput::from_str(
&["Bill Gates is an American businessman who co-founded Microsoft."],
&["person", "company"],
)?;
println!("Loading model...");
let model = Model::new(MODEL_PATH, runtime_params)?;
let pipeline = composed![
TokenPipeline::new(TOKENIZER_PATH)?.to_composable(&model, ¶ms),
Print::new(Some("Entities:\n"), None),
RelationPipeline::default(TOKENIZER_PATH, &relation_schema)?.to_composable(&model, ¶ms),
Print::new(Some("Relations:\n"), None)
];
pipeline.apply(input)?;
Ok(())
}