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:
cargo add async-openai tokioConfiguracao
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);| Header | Descricao |
|---|---|
Floopy-Cache | Estrategia de cache: semantic ou exact |
floopy-property-* | Anexe metadados personalizados para filtragem no dashboard |
floopy-fallback | Modelo de fallback se o provedor principal falhar |
floopy-session-id | Agrupe requisicoes relacionadas em uma sessao |
floopy-user-id | Associe requisicoes a um usuario final |
Consulte a Referencia de Headers para a lista completa.