<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: J.Goutin</title>
    <description>The latest articles on DEV Community by J.Goutin (@jgoutin).</description>
    <link>https://dev.to/jgoutin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3670759%2F87ff2cd0-83f7-4aa0-ac58-10133f39e604.png</url>
      <title>DEV Community: J.Goutin</title>
      <link>https://dev.to/jgoutin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jgoutin"/>
    <language>en</language>
    <item>
      <title>AWS retired Bedrock Access Gateway: what moving to the native APIs actually costs</title>
      <dc:creator>J.Goutin</dc:creator>
      <pubDate>Thu, 10 Sep 2026 20:21:56 +0000</pubDate>
      <link>https://dev.to/jgoutin/aws-retired-bedrock-access-gateway-what-moving-to-the-native-apis-actually-costs-5fp5</link>
      <guid>https://dev.to/jgoutin/aws-retired-bedrock-access-gateway-what-moving-to-the-native-apis-actually-costs-5fp5</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;On 4 September 2026 AWS deprecated and archived&lt;br&gt;
&lt;a href="https://github.com/aws-samples/bedrock-access-gateway" rel="noopener noreferrer"&gt;&lt;code&gt;aws-samples/bedrock-access-gateway&lt;/code&gt;&lt;/a&gt;,&lt;br&gt;
the OpenAI-compatible proxy a lot of teams put in front of Amazon Bedrock. The&lt;br&gt;
reason given is fair: Bedrock now serves those APIs itself.&lt;/p&gt;

&lt;p&gt;Three things are worth knowing before you follow the migration note. It points at&lt;br&gt;
&lt;code&gt;bedrock-mantle&lt;/code&gt;, while AWS's endpoint page says to prefer &lt;code&gt;bedrock-runtime&lt;/code&gt; for&lt;br&gt;
most new applications, and the two trade real capabilities against each other. The&lt;br&gt;
native surface reaches &lt;strong&gt;55 of the 96 text models&lt;/strong&gt;, and &lt;strong&gt;47 of those speak&lt;br&gt;
exactly one&lt;/strong&gt; of Chat Completions, Responses or Messages, so changing model can&lt;br&gt;
mean changing protocol. And embeddings have a route only on &lt;code&gt;bedrock-mantle&lt;/code&gt;,&lt;br&gt;
where no embedding model is available.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually happened
&lt;/h2&gt;

&lt;p&gt;The repository is archived, not merely marked. &lt;code&gt;archived: true&lt;/code&gt;, last push&lt;br&gt;
4 September 2026. The README now opens:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This project is deprecated.&lt;/strong&gt; Amazon Bedrock now serves OpenAI-compatible and&lt;br&gt;
Anthropic-compatible APIs natively, which is the reason this proxy existed. Call&lt;br&gt;
Amazon Bedrock directly instead of deploying this gateway.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is an honest retirement. The sample existed to translate, Bedrock learned to&lt;br&gt;
speak the protocol, and AWS retired the translator rather than leaving it to rot.&lt;br&gt;
More projects should end this way.&lt;/p&gt;

&lt;p&gt;One thing worth carrying, because it is what archiving actually costs you: the&lt;br&gt;
last change before the deprecation was a security fix. &lt;strong&gt;An archived repository&lt;br&gt;
does not get the next one.&lt;/strong&gt; If you are running&lt;br&gt;
the sample in production, that is the clock you are now on, and it is the only&lt;br&gt;
genuinely urgent part of this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The migration note answers one side of the question
&lt;/h2&gt;

&lt;p&gt;The README's instruction is "Point your SDK at the &lt;code&gt;bedrock-mantle&lt;/code&gt; endpoint".&lt;/p&gt;

&lt;p&gt;AWS's own endpoint documentation says something different:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For most new applications, use the &lt;code&gt;bedrock-runtime&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Both are AWS, and the README is the newer document: AWS moved its endpoint&lt;br&gt;
guidance to &lt;code&gt;bedrock-runtime&lt;/code&gt; in mid-August 2026, and the migration note was&lt;br&gt;
written on 4 September. The README also links the comparison page, one line after&lt;br&gt;
telling you which endpoint to pick.&lt;/p&gt;

