Pular para o conteúdo

Rust

Visao Geral

O Floopy e um gateway sem SDK. O crate async-openai suporta URLs base personalizadas, entao voce pode rotear todas as requisicoes pelo Floopy sem dependencias extras. Voce ganha cache, rate limiting, fallbacks e observabilidade de graca.

Instalacao

Adicione ao seu Cargo.toml:

Terminal window
cargo add async-openai tokio

Configuracao

use async_openai::{Client, config::OpenAIConfig};
let config = OpenAIConfig::new()
.with_api_base("https://api.floopy.ai/v1")
.with_api_key("fp_your_api_key"); // starts with fp_
let client = Client::with_config(config);

Defina sua chave de API do Floopy (comeca com fp_). Voce pode criar uma no dashboard.

Requisicao Basica

use async_openai::types::{
ChatCompletionRequestUserMessageArgs,
CreateChatCompletionRequestArgs,
};
let request = CreateChatCompletionRequestArgs::default()
.model("gpt-4o")
.messages(vec![
ChatCompletionRequestUserMessageArgs::default()
.content("Explain quantum computing in one sentence.")
.build()?
.into(),
])
.build()?;
let response = client.chat().create(request).await?;
println!("{}", response.choices[0].message.content.as_ref().unwrap());

Streaming

use futures::StreamExt;
let request = CreateChatCompletionRequestArgs::default()
.model("gpt-4o")
.messages(vec![
ChatCompletionRequestUserMessageArgs::default()
.content("Write a short poem.")
.build()?
.into(),
])
.stream(true)
.build()?;
let mut stream = client.chat().create_stream(request).await?;
while let Some(result) = stream.next().await {
match result {
Ok(response) => {
for choice in &response.choices {
if let Some(ref content) = choice.delta.content {
print!("{}", content);
}
}
}
Err(e) => eprintln!("Error: {}", e),
}
}

Headers Personalizados

Passe headers especificos do Floopy configurando um cliente reqwest personalizado:

use reqwest::header::{HeaderMap, HeaderValue};
let mut headers = HeaderMap::new();
headers.insert("Floopy-Cache", HeaderValue::from_static("semantic"));
headers.insert("floopy-property-environment", HeaderValue::from_static("production"));
headers.insert("floopy-fallback", HeaderValue::from_static("claude-sonnet-4-20250514"));
let http_client = reqwest::Client::builder()
.default_headers(headers)
.build()?;
let config = OpenAIConfig::new()
.with_api_base("https://api.floopy.ai/v1")
.with_api_key("fp_your_api_key");
let client = Client::with_config(config).with_http_client(http_client);
HeaderDescricao
Floopy-CacheEstrategia de cache: semantic ou exact
floopy-property-*Anexe metadados personalizados para filtragem no dashboard
floopy-fallbackModelo de fallback se o provedor principal falhar
floopy-session-idAgrupe requisicoes relacionadas em uma sessao
floopy-user-idAssocie requisicoes a um usuario final

Consulte a Referencia de Headers para a lista completa.