Skip to main content

XaiClient

Struct XaiClient 

Source
pub struct XaiClient { /* private fields */ }
Expand description

The main xAI API client.

Use this client to interact with all xAI API endpoints.

§Example

use xai_rust::XaiClient;

// Create from API key
let client = XaiClient::new("your-api-key")?;

// Or use the builder
let client = XaiClient::builder()
    .api_key("your-api-key")
    .timeout_secs(300)
    .build()?;

// Or load from XAI_API_KEY environment variable
let client = XaiClient::from_env()?;

Implementations§

Source§

impl XaiClient

Source

pub fn new(api_key: impl Into<String>) -> Result<Self>

Create a new client with the given API key.

Uses default configuration (global endpoint, 120s timeout).

§Errors

Returns an error if the API key contains invalid header characters or the HTTP client cannot be created.

Source

pub fn from_env() -> Result<Self>

Create a new client from the XAI_API_KEY environment variable.

Source

pub fn builder() -> XaiClientBuilder

Create a new client builder.

Source

pub fn sync(&self) -> Result<SyncXaiClient>

Create a blocking/sync facade from this async client.

The sync facade is intended for non-async applications and should not be used from inside an active async runtime.

Source

pub fn into_sync(self) -> Result<SyncXaiClient>

Convert this async client into a blocking/sync facade.

The sync facade is intended for non-async applications and should not be used from inside an active async runtime.

Source

pub fn with_config(config: ClientConfig) -> Result<Self>

Create a client with the given configuration.

Source

pub fn base_url(&self) -> &str

Get the base URL for API requests.

Source

pub fn responses(&self) -> ResponsesApi

Access the Responses API.

The Responses API is the primary endpoint for chat interactions.

§Example
use xai_rust::{XaiClient, Role};

let client = XaiClient::from_env()?;

let response = client.responses()
    .create("grok-4")
    .message(Role::User, "Hello!")
    .send()
    .await?;
Source

pub fn auth(&self) -> AuthApi

Access the Auth API.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;
let key = client.auth().api_key().await?;
println!("Authenticated as: {}", key.api_key);
Source

pub fn chat(&self) -> ChatApi

Access the Chat Completions API (legacy).

Note: The Chat Completions API is deprecated. Use responses() instead.

Source

pub fn images(&self) -> ImagesApi

Access the Images API.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;

let response = client.images()
    .generate("grok-2-image", "A cat in a tree")
    .send()
    .await?;
Source

pub fn videos(&self) -> VideosApi

Access the Videos API.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;
let video = client.videos().get("video-123").await?;
println!("Video: {:?}", video.id);
Source

pub fn files(&self) -> FilesApi

Access the Files API.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;

let files = client.files().list().await?;
Source

pub fn models(&self) -> ModelsApi

Access the Models API.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;

let models = client.models().list().await?;
Source

pub fn realtime(&self) -> RealtimeApi

Access the Realtime API for voice interactions.

§Example
use xai_rust::{XaiClient, Voice, AudioFormat};

let client = XaiClient::from_env()?;

let session = client.realtime()
    .connect("grok-4")
    .voice(Voice::Ara)
    .audio_format(AudioFormat::Pcm16)
    .start()
    .await?;
Source

pub fn batch(&self) -> BatchApi

Access the Batch API for processing multiple requests.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;

let batch = client.batch().create("my-batch").await?;
println!("Created batch: {}", batch.id);
Source

pub fn collections(&self) -> CollectionsApi

Access the Collections API for document storage and retrieval.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;

let collection = client.collections().create_named("my-docs").await?;
println!("Created collection: {}", collection.id);
Source

pub fn documents(&self) -> DocumentsApi

Access the Documents API.

§Example
use xai_rust::api::DocumentsSearchRequest;
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;
let response = client.documents().search(DocumentsSearchRequest::new("query")).await?;
println!("Found {} results", response.results.len());
Source

pub fn embeddings(&self) -> EmbeddingsApi

Access the Embeddings API.

§Example
use serde_json::json;
use xai_rust::api::EmbeddingsRequest;
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;
let response = client
    .embeddings()
    .create(EmbeddingsRequest::new("text-embedding", json!("Hello")))
    .await?;
println!("embedding result {}",
    response.data.len());
Source

pub fn tokenizer(&self) -> TokenizerApi

Access the Tokenizer API for counting tokens.

§Example
use xai_rust::XaiClient;

let client = XaiClient::from_env()?;

let count = client.tokenizer()
    .count_tokens("grok-4", "Hello, world!")
    .await?;

println!("Token count: {}", count);

Trait Implementations§

Source§

impl Clone for XaiClient

Source§

fn clone(&self) -> XaiClient

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for XaiClient

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more