&lt;p&gt;So this is not AWS contradicting itself so much as a one-line answer to a question&lt;br&gt;
that has two sides. Both endpoints serve the OpenAI-compatible Chat Completions&lt;br&gt;
and Responses APIs and the Anthropic Messages API, and AWS says the two run the same&lt;br&gt;
inference underneath. So the protocol is not what separates them. For someone moving&lt;br&gt;
off the sample, two things do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regions.&lt;/strong&gt; &lt;code&gt;bedrock-runtime&lt;/code&gt; is available in every one of the 34 AWS regions&lt;br&gt;
where Bedrock is offered. &lt;code&gt;bedrock-mantle&lt;/code&gt; is in 14 of them. The OpenAI-compatible&lt;br&gt;
routes are on both, so following the README literally costs you twenty regions and&lt;br&gt;
buys nothing on the routes you were already using.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Models.&lt;/strong&gt; Ten are reachable only on &lt;code&gt;bedrock-mantle&lt;/code&gt;, GPT-5.4 and GPT-5.5 among&lt;br&gt;
them. If one of those is your model, the README is right and the general advice is&lt;br&gt;
wrong for you. AWS lists which endpoint serves each model, and that page is worth&lt;br&gt;
one look before you choose.&lt;/p&gt;

&lt;p&gt;Everything else in the endpoint comparison is narrow, and AWS's own recommendation&lt;br&gt;
says as much: &lt;em&gt;"Use &lt;code&gt;bedrock-mantle&lt;/code&gt; when you specifically need capabilities that&lt;br&gt;
are currently available only there."&lt;/em&gt; If none of those is what you are reaching&lt;br&gt;
for, you are not choosing between the two on features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One thing not to infer.&lt;/strong&gt; Choosing &lt;code&gt;bedrock-runtime&lt;/code&gt; does not mean giving up&lt;br&gt;
the OpenAI API and rewriting against AWS's own SDK. The OpenAI-compatible routes&lt;br&gt;
are on it too, under &lt;code&gt;/openai/v1&lt;/code&gt;, and that is the point of using it.&lt;/p&gt;

&lt;p&gt;And on those routes a cross-region inference profile is not something you opt&lt;br&gt;
into, it is something AWS requires. From the same page: &lt;strong&gt;"Name a cross-Region&lt;br&gt;
inference profile as the model, not a foundation model ID. The OpenAI GPT models&lt;br&gt;
use the &lt;code&gt;us.&lt;/code&gt; and &lt;code&gt;global.&lt;/code&gt; profiles in the commercial Regions ... In-Region&lt;br&gt;
inference isn't available for these models on this endpoint."&lt;/strong&gt; So the model&lt;br&gt;
string your application sends becomes &lt;code&gt;us.openai.gpt-5.6-sol&lt;/code&gt; rather than the bare&lt;br&gt;
ID, which is a change wherever your model names live.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Bedrock speaks OpenAI now" is three APIs, and your model picks one
&lt;/h2&gt;

&lt;p&gt;This is the part that decides whether the migration is a config change or a&lt;br&gt;
project. The deprecation note does give you the split: Claude to the Anthropic&lt;br&gt;
Messages API, GPT and other models to Chat Completions and Responses, SDKs&lt;br&gt;
unchanged. What it does not give you is the coverage, and for a Chat Completions&lt;br&gt;
client the second half of that split is not reliably true.&lt;/p&gt;

&lt;p&gt;AWS publishes a per-model API-compatibility table. It has 122 rows, but a quarter&lt;br&gt;
of them are image, embedding, video and reranking models, which were never&lt;br&gt;
candidates for a chat API and should not pad a denominator. &lt;strong&gt;Ninety-six of the&lt;br&gt;
122 return text. Of those 96, 55 are reachable on any of the OpenAI- or&lt;br&gt;
Anthropic-shaped APIs&lt;/strong&gt;, so a little over half. The rest are there, but only&lt;br&gt;
through AWS's own SDK.&lt;/p&gt;

&lt;p&gt;Then the part that actually bites. Of those 55:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the model speaks&lt;/th&gt;
&lt;th&gt;Models&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat Completions only&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messages only&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chat Completions and Responses&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses only&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All three&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Forty-seven of the fifty-five speak exactly one of the three, and not one model&lt;br&gt;
speaks all three.&lt;/strong&gt; Which one you get is a property of the model, not a choice you&lt;br&gt;
make.&lt;/p&gt;

