hiramu-cli 0.1.23

A command-line interface tool for interacting with large language models (LLMs) on AWS Bedrock and generating text based on prompts.
Documentation
use crate::model::Generate;
use futures_util::TryStreamExt;
use hiramu::ollama::model::GenerateRequestBuilder;
use hiramu::ollama::ollama_client::OllamaClient;

use hiramu::ollama::OptionsBuilder;
use tokio::io::AsyncWriteExt;

pub struct OllamaProvider {
    endpoint: String,
    model: String,
    maxtoken: Option<u32>,
    temperature: Option<f32>,
}

impl OllamaProvider {
    pub fn new(
        endpoint: String,
        model: String,
        maxtoken: Option<u32>,
        temperature: Option<f32>,
    ) -> OllamaProvider {
        OllamaProvider {
            endpoint,
            model,
            maxtoken,
            temperature,
        }
    }
}

impl Generate for OllamaProvider {
    async fn generate(&self, prompt: &str) -> () {
        let client = OllamaClient::new(self.endpoint.clone());

        let options_builder = OptionsBuilder::new();

        let options_builder = match self.maxtoken {
            Some(maxtoken) => options_builder.num_predict(maxtoken),
            None => options_builder,
        };

        let options_builder = match self.temperature {
            Some(temperature) => options_builder.temperature(temperature),
            None => options_builder,
        };

        let request = GenerateRequestBuilder::new(self.model.clone())
            .options_from_builder(options_builder)
            .prompt(prompt.to_owned())
            .build();

        let response_stream = client.generate(request).await.unwrap();

        response_stream
            .try_for_each(|chunk| async move {
                let mut stdout = tokio::io::stdout();
                stdout.write_all(chunk.response.as_bytes()).await.unwrap();
                stdout.flush().await.unwrap();

                Ok(())
            })
            .await
            .unwrap();

        println!("");
    }
}