Key facts
| API compatibility | Drop-in OpenAI-style chat and embeddings endpoints (live) |
| Multilingual embeddings | plugsky-embed-multilingual via /v1/embeddings (live) |
| Models | 30+ models behind one endpoint, route per language |
| Structured output | JSON mode for locale-aware response objects |
| Migration | Base URL and model names change; re-embed into one shared collection |
| Pricing | Flat monthly plans with unlimited fair-use usage on self-serve |
| Residency | Region-locked planes, VPC, on-prem and air-gapped options |
| Free tier | plugsky-micro and plugsky-lite on the free plan, no card required |
TL;DR
- Keep one client and one endpoint; language becomes a routing decision, not a code path.
- Re-embed the corpus with plugsky-embed-multilingual into a single collection.
- Detect language in code and pass it to prompts and filters as metadata.
- Validate quality per language before routing traffic to a new model.
- Return structured output that records the response language and sources.
How it works, step by step
- Move base URL, key and model names into configuration so language routing can change without deploys.
- Re-embed multilingual content with plugsky-embed-multilingual into one collection, replacing per-language indexes.
- Add deterministic language detection and pass the locale into prompts and retrieval filters.
- Define JSON-mode response shapes that include the answer, the response language and source references.
- Run a per-language evaluation across candidate models and record which performs best for each language and task.
- Encode the winners in a routing table and roll out language by language behind a flag.
- Monitor per-language error rates, latency and refusal behaviour, and adjust routing as data accumulates.
Try it yourself
Open the OpenAI-compatible API tester →
Compatibility across languages
Multilingual apps often grow messy: one integration per provider, one index per language, translation layers between them. An OpenAI-compatible endpoint collapses the model side. Chat completions, streaming, JSON mode and embeddings all use the same client, so the only thing that varies by language is which model name you choose.
Plugsky exposes 30+ models behind that endpoint, and plugsky-embed-multilingual for embeddings. Specialist endpoints such as files and batch are coming soon, so bulk multilingual ingestion stays in your pipeline for now — which is where translation and normalisation steps belong anyway.
Embeddings and retrieval in one space
The biggest migration win is consolidating indexes. With multilingual embeddings, documents in Arabic, English and French can live in one collection and answer each other's questions. That removes synchronisation work and improves recall for users whose language has less content.
- Normalise input: strip diacritics and standardise script variants before embedding.
- Tag metadata: store language, region and version per chunk for preference and fallback rules.
- Re-embed once: switching embedding models requires a full backfill — plan for it before cutover.
- Keep originals: citations should display the source language text, not a translation.
Rollout per language
Treat each language as its own release. Run the evaluation, pick the model, ship behind a flag, and watch error rates, latency and escalation behaviour before enabling the next language. Aggregate dashboards hide the failures that only appear in one locale, so keep per-language views.
Because the API is compatible and routing lives in configuration, rollback per language is a config change. Keep prompts and glossaries versioned per language, and record the response language in structured output so analytics can segment by locale. Where data must remain in-market, pin deployments to a region-locked plane or run VPC, on-prem or air-gapped with the same client code.
Honest comparison
| Aspect | Plugsky | Per-language integrations | Translation middleware |
|---|---|---|---|
| Client code | One compatible client | One adapter per provider | Extra pipeline stage |
| Embeddings | One multilingual vector space | Index per language | Translated text indexed |
| Model routing | 30+ models, per-language choice | Provider-limited | Fixed model |
| Pricing | Flat monthly with unlimited fair use on self-serve | Mixed per-token bills | Per-token plus translation |
| Residency | Region choice, VPC, on-prem, air-gapped | Varies | Varies |
Frequently asked questions
Do we need separate indexes per language?
No, and you should avoid them. plugsky-embed-multilingual places equivalent content from different languages in one vector space, so a single collection serves every language with better coverage.
How do we pick a model per language?
Evaluate. Run the same task set per language across candidate models, record quality and latency, and encode the results in a routing table. Model strengths differ by language.
Will our existing prompts work?
Mostly, but test them. Ask for the answer in the user's language explicitly, keep formatting in code, and provide approved terminology per language where consistency matters.
How do we migrate embeddings safely?
Backfill a new collection with plugsky-embed-multilingual, verify recall on per-language question sets, then switch reads. Vectors from different models cannot be mixed in one index.
What about right-to-left languages?
Keep text generation responsible for language, not layout. Return structured content and let the interface handle direction, numerals and typography per locale.
How do we control cost across languages?
Use small models for high-volume, lower-complexity languages and reserve stronger models where quality demands. Flat self-serve plans make forecasting easier than per-token billing.
Can we keep data in one market?
Yes. Plugsky supports region-locked cloud planes plus VPC, on-prem and air-gapped deployment, so content can stay where policy requires.