&lt;p&gt;That has consequences you can check in a minute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude is not on the OpenAI Chat Completions API at all.&lt;/strong&gt; The nine Claude
models that reach any of the three APIs are Anthropic Messages only, and no
Claude model reaches Chat Completions. &lt;strong&gt;For most teams coming off the sample
this is the single biggest loss:&lt;/strong&gt; OpenAI-shaped code reached Claude through the
proxy, and natively it does not reach it at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four models speak Responses and not Chat Completions&lt;/strong&gt;, GPT-5.4 and GPT-5.5
among them. Eight speak both. So even inside the OpenAI family, which API you
get depends on which model you picked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most open-weight models are Chat Completions-only.&lt;/strong&gt; Qwen, Mistral, Gemma,
DeepSeek and the rest.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So "call Bedrock directly" is not one API with a model parameter. It is three&lt;br&gt;
APIs, and switching model can mean switching protocol. That is the thing Bedrock&lt;br&gt;
Access Gateway was quietly doing for people: presenting one dialect over a&lt;br&gt;
catalogue that does not have one.&lt;/p&gt;

&lt;p&gt;Three caveats on the counting, and the first two are AWS's. It publishes no&lt;br&gt;
headline figure, so these are row counts. Its two tables disagree about the&lt;br&gt;
catalogue size, 122 against 127. And the 96 is this page's own filter, not AWS's:&lt;br&gt;
the table mixes modalities and the split above only makes sense for models that&lt;br&gt;
answer in text. Check the model you actually care about rather than trusting any&lt;br&gt;
single "X of Y", this page's included.&lt;/p&gt;

&lt;p&gt;The other gap is embeddings, and it is the one the migration note is quietest&lt;br&gt;
about. AWS does document a &lt;code&gt;POST /v1/embeddings&lt;/code&gt; route, on &lt;code&gt;bedrock-mantle&lt;/code&gt; only,&lt;br&gt;
and &lt;strong&gt;no embedding model is available on that endpoint&lt;/strong&gt;. So the route exists&lt;br&gt;
where the models are not, and the models exist where the route is not. On the&lt;br&gt;
image, audio, video and moderation side, AWS's endpoint comparison simply lists no&lt;br&gt;
such API at all: InvokeModel, Converse, Chat Completions, Responses, Messages, and&lt;br&gt;
nothing else. It does not say those are unsupported; it documents no OpenAI-shaped&lt;br&gt;
route for them.&lt;/p&gt;

&lt;p&gt;That matters for exactly one group of people, and it is a large one.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you are running the sample today
&lt;/h2&gt;

&lt;p&gt;Bedrock Access Gateway covered chat completions &lt;strong&gt;and embeddings&lt;/strong&gt;, the latter on&lt;br&gt;
its own &lt;code&gt;/v1/embeddings&lt;/code&gt; route. Its source lists five embedding models it served:&lt;br&gt;
Cohere Embed English and Embed Multilingual, Titan Embeddings G1 Text, Titan Text&lt;br&gt;
Embeddings V2, and Nova Multimodal Embeddings. &lt;strong&gt;The native OpenAI surface reaches&lt;br&gt;
none of them.&lt;/strong&gt; So a deployment calling &lt;code&gt;/v1/embeddings&lt;/code&gt; against the sample has no&lt;br&gt;
documented like-for-like target, and the migration note does not mention it.&lt;/p&gt;

&lt;p&gt;Nothing breaks today. Archived code keeps running, and the sample will keep&lt;br&gt;
proxying until something underneath it changes. What you have lost is future&lt;br&gt;
security fixes, and what you should do about it depends on what you actually call:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chat only, one region, and you are on a model in the compatibility table.&lt;/strong&gt;
Point at the native endpoint and delete the stack. This is the case AWS's note
was written for and it is genuinely a drop-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat plus embeddings.&lt;/strong&gt; The embeddings call has to go somewhere else, either
to Bedrock's native API directly or to something that fronts both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anything beyond text.&lt;/strong&gt; Images, transcription, speech, video, moderation. None
of it was in the sample either, so you were already solving it elsewhere, and
that part of your architecture does not change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is left, if native is not enough
&lt;/h2&gt;

