Upload any document — get back markdown, embeddings, metadata, and a searchable index. What takes 7 weeks of plumbing to build, Roset handles in 5 minutes.
Roset doesn't compete with extraction services (Reducto, Gemini, Whisper). It orchestrates them — managing queues, retries, normalization, variant tracking, and a unified output schema across all file types.
import { RosetClient } from "@roset/sdk";
const roset = new RosetClient({ apiKey: process.env.ROSET_API_KEY });
// Upload a file — Roset routes to the right extraction provider
const { file_id, upload_url } = await roset.files.upload({
filename: "report.pdf",
content_type: "application/pdf",
size_bytes: 102400,
});
// PUT file bytes directly to the signed URL
await fetch(upload_url, { method: "PUT", body: fileBuffer });
// Retrieve structured variants
const { variants } = await roset.files.listVariants(file_id);
// → markdown, embeddings, metadata, searchable-indexfrom roset import RosetClient
client = RosetClient(api_key="rsk_...")
# Upload and process
result = client.files.upload(
filename="report.pdf",
content_type="application/pdf",
size_bytes=102400,
)
# Get variants
variants = client.files.list_variants(result["file_id"])- Unified Upload —
roset.files.upload(file)handles PDFs, images, audio, DOCX, PPTX. One API for all file types. - 4 Variant Types — Every upload produces markdown (readable), embeddings (searchable), metadata (filterable), and a searchable index (queryable).
- Multi-Provider Routing — Automatically routes to Reducto (documents), Gemini (images), Whisper (audio), OpenAI (embeddings).
- Managed Keys by Default — Roset manages extraction provider keys (Reducto, OpenAI, Gemini, Whisper) so you can start processing immediately. Optionally bring your own keys (BYOK) in Settings.
- Processing State Machine —
uploading → queued → processing → completed / failedwith retries and dead-letter handling. - Search & Q&A — Full-text, vector, and hybrid search. RAG-powered Q&A with source citations.
- Storage Connectors — Connect existing S3, GCS, Azure Blob, MinIO, Cloudflare R2, or Supabase Storage buckets.
- Spaces — Optionally scope files to namespace labels for B2B SaaS isolation (defaults to "default").
- Webhooks — Processing lifecycle events (file completed, variant ready, job failed).
| SDK | Description |
|---|---|
@roset/sdk |
TypeScript SDK for web, backend, and edge runtimes. |
roset |
Python SDK for backend and automation. |
roset upload ./report.pdf documents/report.pdf
roset search "payment terms" --mode hybrid
roset qa "What are the key findings?"See cli/ for installation and full command reference.
Roset is a transformation engine that sits between your storage and everything else:
- Upload — Files go in unstructured (PDF, image, audio, document).
- Transform — Roset routes to the right extraction provider (Reducto, Gemini, Whisper, OpenAI) and produces structured variants.
- Query — Downstream systems consume the structured outputs: markdown for LLMs, embeddings for RAG, metadata for filtering, searchable index for full-text search.
Apache 2.0 © Roset
