x-ai 0.1.0

✨ A cli, tui, and sdk for interacting with the 𝕏-AI API
Documentation
// Copyright 2026 Mahmoud Harmouch.
//
// Licensed under the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![allow(async_fn_in_trait)]

use crate::api_key::ApiKeyInfo;
use crate::chat_compl::ChatCompletionRequest;
use crate::chat_compl::ChatCompletionResponse;
use crate::completions::CompletionsRequest;
use crate::completions::CompletionsResponse;
use crate::embedding::EmbeddingRequest;
use crate::embedding::EmbeddingResponse;
use crate::embedding_get::EmbeddingModelResponse;
use crate::embedding_mod::EmbeddingModelsResponse;
use crate::error::XaiError;
use crate::get_mod::ModelInfoResponse;
use crate::lang_mod::LanguageModelDetailResponse;
use crate::list_lang_mod::LanguageModelListResponse;
use crate::list_mod::ReducedModelListResponse;
use crate::responses::{CreateResponseRequest, DeleteResponseObject, ResponseObject};
use reqwest::{Method, RequestBuilder};

pub trait ClientConfig {
    fn set_api_key(&self, api_key: String);
    fn get_api_key(&self) -> Option<String>;
    fn request(&self, method: Method, endpoint: &str) -> Result<RequestBuilder, XaiError>;
}

pub trait ApiKeyFetcher {
    async fn fetch_api_key_info(&self) -> Result<ApiKeyInfo, XaiError>;
}

pub trait ChatCompletionsFetcher {
    async fn create_chat_completion(
        &self,
        request: ChatCompletionRequest,
    ) -> Result<ChatCompletionResponse, XaiError>;
}

pub trait CompletionsFetcher {
    async fn create_completions(
        &self,
        request: CompletionsRequest,
    ) -> Result<CompletionsResponse, XaiError>;
}

pub trait EmbeddingFetcher {
    async fn create_embedding(
        &self,
        request: EmbeddingRequest,
    ) -> Result<EmbeddingResponse, XaiError>;
}

pub trait EmbeddingModelsFetcher {
    async fn list_embedding_models(&self) -> Result<EmbeddingModelsResponse, XaiError>;
}

pub trait EmbeddingModelFetcher {
    async fn fetch_model_info(&self) -> Result<EmbeddingModelResponse, XaiError>;
}

pub trait ModelFetcher {
    async fn fetch_model_info(&self) -> Result<LanguageModelListResponse, XaiError>;
}

pub trait GetModelFetcher {
    async fn fetch_model_info(&self) -> Result<LanguageModelDetailResponse, XaiError>;
}

pub trait ListModelFetcher {
    async fn fetch_model_info(&self) -> Result<ReducedModelListResponse, XaiError>;
}

pub trait ModelInfoFetcher {
    async fn fetch_model_info(&self) -> Result<ModelInfoResponse, XaiError>;
}

pub trait DeferredCompletionFetcher {
    async fn fetch_deferred_completion(
        &self,
        request_id: &str,
    ) -> Result<Option<ChatCompletionResponse>, XaiError>;
}

pub trait ResponsesFetcher {
    async fn create_response(
        &self,
        request: CreateResponseRequest,
    ) -> Result<ResponseObject, XaiError>;
    async fn get_response(&self, response_id: &str) -> Result<ResponseObject, XaiError>;
    async fn delete_response(&self, response_id: &str) -> Result<DeleteResponseObject, XaiError>;
}
// Copyright 2026 Mahmoud Harmouch.
//
// Licensed under the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.