chabeau 0.7.3

A full-screen terminal chat interface that connects to various AI APIs for real-time conversations
Documentation
use crate::api::models::fetch_models;
use crate::core::app::{AppActionContext, AppActionDispatcher, ModelPickerRequest, PickerAction};

pub fn spawn_model_picker_loader(dispatcher: AppActionDispatcher, request: ModelPickerRequest) {
    tokio::spawn(async move {
        let ModelPickerRequest {
            client,
            base_url,
            api_key,
            provider_name,
            default_model_for_provider,
        } = request;

        let fetch_result = fetch_models(&client, &base_url, &api_key, &provider_name)
            .await
            .map_err(|e| e.to_string());

        let action = match fetch_result {
            Ok(models_response) => PickerAction::ModelPickerLoaded {
                default_model_for_provider,
                models_response,
            },
            Err(error) => PickerAction::ModelPickerLoadFailed { error },
        };

        dispatcher.dispatch_many([action], AppActionContext::default());
    });
}