Skip to main content

LLM-Rosetta

PyPI version GitHub release Docker CI License: MIT arXiv

English Version | 中文版

LLM-Rosetta — A Python library for converting between different LLM provider API formats using a hub-and-spoke architecture with a central IR (Intermediate Representation).

Full Documentation

Full documentation is available at:

The Problem

When building applications that work with multiple LLM providers, you face an N² conversion problem — every provider pair requires its own conversion logic. LLM-Rosetta solves this with a hub-and-spoke approach: each provider only needs a single converter to/from the shared IR format.

Provider A ──→ IR ──→ Provider B
Provider C ──→ IR ──→ Provider D
         ... and so on

Supported Providers

Provider API Standard Request Response Streaming
OpenAI Chat Completions
OpenAI Responses API
Anthropic Messages API
Google GenAI API

Ollama & Other OpenAI-Compatible Servers

LLM-Rosetta works out of the box with any server that exposes OpenAI-compatible endpoints. Ollama (v0.13+) is a great example — it supports three of the four API formats that LLM-Rosetta converts between:

Ollama Endpoint LLM-Rosetta Converter Since
/v1/chat/completions openai_chat Early versions
/v1/responses openai_responses v0.13.3
/v1/messages anthropic v0.14.0

Other compatible servers include HuggingFace TGI, vLLM, and LM Studio.

Features

  • Unified IR format for messages, tool calls, and content parts
  • Bidirectional conversion: requests to provider format, responses from provider format
  • Streaming support with typed stream events
  • Auto-detection of provider from request/response objects
  • Support for text, images, tool calls, and tool results
  • Zero required dependencies (only typing_extensions); provider SDKs are optional

Compliance Testing

llm-comply is a companion tool that validates LLM API endpoints against official specs. Use it to verify that a gateway or proxy correctly implements the OpenAI Chat, Open Responses, Anthropic Messages, and Google GenAI formats.

pip install llm-comply

# Test your gateway endpoint
llm-comply -u https://your-gateway/v1 -k $API_KEY -m your-model --format openai-chat

A hosted version is available at llm-comply.service.oaklight.top. An on-demand Compliance workflow is also included in CI.

Installation

Basic Installation

Install the core package (requires Python >= 3.8):

pip install llm-rosetta

Installing with Provider SDKs

# Individual providers
pip install llm-rosetta[openai]
pip install llm-rosetta[anthropic]
pip install llm-rosetta[google]

# All providers
pip install llm-rosetta[openai,anthropic,google]

Optional Dependencies

Extra Packages Description
openai openai OpenAI Chat Completions & Responses API
anthropic anthropic Anthropic Messages API
google google-genai Google GenAI API

Quick Start

from llm_rosetta import OpenAIChatConverter, AnthropicConverter

# Create converters
openai_conv = OpenAIChatConverter()
anthropic_conv = AnthropicConverter()

# Convert an OpenAI response to IR, then to Anthropic format
ir_messages = openai_conv.response_from_provider(openai_response)
anthropic_request = anthropic_conv.request_to_provider(ir_messages)

Auto-Detection

from llm_rosetta import convert, detect_provider

# Automatically detect provider and convert
provider = detect_provider(some_response)
ir_messages = convert(some_response, direction="from_provider")

Cross-Provider Conversation

from llm_rosetta import OpenAIChatConverter, GoogleGenAIConverter
from llm_rosetta.types.ir import Message, ContentPart

# Shared IR message history
ir_messages = []

# Turn 1: Ask OpenAI
ir_messages.append(Message(role="user", content=[ContentPart(type="text", text="Hello!")]))
openai_request = openai_conv.request_to_provider({"messages": ir_messages})
openai_response = openai_client.chat.completions.create(**openai_request)
ir_messages.extend(openai_conv.response_from_provider(openai_response))

# Turn 2: Continue with Google — full context preserved
google_request = google_conv.request_to_provider({"messages": ir_messages})

Citation

If you use LLM-Rosetta in your research, please cite our paper:

@article{ding2026llm,
  title={LLM-Rosetta: A Hub-and-Spoke Intermediate Representation for Cross-Provider LLM API Translation},
  author={Ding, Peng},
  journal={arXiv preprint arXiv:2604.09360},
  year={2026}
}

Contributing

Contributions are welcome! Please visit the GitHub repository to get started.

License

This project is licensed under the MIT License — see the LICENSE file for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_rosetta-0.8.0.tar.gz (441.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_rosetta-0.8.0-py3-none-any.whl (487.7 kB view details)

Uploaded Python 3

File details

Details for the file llm_rosetta-0.8.0.tar.gz.

File metadata

  • Download URL: llm_rosetta-0.8.0.tar.gz
  • Upload date:
  • Size: 441.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for llm_rosetta-0.8.0.tar.gz
Algorithm Hash digest
SHA256 a4ab1d741d9f4c37417f81460ba8cd175145f713bc6acb1cda108ac908a5497a
MD5 dec30cdff205dbcfd78f1d3722c32c2a
BLAKE2b-256 3be9f8b4e9ace96f23bf8fd823f75c83d3f058b9eecd8517358561bbcddd600f

See more details on using hashes here.

Provenance

The following attestation bundles were made for llm_rosetta-0.8.0.tar.gz:

Publisher: release.yml on Oaklight/llm-rosetta

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file llm_rosetta-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: llm_rosetta-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 487.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for llm_rosetta-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 55c7185af0f78b52f7a5a7a39ea1fc7c65b8276d521bfb94e534ad73b25f49c8
MD5 60e2c4293a2cb99ae15ddc1ea541e4cb
BLAKE2b-256 e2b9b4022cbd7921bac0437c970721a8b7ab0a2d01dafeae71b9e20c9ec4bebf

See more details on using hashes here.

Provenance

The following attestation bundles were made for llm_rosetta-0.8.0-py3-none-any.whl:

Publisher: release.yml on Oaklight/llm-rosetta

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page