api_ollama 0.2.0

Ollama local LLM runtime API client for HTTP communication.
Documentation
//! Integration tests for example functionality
#[ cfg( test ) ]
mod tests
{
  use api_ollama::{ OllamaClient, ChatMessage, MessageRole };

  #[ tokio::test ]
  async fn test_chatbot_assistant_basic_functionality()
  {
    // This test ensures the chatbot assistant can initialize and handle basic requests
    let mut client = OllamaClient::new( "http://localhost:11434".to_string(), OllamaClient::recommended_timeout_fast() );
    
    // Test client initialization doesn't panic
    assert!( !client.is_available().await || client.is_available().await );
    
    // Test message creation doesn't panic
    let message = ChatMessage
    {
      role : MessageRole::User,
      content : "Hello".to_string(),
      images : None,
      #[ cfg( feature = "tool_calling" ) ]
      tool_calls : None,
    };
    
    assert_eq!( message.content, "Hello" );
  }

  #[ tokio::test ]
  async fn test_input_loop_doesnt_hang()
  {
    // This test simulates the interactive loop without blocking on stdin
    let mut conversation_history = vec![
      ChatMessage
      {
        role : MessageRole::System,
        content : "You are a helpful assistant.".to_string(),
        images : None,
        #[ cfg( feature = "tool_calling" ) ]
        tool_calls : None,
      }
    ];
    
    // Test that we can add messages without hanging
    let user_input = "test input";
    conversation_history.push( ChatMessage
    {
      role : MessageRole::User,
      content : user_input.to_string(),
      images : None,
      #[ cfg( feature = "tool_calling" ) ]
      tool_calls : None,
    } );
    
    assert_eq!( conversation_history.len(), 2 );
    
    // Test conversation history limit
    for i in 0..25
    {
      conversation_history.push( ChatMessage
      {
        role : MessageRole::User,
        content : format!( "Message {i}" ),
        images : None,
        #[ cfg( feature = "tool_calling" ) ]
        tool_calls : None,
      } );
    }
    
    // Simulate the history management logic from the example
    if conversation_history.len() > 21
    {
      conversation_history.drain( 1..conversation_history.len() - 20 );
    }
    
    assert!( conversation_history.len() <= 21 );
  }

  #[ tokio::test ]
  async fn test_examples_can_initialize_without_hanging()
  {
    // Test that all examples can at least initialize their basic structures
    // without hanging on stdin or network calls
    
    // Test chatbot initialization
    let _client = OllamaClient::new( "http://localhost:11434".to_string(), OllamaClient::recommended_timeout_fast() );
    // Client initialization should not panic
    
    // Test conversation structure (from chatbot_assistant)
    let mut conversation_history = vec![
      ChatMessage
      {
        role : MessageRole::System,
        content : "You are a helpful assistant.".to_string(),
        images : None,
        #[ cfg( feature = "tool_calling" ) ]
        tool_calls : None,
      }
    ];
    
    // Test adding user message (simulating non-interactive input)
    let test_inputs = vec![ "hello", "quit" ];
    for input in test_inputs
    {
      if input == "quit" { break; }
      
      conversation_history.push( ChatMessage
      {
        role : MessageRole::User,
        content : input.to_string(),
        images : None,
        #[ cfg( feature = "tool_calling" ) ]
        tool_calls : None,
      } );
    }
    
    assert!( conversation_history.len() >= 2 ); // System + at least one user message
  }
}