diff --git a/examples/version.rs b/examples/version.rs new file mode 100644 index 0000000..a422bee --- /dev/null +++ b/examples/version.rs @@ -0,0 +1,14 @@ +use std::{env, error::Error}; + +use ollama_rs::OllamaClient; + +#[tokio::main] +async fn main() -> Result<(), Box> { + tracing_subscriber::fmt().init(); + let _ = dotenvy::dotenv(); + let server_address = env::var("OLLAMA_SERVER")?; + let ollama_client = OllamaClient::new(server_address); + let version_response = ollama_client.version().await?; + println!("{}", version_response.version); + Ok(()) +} diff --git a/src/lib.rs b/src/lib.rs index 30641bb..7aca4bf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ use crate::{ ps::RunningModel, pull::{PullRequest, PullResponse}, tags::Model, + version::VersionResponse, }, }; @@ -33,6 +34,15 @@ impl OllamaClient { } } + pub async fn version(&self) -> OllamaResult { + let request_address = format!("{}/api/version", self.server_address); + Ok(reqwest::get(request_address) + .await? + .error_for_status()? + .json() + .await?) + } + /// Fetch a list of models and their details pub async fn tags(&self) -> OllamaResult> { let request_address = format!("{}/api/tags", self.server_address); diff --git a/src/types/mod.rs b/src/types/mod.rs index 1fcc5d3..1054deb 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -4,3 +4,4 @@ pub mod generate; pub mod ps; pub mod pull; pub mod tags; +pub mod version; diff --git a/src/types/version.rs b/src/types/version.rs new file mode 100644 index 0000000..65730e3 --- /dev/null +++ b/src/types/version.rs @@ -0,0 +1,6 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct VersionResponse { + pub version: String, +}