use crate::{
ChatRequest, ChatResponse, EmbedRequest, EmbedResponse, GenerateRequest, GenerateResponse,
Result, VersionResponse,
};
use super::streaming::ChatStreamBlocking;
#[cfg(feature = "model")]
use crate::{
CopyRequest, CreateRequest, CreateResponse, DeleteRequest, ListResponse, PsResponse,
PullRequest, PullResponse, PushRequest, PushResponse, ShowRequest, ShowResponse,
};
use super::OllamaClient;
use super::endpoints::Endpoints;
pub trait OllamaApiSync: Send + Sync {
fn version_blocking(&self) -> Result<VersionResponse>;
#[cfg(feature = "model")]
fn list_models_blocking(&self) -> Result<ListResponse>;
#[cfg(feature = "model")]
fn copy_model_blocking(&self, request: &CopyRequest) -> Result<()>;
#[cfg(feature = "model")]
fn list_running_models_blocking(&self) -> Result<PsResponse>;
#[cfg(feature = "model")]
fn delete_model_blocking(&self, request: &DeleteRequest) -> Result<()>;
#[cfg(feature = "model")]
fn show_model_blocking(&self, request: &ShowRequest) -> Result<ShowResponse>;
fn embed_blocking(&self, request: &EmbedRequest) -> Result<EmbedResponse>;
fn generate_blocking(&self, request: &GenerateRequest) -> Result<GenerateResponse>;
fn chat_blocking(&self, request: &ChatRequest) -> Result<ChatResponse>;
fn chat_stream_blocking(&self, request: &ChatRequest) -> Result<ChatStreamBlocking>;
#[cfg(feature = "model")]
fn create_model_blocking(&self, request: &CreateRequest) -> Result<CreateResponse>;
#[cfg(feature = "model")]
fn pull_model_blocking(&self, request: &PullRequest) -> Result<PullResponse>;
#[cfg(feature = "model")]
fn push_model_blocking(&self, request: &PushRequest) -> Result<PushResponse>;
}
impl OllamaApiSync for OllamaClient {
fn version_blocking(&self) -> Result<VersionResponse> {
let url = self.config.url(Endpoints::VERSION);
self.get_blocking_with_retry(&url)
}
#[cfg(feature = "model")]
fn list_models_blocking(&self) -> Result<ListResponse> {
let url = self.config.url(Endpoints::TAGS);
self.get_blocking_with_retry(&url)
}
#[cfg(feature = "model")]
fn copy_model_blocking(&self, request: &CopyRequest) -> Result<()> {
let url = self.config.url(Endpoints::COPY);
self.post_empty_blocking_with_retry(&url, request)
}
#[cfg(feature = "model")]
fn list_running_models_blocking(&self) -> Result<PsResponse> {
let url = self.config.url(Endpoints::PS);
self.get_blocking_with_retry(&url)
}
#[cfg(feature = "model")]
fn delete_model_blocking(&self, request: &DeleteRequest) -> Result<()> {
let url = self.config.url(Endpoints::DELETE);
self.delete_empty_blocking_with_retry(&url, request)
}
#[cfg(feature = "model")]
fn show_model_blocking(&self, request: &ShowRequest) -> Result<ShowResponse> {
let url = self.config.url(Endpoints::SHOW);
self.post_blocking_with_retry(&url, request)
}
fn embed_blocking(&self, request: &EmbedRequest) -> Result<EmbedResponse> {
let url = self.config.url(Endpoints::EMBED);
self.post_blocking_with_retry(&url, request)
}
fn generate_blocking(&self, request: &GenerateRequest) -> Result<GenerateResponse> {
let url = self.config.url(Endpoints::GENERATE);
self.post_blocking_with_retry(&url, request)
}
fn chat_blocking(&self, request: &ChatRequest) -> Result<ChatResponse> {
let url = self.config.url(Endpoints::CHAT);
self.post_blocking_with_retry(&url, request)
}
fn chat_stream_blocking(&self, request: &ChatRequest) -> Result<ChatStreamBlocking> {
let mut req = request.clone();
req.stream = Some(true);
let url = self.config.url(Endpoints::CHAT);
self.post_ndjson_stream_blocking(&url, &req)
}
#[cfg(feature = "model")]
fn create_model_blocking(&self, request: &CreateRequest) -> Result<CreateResponse> {
let url = self.config.url(Endpoints::CREATE);
self.post_blocking_with_retry(&url, request)
}
#[cfg(feature = "model")]
fn pull_model_blocking(&self, request: &PullRequest) -> Result<PullResponse> {
let url = self.config.url(Endpoints::PULL);
self.post_blocking_with_retry(&url, request)
}
#[cfg(feature = "model")]
fn push_model_blocking(&self, request: &PushRequest) -> Result<PushResponse> {
let url = self.config.url(Endpoints::PUSH);
self.post_blocking_with_retry(&url, request)
}
}