&lt;p&gt;Three options, and they are genuinely different trades rather than variations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bedrock's own endpoints.&lt;/strong&gt; No infrastructure, no patching, your existing AWS&lt;br&gt;
support contract. Constrained to the models and APIs in the compatibility tables,&lt;br&gt;
and to &lt;code&gt;bedrock-runtime&lt;/code&gt; if you want all 34 regions, or Guardrails on Chat&lt;br&gt;
Completions, since AWS says they do not apply to Responses on either endpoint. For&lt;br&gt;
chat-shaped workloads on mainstream models this is now the obvious default, and it&lt;br&gt;
is the right answer more often than it was a week ago.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LiteLLM.&lt;/strong&gt; The multi-cloud answer, and the cleanest fork in the decision: if the&lt;br&gt;
requirement is not AWS-only, an AWS-deep tool will be worse at it on purpose. It&lt;br&gt;
reaches far more of the catalogue than the native surface does, adds request-time&lt;br&gt;
spend limits, and costs you a service to run and more configuration than the&lt;br&gt;
alternatives to reach the same place. A &lt;code&gt;bedrock/*&lt;/code&gt; wildcard gets you the&lt;br&gt;
catalogue, but spreading across regions means declaring each deployment per&lt;br&gt;
region, with TPM and RPM on each entry if you want usage-based routing rather than&lt;br&gt;
the default shuffle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A dedicated AWS-native gateway.&lt;/strong&gt; &lt;a href="https://stdapi.ai/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=59-bag-retired" rel="noopener noreferrer"&gt;stdapi.ai&lt;/a&gt; publishes this&lt;br&gt;
blog, so read this paragraph as disclosed rather than neutral. It runs in your own&lt;br&gt;
AWS account and fronts Bedrock's catalogue, plus your own SageMaker AI endpoints,&lt;br&gt;
on the OpenAI and Anthropic APIs. It is infrastructure you run, which is the cost. The four-way capability comparison, with&lt;br&gt;
per-row sources and verification dates, is at&lt;br&gt;
&lt;a href="https://stdapi.ai/compare/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=59-bag-retired" rel="noopener noreferrer"&gt;stdapi.ai/compare&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three questions that decide it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Is it chat, on a model in the compatibility table that speaks your&lt;br&gt;
application's dialect, in a region &lt;code&gt;bedrock-runtime&lt;/code&gt; serves?&lt;/strong&gt; If yes, use the&lt;br&gt;
native endpoint and own nothing. AWS is right to push this, and the dialect clause&lt;br&gt;
is the one people discover late: your Chat Completions code does not reach Claude&lt;br&gt;
natively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Is it only AWS?&lt;/strong&gt; If no, LiteLLM, and stop reading comparisons that assume&lt;br&gt;
otherwise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Does it need what the native surface does not serve?&lt;/strong&gt; Embeddings on the&lt;br&gt;
OpenAI API, where the route exists but no model does; images, transcription,&lt;br&gt;
speech, video and moderation, which have no documented OpenAI-shaped route; or the&lt;br&gt;
whole catalogue rather than a subset of it. If yes, something has to front Bedrock, and&lt;br&gt;
the only question left is whether you build it or run someone else's.&lt;/p&gt;

&lt;h2&gt;
  
  
  A table, since you were going to ask
&lt;/h2&gt;

&lt;p&gt;The AWS columns were counted from AWS's own tables on 9 September 2026. The&lt;br&gt;
LiteLLM and Access Gateway cells come from &lt;code&gt;stdapi.ai/compare/&lt;/code&gt;, whose rows carry&lt;br&gt;
their own verification dates, the most recent 9 September 2026. The stdapi.ai&lt;br&gt;
column is this site's own product and carries no independent verification, so&lt;br&gt;
weigh it accordingly. Check before committing; all of it moves.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Access Gateway&lt;/th&gt;
&lt;th&gt;LiteLLM&lt;/th&gt;
&lt;th&gt;Bedrock's own endpoints&lt;/th&gt;
&lt;th&gt;stdapi.ai&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Status&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;deprecated, archived 2026-09-04&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;active&lt;/td&gt;
&lt;td&gt;active&lt;/td&gt;
&lt;td&gt;active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chat completions&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;42 of the 96 text models (the 34 Chat-only plus the 8 that also speak Responses)&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One dialect over the catalogue&lt;/td&gt;
&lt;td&gt;chat and embeddings only&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;no, 3 APIs and the model picks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeddings&lt;/td&gt;
&lt;td&gt;yes, 5 models&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;route documented on &lt;code&gt;bedrock-mantle&lt;/code&gt;, no embedding model available there&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Images, audio, video, moderation&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;not documented&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guardrails&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;bedrock-runtime&lt;/code&gt; only, and not on Responses&lt;/td&gt;
&lt;td&gt;yes, on the classic endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-region inference&lt;/td&gt;
&lt;td&gt;manual, no auto-selection&lt;/td&gt;
&lt;td&gt;manual per model&lt;/td&gt;
&lt;td&gt;required on the OpenAI routes for GPT models&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regions&lt;/td&gt;
&lt;td&gt;single, per deployment&lt;/td&gt;
&lt;td&gt;yours&lt;/td&gt;
&lt;td&gt;all 34 on &lt;code&gt;bedrock-runtime&lt;/code&gt;, 14 on &lt;code&gt;bedrock-mantle&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;yours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-cloud&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure to run&lt;/td&gt;
&lt;td&gt;yours&lt;/td&gt;
&lt;td&gt;yours&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;yours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security fixes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;none, archived&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;open source, paid Enterprise tier&lt;/td&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;td&gt;open source, commercial support&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where to start
&lt;/h2&gt;

&lt;p&gt;Try the native endpoint first, and try it today rather than planning to. For a&lt;br&gt;
chat workload it is two strings of configuration, and if it fits you are done, you&lt;br&gt;
own nothing, and you can stop reading about gateways.&lt;/p&gt;

&lt;p&gt;Read the endpoint comparison page before you follow the README, because the README&lt;br&gt;
answers one side of the question, and the difference is twenty regions in one&lt;br&gt;
direction and ten models in the other.&lt;/p&gt;

&lt;p&gt;If you are running the sample in production, the deadline is not functional, it is&lt;br&gt;
the security fix that will not arrive. Nothing is on fire, but do not let it sit&lt;br&gt;
for a year.&lt;/p&gt;

&lt;p&gt;And if the native surface does not cover what you call, that is a genuinely&lt;br&gt;
narrower surface rather than a failure of your architecture. It is documented as&lt;br&gt;
such, and you now know exactly which of your calls fall outside it.&lt;/p&gt;

&lt;p&gt;Which way are you going, and did the embeddings gap catch you too?&lt;/p&gt;

</description>
      <category>api</category>
      <category>aws</category>
      <category>cloud</category>
      <category>llm</category>
    </item>
    <item>
      <title>Deploy Your Own Private ChatGPT on AWS in 30 Minutes</title>
      <dc:creator>J.Goutin</dc:creator>
      <pubDate>Thu, 19 Feb 2026 21:15:15 +0000</pubDate>
      <link>https://dev.to/jgoutin/deploy-your-own-private-chatgpt-on-aws-in-30-minutes-14n1</link>
      <guid>https://dev.to/jgoutin/deploy-your-own-private-chatgpt-on-aws-in-30-minutes-14n1</guid>
      <description>&lt;p&gt;What if you could deploy a &lt;strong&gt;fully private ChatGPT alternative&lt;/strong&gt; — on your own AWS infrastructure, with your own data sovereignty rules — in 30 minutes?&lt;/p&gt;

&lt;p&gt;No data leaving your account. No vendor lock-in. No per-user subscriptions. Just 3 Terraform commands.&lt;/p&gt;

&lt;p&gt;Here's how.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/open-webui/open-webui" rel="noopener noreferrer"&gt;&lt;strong&gt;Open WebUI&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ChatGPT-like interface (100,000+ ⭐ on GitHub)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://stdapi.ai?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=private-chatgpt%20%E2%94%82" rel="noopener noreferrer"&gt;&lt;strong&gt;stdapi.ai&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-compatible API gateway for AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Bedrock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Access to 80+ foundation models&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;stdapi.ai&lt;/strong&gt; sits between Open WebUI and AWS Bedrock, translating OpenAI API calls into native AWS requests. Any tool that speaks the OpenAI protocol — Open WebUI, n8n, VS Code AI assistants, custom apps — works immediately. No plugins, no custom integrations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → Open WebUI → stdapi.ai → AWS Bedrock → Claude Opus 4.6, DeepSeek, Kimi, Mistral…
                                             → AWS Polly (text-to-speech)
                                             → AWS Transcribe (speech-to-text)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What You Get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;80+ AI models&lt;/strong&gt; — Claude Opus 4.6, DeepSeek, Kimi, Mistral, Cohere, Stability AI, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full multi-modal support&lt;/strong&gt; — Chat, voice input/output, image generation/editing, document RAG&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-region access&lt;/strong&gt; — Configure multiple AWS regions for the widest model selection and availability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay-per-use&lt;/strong&gt; — No ChatGPT subscriptions, no per-seat fees. You pay only for actual AWS Bedrock usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-ready infrastructure&lt;/strong&gt; — ECS Fargate with auto-scaling, Aurora PostgreSQL + pgvector for RAG, ElastiCache Valkey, dedicated VPC, HTTPS with ALB&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Sovereignty &amp;amp; Compliance
&lt;/h2&gt;

&lt;p&gt;This is where it gets interesting for regulated industries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Region restrictions&lt;/strong&gt; — Lock inference to specific AWS regions matching your compliance requirements (GDPR, HIPAA, data residency laws, industry regulations)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No data shared with model providers&lt;/strong&gt; — AWS Bedrock does not share your inference data with model providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No training on your data&lt;/strong&gt; — Your prompts and responses are never used for model training&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything stays in your AWS account&lt;/strong&gt; — No external data transmission beyond AWS services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated VPC&lt;/strong&gt; — Isolated network for your AI workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you need to keep data in the EU, in specific US regions, or within national boundaries for government requirements — you configure the allowed regions and stdapi.ai enforces it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy in 30 Minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/stdapi-ai/samples.git
&lt;span class="nb"&gt;cd &lt;/span&gt;samples/getting_started_openwebui/terraform

&lt;span class="c"&gt;# ⚙️ Customize your settings (regions, models, scaling…)&lt;/span&gt;
&lt;span class="c"&gt;# → Check the full documentation in the repo to tailor the deployment to your needs&lt;/span&gt;

terraform init &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. 3 commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Terraform deploys for you:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open WebUI on &lt;strong&gt;ECS Fargate&lt;/strong&gt; with auto-scaling&lt;/li&gt;
&lt;li&gt;stdapi.ai as the &lt;strong&gt;OpenAI-compatible AI gateway&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aurora PostgreSQL&lt;/strong&gt; with pgvector extension for RAG&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElastiCache Valkey&lt;/strong&gt; for caching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated, isolated VPC&lt;/strong&gt; with HTTPS via ALB&lt;/li&gt;
&lt;li&gt;All environment variables pre-configured and ready to go&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How stdapi.ai Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;stdapi.ai is more than a simple proxy. It's an AI gateway purpose-built for AWS that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Translates the OpenAI API&lt;/strong&gt; — Chat completions, embeddings, images (generation/editing/variations), audio (speech/transcription/translation), and model listing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles multi-region routing&lt;/strong&gt; — Automatically selects the best region and inference profile for each model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exposes advanced Bedrock features&lt;/strong&gt; — Prompt caching, reasoning modes (extended thinking), guardrails, service tiers, and model-specific parameters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrates native AWS AI services&lt;/strong&gt; — Amazon Polly for TTS, Amazon Transcribe for STT with speaker diarization, Amazon Translate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your existing OpenAI-powered tools work without modification. Change the base URL, and you're on AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teams&lt;/strong&gt; that want a private ChatGPT with full data control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulated industries&lt;/strong&gt; (finance, healthcare, government) that need data residency guarantees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Companies&lt;/strong&gt; tired of paying per-seat ChatGPT subscriptions when usage varies wildly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt; who want to use the OpenAI ecosystem on AWS infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ops engineers&lt;/strong&gt; who want production-grade AI infrastructure as code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;📦 &lt;strong&gt;Deployment repo:&lt;/strong&gt; &lt;a href="https://github.com/stdapi-ai/samples/tree/main/getting_started_openwebui?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=private-chatgpt" rel="noopener noreferrer"&gt;github.com/stdapi-ai/samples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📖 &lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://stdapi.ai?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=private-chatgpt" rel="noopener noreferrer"&gt;stdapi.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📩 &lt;strong&gt;Need help?&lt;/strong&gt; We can help you deploy and customize this solution for your needs. Reach out to us.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;3 commands. 30 minutes. Your private ChatGPT is in production.&lt;/em&gt; 🎯&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ai</category>
      <category>openai</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Use AWS Bedrock &amp; AI Services (Claude, Nova, Polly, Transcribe) with Your Existing OpenAI Code</title>
      <dc:creator>J.Goutin</dc:creator>
      <pubDate>Fri, 19 Dec 2025 14:32:38 +0000</pubDate>
      <link>https://dev.to/jgoutin/use-aws-bedrock-ai-services-claude-nova-polly-transcribe-with-your-existing-openai-code-4bgl</link>
      <guid>https://dev.to/jgoutin/use-aws-bedrock-ai-services-claude-nova-polly-transcribe-with-your-existing-openai-code-4bgl</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Use your existing OpenAI-compatible tools (OpenWebUI, n8n, Cline, Cursor) with AWS Bedrock's 80+ models and AWS AI services (Polly, Transcribe). Just change the endpoint - no code changes needed. Deploy to your AWS account in 15 minutes with Terraform. Data stays in your AWS environment for HIPAA/GDPR compliance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution in 30 Seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="c1"&gt;# Just change this line ↓
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://your-aws-api/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Everything else stays the same ↓
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic.claude-sonnet-4-5-20250929-v1:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Claude 4.5 on Bedrock
&lt;/span&gt;    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello from AWS!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this enables:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use OpenWebUI, n8n, Cline, Cursor with AWS Bedrock and AWS AI services&lt;/li&gt;
&lt;li&gt;Access Claude 4.5, Nova, Qwen, DeepSeek, Mistral, Cohere, and 75+ more models&lt;/li&gt;
&lt;li&gt;Text-to-speech (Polly), speech-to-text (Transcribe), image generation, embeddings&lt;/li&gt;
&lt;li&gt;Keep all data in your AWS account (HIPAA, GDPR, FedRAMP ready)&lt;/li&gt;
&lt;li&gt;Multi-region model access from a single endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Problem We Solved
&lt;/h2&gt;

&lt;p&gt;Most modern AI tools are built for OpenAI's API, but AWS Bedrock uses a completely different SDK. This forces you to choose between using familiar tools or switching to AWS for compliance/cost reasons and rewriting everything.&lt;/p&gt;

&lt;p&gt;We ran into this while working with a customer who needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compliance&lt;/strong&gt;: All data in their AWS account (GDPR requirements)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choice&lt;/strong&gt;: Multiple models (Claude, Nova, Qwen, Mistral, DeepSeek, Stability AI, Cohere)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-region access&lt;/strong&gt;: Different Bedrock models available in different AWS regions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard tooling&lt;/strong&gt;: OpenWebUI, n8n, IDE coding agents (Cline, Cursor)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full AWS AI stack&lt;/strong&gt;: Bedrock models plus Polly (TTS) and Transcribe (STT)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Our Approach: An OpenAI-Compatible Translation Layer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;stdapi.ai&lt;/strong&gt; is an API gateway that sits in your AWS account and translates OpenAI API calls to AWS services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;OpenAI API Compatibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your existing code works without modifications:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://your-deployment.example.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Chat completions
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amazon.nova-pro-v1:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explain AWS Lambda&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Text-to-speech with Polly
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;speech&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amazon.polly-neural&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Welcome to the future of voice technology!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Speech-to-text with Transcribe
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;meeting-recording.mp3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;audio_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;transcription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transcriptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amazon.transcribe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;audio_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;response_format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Image generation with Bedrock
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stability.stable-image-ultra-v1:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A serene mountain landscape at sunset&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Embeddings with Bedrock
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cohere.embed-v4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Semantic search transforms how we find information&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Multi-Region Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Access models across multiple AWS Bedrock regions from a single endpoint. Different models are available in different regions. You can configure which regions to include based on your requirements. AWS Bedrock inference profiles handle automatic routing when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Modal Capabilities&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Process text, images, videos, and documents together in a single request. Supports HTTP URLs, S3 URLs (for direct access to your data), and base64 data URIs. Perfect for vision tasks, document analysis, and RAG applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Deploy to your AWS account in 5-15 minutes using Terraform.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sample configurations set up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application Load Balancer with ECS/Fargate&lt;/li&gt;
&lt;li&gt;IAM roles with least-privilege access&lt;/li&gt;
&lt;li&gt;CloudWatch logging&lt;/li&gt;
&lt;li&gt;S3 storage&lt;/li&gt;
&lt;li&gt;Optional: Custom domain with ACM certificate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Get started:&lt;/strong&gt; &lt;a href="https://github.com/stdapi-ai/samples?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Sample Terraform configurations&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chat interfaces&lt;/strong&gt;: OpenWebUI or LibreChat for private ChatGPT alternatives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow automation&lt;/strong&gt;: n8n connecting AI to 400+ services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer tools&lt;/strong&gt;: IDE coding agents (Cline, Cursor, Continue)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge management&lt;/strong&gt;: AI-powered note-taking and semantic search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal AI tools&lt;/strong&gt;: Custom chatbots for Slack, Discord, Teams&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Details
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How It Works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Converts OpenAI API format to Bedrock's format&lt;/li&gt;
&lt;li&gt;Maps model IDs to appropriate AWS services and regions&lt;/li&gt;
&lt;li&gt;Provides unified access to models across configured AWS regions&lt;/li&gt;
&lt;li&gt;Converts Bedrock responses back to OpenAI format&lt;/li&gt;
&lt;li&gt;Supports streaming via Server-Sent Events (SSE)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All traffic stays within your AWS account&lt;/li&gt;
&lt;li&gt;IAM role-based access control&lt;/li&gt;
&lt;li&gt;Optional API key authentication&lt;/li&gt;
&lt;li&gt;VPC deployment supported&lt;/li&gt;
&lt;li&gt;Integrates with AWS Bedrock guardrails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low latency translation layer&lt;/li&gt;
&lt;li&gt;Streaming response support&lt;/li&gt;
&lt;li&gt;Scales with ECS/Fargate auto-scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open Source &amp;amp; Commercial Options
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;stdapi.ai&lt;/strong&gt; is available as open source (AGPL-3.0) for experimentation and internal use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For production deployments, we recommend the AWS Marketplace version&lt;/strong&gt;, which includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardened container images&lt;/li&gt;
&lt;li&gt;Regular security updates&lt;/li&gt;
&lt;li&gt;Production support&lt;/li&gt;
&lt;li&gt;14-day free trial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The commercial license also removes AGPL obligations for proprietary applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🏢 Recommended:&lt;/strong&gt; &lt;a href="https://stdapi.ai/operations_getting_started/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;AWS Marketplace&lt;/a&gt; (14-day free trial, production-ready)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 Open source:&lt;/strong&gt; &lt;a href="https://stdapi.ai/operations_getting_started_local/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; (AGPL-3.0 for experimentation)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📦 Sample deployments:&lt;/strong&gt; &lt;a href="https://github.com/stdapi-ai/samples?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Terraform configurations&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📚 Documentation:&lt;/strong&gt; &lt;a href="https://stdapi.ai?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Full guides and API reference&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This translation layer approach solves the AWS Bedrock compatibility gap while keeping everything AWS-native.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero code changes&lt;/strong&gt;: Your OpenAI SDK code works as-is&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS-native&lt;/strong&gt;: Fully integrated with Bedrock, Polly, Transcribe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-region&lt;/strong&gt;: Access models across AWS regions from one endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-ready&lt;/strong&gt;: Terraform deployment, CloudWatch integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'd love to hear your feedback! Have you solved this problem differently? What challenges have you faced integrating Bedrock into your workflow?&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;We're planning detailed tutorials on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deploying OpenWebUI on AWS&lt;/strong&gt;: Private ChatGPT alternative with Bedrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building n8n workflows&lt;/strong&gt;: AWS AI services in automation pipelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDE coding agents setup&lt;/strong&gt;: Configuring Cline and Cursor with Bedrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAG applications&lt;/strong&gt;: Document search with Bedrock embeddings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Want a specific tutorial?&lt;/strong&gt; Drop a comment or open an issue on GitHub!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ai</category>
      <category>openai</category>
      <category>aiops</category>
    </item>
  </channel>
</rss>
