feat: add OCID resolution for all GenAI models (fixes 404 on OpenAI)

Models like OpenAI GPT-5.2 require the full OCID rather than the short
model_id. The catalog now maps model IDs to OCIDs per region (us-ashburn-1).
_call_genai and _embed_text resolve the OCID for the configured region
at runtime, falling back to short model_id for unmapped regions.

New models added from OCI portal: GPT-5.3/5.2/5.1/5 Codex, GPT Image
1/1.5, Llama Guard 4, ProtectAI DeBERTa, OpenAI Text Embedding 3
Large/Small. Total: 69 chat + 11 embedding models.
This commit is contained in:
nogueiraguh
2026-03-03 19:50:55 -03:00
parent 408ca45ee3
commit dcd2685671
2 changed files with 198 additions and 91 deletions

View File

@@ -32,7 +32,8 @@ The platform combines security compliance scanning, AI-powered chat with **RAG (
### 🤖 AI Chat Agent with RAG ### 🤖 AI Chat Agent with RAG
- **OCI Generative AI** integration via official SDK (`oci.generative_ai_inference`) - **OCI Generative AI** integration via official SDK (`oci.generative_ai_inference`)
- **RAG (Retrieval-Augmented Generation)**: automatically queries ADB vector store for relevant context before generating responses - **RAG (Retrieval-Augmented Generation)**: automatically queries ADB vector store for relevant context before generating responses
- 63 models across 5 providers: **Cohere** (Command A/R/R+), **Meta** (Llama 4/3.3/3.2/3.1), **Google** (Gemini 2.5 Pro/Flash/Flash-Lite), **OpenAI** (GPT-5.2/5.1/5/4.1/4o, o1/o3/o4-mini, GPT Audio, GPT-oss), **xAI** (Grok 4.1/4/3 + reasoning/fast variants) - 69 chat models + 11 embedding models across 6 providers: **Cohere**, **Meta**, **Google**, **OpenAI** (GPT-5.3/5.2/5.1/5/4.1/4o, Codex, Image, Audio, o1/o3/o4-mini, GPT-oss), **xAI** (Grok 4.1/4/3), **ProtectAI**
- OCID-based model resolution: catalog maps model IDs to OCI resource IDs per region for reliable API calls
- 16 OCI regions supported with auto-generated endpoints - 16 OCI regions supported with auto-generated endpoints
- Full parameter control: temperature, max_tokens, top_p, top_k, frequency/presence penalty - Full parameter control: temperature, max_tokens, top_p, top_k, frequency/presence penalty
- Conversation history with session management - Conversation history with session management
@@ -399,7 +400,9 @@ oci-cis-agent/
--- ---
## Supported GenAI Models (63 Chat + 9 Embedding) ## Supported GenAI Models (69 Chat + 11 Embedding)
All models include OCID mapping for `us-ashburn-1`. For other regions, use the "Personalizado (usar OCID)" option.
### Chat Models ### Chat Models
@@ -412,21 +415,24 @@ oci-cis-agent/
| Cohere | Command R (08-2024) | `cohere.command-r-08-2024` | COHERE | | Cohere | Command R (08-2024) | `cohere.command-r-08-2024` | COHERE |
| Meta | Llama 4 Maverick | `meta.llama-4-maverick-17b-128e-instruct-fp8` | GENERIC | | Meta | Llama 4 Maverick | `meta.llama-4-maverick-17b-128e-instruct-fp8` | GENERIC |
| Meta | Llama 4 Scout | `meta.llama-4-scout-17b-16e-instruct` | GENERIC | | Meta | Llama 4 Scout | `meta.llama-4-scout-17b-16e-instruct` | GENERIC |
| Meta | Llama 3.3 (70B) | `meta.llama-3.3-70b-instruct` | GENERIC | | Meta | Llama Guard 4 (12B) | `meta.llama-guard-4-12b` | GENERIC |
| Meta | Llama 3.2 90B Vision | `meta.llama-3.2-90b-vision-instruct` | GENERIC |
| Meta | Llama 3.2 11B Vision | `meta.llama-3.2-11b-vision-instruct` | GENERIC |
| Meta | Llama 3.1 (405B) | `meta.llama-3.1-405b-instruct` | GENERIC |
| Google | Gemini 2.5 Pro | `google.gemini-2.5-pro` | GENERIC | | Google | Gemini 2.5 Pro | `google.gemini-2.5-pro` | GENERIC |
| Google | Gemini 2.5 Flash | `google.gemini-2.5-flash` | GENERIC | | Google | Gemini 2.5 Flash | `google.gemini-2.5-flash` | GENERIC |
| Google | Gemini 2.5 Flash-Lite | `google.gemini-2.5-flash-lite` | GENERIC | | Google | Gemini 2.5 Flash-Lite | `google.gemini-2.5-flash-lite` | GENERIC |
| OpenAI | GPT-5.3 Codex | `openai.gpt-5.3-codex` | GENERIC |
| OpenAI | GPT-5.2 Codex | `openai.gpt-5.2-codex` | GENERIC |
| OpenAI | GPT-5.2 Pro | `openai.gpt-5.2-pro` | GENERIC | | OpenAI | GPT-5.2 Pro | `openai.gpt-5.2-pro` | GENERIC |
| OpenAI | GPT-5.2 Pro (2025-12-11) | `openai.gpt-5.2-pro-2025-12-11` | GENERIC |
| OpenAI | GPT-5.2 | `openai.gpt-5.2` | GENERIC | | OpenAI | GPT-5.2 | `openai.gpt-5.2` | GENERIC |
| OpenAI | GPT-5.2 (2025-12-11) | `openai.gpt-5.2-2025-12-11` | GENERIC | | OpenAI | GPT-5.2 (2025-12-11) | `openai.gpt-5.2-2025-12-11` | GENERIC |
| OpenAI | GPT-5.2 Chat Latest | `openai.gpt-5.2-chat-latest` | GENERIC | | OpenAI | GPT-5.2 Chat Latest | `openai.gpt-5.2-chat-latest` | GENERIC |
| OpenAI | GPT-5.2 Pro (2025-12-11) | `openai.gpt-5.2-pro-2025-12-11` | GENERIC | | OpenAI | GPT-5.1 Codex Max | `openai.gpt-5.1-codex-max` | GENERIC |
| OpenAI | GPT-5.1 Codex | `openai.gpt-5.1-codex` | GENERIC |
| OpenAI | GPT-5.1 Codex Mini | `openai.gpt-5.1-codex-mini` | GENERIC |
| OpenAI | GPT-5.1 | `openai.gpt-5.1` | GENERIC | | OpenAI | GPT-5.1 | `openai.gpt-5.1` | GENERIC |
| OpenAI | GPT-5.1 (2025-11-13) | `openai.gpt-5.1-2025-11-13` | GENERIC | | OpenAI | GPT-5.1 (2025-11-13) | `openai.gpt-5.1-2025-11-13` | GENERIC |
| OpenAI | GPT-5.1 Chat Latest | `openai.gpt-5.1-chat-latest` | GENERIC | | OpenAI | GPT-5.1 Chat Latest | `openai.gpt-5.1-chat-latest` | GENERIC |
| OpenAI | GPT-5 Codex | `openai.gpt-5-codex` | GENERIC |
| OpenAI | GPT-5 | `openai.gpt-5` | GENERIC | | OpenAI | GPT-5 | `openai.gpt-5` | GENERIC |
| OpenAI | GPT-5 (2025-08-07) | `openai.gpt-5-2025-08-07` | GENERIC | | OpenAI | GPT-5 (2025-08-07) | `openai.gpt-5-2025-08-07` | GENERIC |
| OpenAI | GPT-5 Mini | `openai.gpt-5-mini` | GENERIC | | OpenAI | GPT-5 Mini | `openai.gpt-5-mini` | GENERIC |
@@ -447,6 +453,8 @@ oci-cis-agent/
| OpenAI | GPT-4o Mini Search (2025-03-11) | `openai.gpt-4o-mini-search-preview-2025-03-11` | GENERIC | | OpenAI | GPT-4o Mini Search (2025-03-11) | `openai.gpt-4o-mini-search-preview-2025-03-11` | GENERIC |
| OpenAI | GPT-4o Search Preview | `openai.gpt-4o-search-preview` | GENERIC | | OpenAI | GPT-4o Search Preview | `openai.gpt-4o-search-preview` | GENERIC |
| OpenAI | GPT-4o Search (2025-03-11) | `openai.gpt-4o-search-preview-2025-03-11` | GENERIC | | OpenAI | GPT-4o Search (2025-03-11) | `openai.gpt-4o-search-preview-2025-03-11` | GENERIC |
| OpenAI | GPT Image 1.5 | `openai.gpt-image-1.5` | GENERIC |
| OpenAI | GPT Image 1 | `openai.gpt-image-1` | GENERIC |
| OpenAI | GPT Audio | `openai.gpt-audio` | GENERIC | | OpenAI | GPT Audio | `openai.gpt-audio` | GENERIC |
| OpenAI | o4-mini | `openai.o4-mini` | GENERIC | | OpenAI | o4-mini | `openai.o4-mini` | GENERIC |
| OpenAI | o4-mini (2025-04-16) | `openai.o4-mini-2025-04-16` | GENERIC | | OpenAI | o4-mini (2025-04-16) | `openai.o4-mini-2025-04-16` | GENERIC |
@@ -468,22 +476,25 @@ oci-cis-agent/
| xAI | Grok 3 Fast | `xai.grok-3-fast` | GENERIC | | xAI | Grok 3 Fast | `xai.grok-3-fast` | GENERIC |
| xAI | Grok 3 Mini Fast | `xai.grok-3-mini-fast` | GENERIC | | xAI | Grok 3 Mini Fast | `xai.grok-3-mini-fast` | GENERIC |
| xAI | Grok Code Fast 1 | `xai.grok-code-fast-1` | GENERIC | | xAI | Grok Code Fast 1 | `xai.grok-code-fast-1` | GENERIC |
| ProtectAI | DeBERTa Prompt Injection v2 | `protectai.deberta-v3-base-prompt-injection-v2` | GENERIC |
> **Custom OCID**: You can also use any model available in your region by selecting "Personalizado (usar OCID)" and providing the full model OCID. > **Custom OCID**: You can also use any model available in your region by selecting "Personalizado (usar OCID)" and providing the full model OCID.
### Embedding Models ### Embedding Models
| Provider | Model | Dimensions | | Provider | Model | Model ID | Dimensions |
|----------|-------|------------| |----------|-------|----------|------------|
| Cohere | Embed v4.0 (Multimodal) | 1536 | | Cohere | Embed v4.0 (Multimodal) | `cohere.embed-v4.0` | 1536 |
| Cohere | Embed English v3.0 | 1024 | | OpenAI | Text Embedding 3 Large | `openai.text-embedding-3-large` | 3072 |
| Cohere | Embed Multilingual v3.0 | 1024 | | OpenAI | Text Embedding 3 Small | `openai.text-embedding-3-small` | 1536 |
| Cohere | Embed English Light v3.0 | 384 | | Cohere | Embed English v3.0 | `cohere.embed-english-v3.0` | 1024 |
| Cohere | Embed Multilingual Light v3.0 | 384 | | Cohere | Embed Multilingual v3.0 | `cohere.embed-multilingual-v3.0` | 1024 |
| Cohere | Embed English Image v3.0 | 1024 | | Cohere | Embed English Light v3.0 | `cohere.embed-english-light-v3.0` | 384 |
| Cohere | Embed Multilingual Image v3.0 | 1024 | | Cohere | Embed Multilingual Light v3.0 | `cohere.embed-multilingual-light-v3.0` | 384 |
| Cohere | Embed English Light Image v3.0 | 384 | | Cohere | Embed English Image v3.0 | `cohere.embed-english-image-v3.0` | 1024 |
| Cohere | Embed Multilingual Light Image v3.0 | 384 | | Cohere | Embed Multilingual Image v3.0 | `cohere.embed-multilingual-image-v3.0` | 1024 |
| Cohere | Embed English Light Image v3.0 | `cohere.embed-english-light-image-v3.0` | 384 |
| Cohere | Embed Multilingual Light Image v3.0 | `cohere.embed-multilingual-light-image-v3.0` | 384 |
### GenAI Regions ### GenAI Regions
@@ -511,7 +522,7 @@ oci-cis-agent/
| Version | Date | Changes | | Version | Date | Changes |
|---------|------|---------| |---------|------|---------|
| **v1.4** | 2026-03 | In-place config editing (OCI, GenAI, ADB, MCP), 63 chat models (OpenAI GPT-5.2/5.1/5/4.1/4o, o1/o3/o4-mini, xAI Grok 4.1/4/3, Google Gemini 2.5, Meta Llama 4, Cohere Command A), custom OCID model support, Cohere Embed v4.0 multimodal, wallet auto-parse with DSN extraction | | **v1.4** | 2026-03 | In-place config editing, 69 chat + 11 embedding models with OCID resolution (OpenAI GPT-5.3/5.2/5.1/5/4.1/4o/Codex/Image/Audio, xAI, Google, Meta, ProtectAI), OpenAI Text Embedding 3, custom OCID support, wallet auto-parse with DSN extraction |
| **v1.3** | 2026-03 | Persistent config logs per tab, GenAI auto-fill from OCI credentials, inline UX feedback with loading spinners, MCP type-switch fix, encrypted key passphrase support, Docker stdin hang fix | | **v1.3** | 2026-03 | Persistent config logs per tab, GenAI auto-fill from OCI credentials, inline UX feedback with loading spinners, MCP type-switch fix, encrypted key passphrase support, Docker stdin hang fix |
| **v1.2** | 2026-03 | RAG pipeline (OCI GenAI embeddings + ADB vector search), dedicated Embeddings tab, CIS report chunking, file upload embedding | | **v1.2** | 2026-03 | RAG pipeline (OCI GenAI embeddings + ADB vector search), dedicated Embeddings tab, CIS report chunking, file upload embedding |
| **v1.1** | 2025-02 | OCI SDK GenAI (exact pattern), OCI Account Explorer, MCP↔ADB linking, full chat parameters | | **v1.1** | 2025-02 | OCI SDK GenAI (exact pattern), OCI Account Explorer, MCP↔ADB linking, full chat parameters |

View File

@@ -45,87 +45,175 @@ app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True,
security = HTTPBearer() security = HTTPBearer()
# ── OCI GenAI Models Catalog ────────────────────────────────────────────────── # ── OCI GenAI Models Catalog ──────────────────────────────────────────────────
# OCIDs are region-specific; "ocids" maps genai_region → OCID.
# _call_genai resolves the OCID for the configured region at runtime.
GENAI_MODELS = { GENAI_MODELS = {
# ── Cohere ── # ── Cohere ──
"cohere.command-a-reasoning": {"provider":"cohere","name":"Cohere Command A Reasoning","api_format":"COHERE"}, "cohere.command-a-reasoning": {"provider":"cohere","name":"Cohere Command A Reasoning","api_format":"COHERE",
"cohere.command-a-vision": {"provider":"cohere","name":"Cohere Command A Vision","api_format":"COHERE"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaw5ch2lw2va4t2c2e6ha6kecinfceiqq37runhqchqrkq"}},
"cohere.command-a-03-2025": {"provider":"cohere","name":"Cohere Command A","api_format":"COHERE"}, "cohere.command-a-vision": {"provider":"cohere","name":"Cohere Command A Vision","api_format":"COHERE",
"cohere.command-r-plus-08-2024": {"provider":"cohere","name":"Cohere Command R+ (08-2024)","api_format":"COHERE"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyabvp5xteqir7mkcoivaxq6hohml4tqsrfg5bju2cbtrdq"}},
"cohere.command-r-08-2024": {"provider":"cohere","name":"Cohere Command R (08-2024)","api_format":"COHERE"}, "cohere.command-a-03-2025": {"provider":"cohere","name":"Cohere Command A","api_format":"COHERE",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyadgp4iov7qreizan5werpalu2ismyko4irc4bfya4nh6q"}},
"cohere.command-r-plus-08-2024": {"provider":"cohere","name":"Cohere Command R+ (08-2024)","api_format":"COHERE",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya7sjdzr3mm64jnkmnrgikwmkp3momtlknow4gwwe2whqa"}},
"cohere.command-r-08-2024": {"provider":"cohere","name":"Cohere Command R (08-2024)","api_format":"COHERE",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyag5f2c6l4kbzh5nixbv5fvfsmcfm4bdzon3z3sdh7ztsa"}},
# ── Meta ── # ── Meta ──
"meta.llama-4-maverick-17b-128e-instruct-fp8": {"provider":"meta","name":"Meta Llama 4 Maverick","api_format":"GENERIC"}, "meta.llama-4-maverick-17b-128e-instruct-fp8": {"provider":"meta","name":"Meta Llama 4 Maverick","api_format":"GENERIC",
"meta.llama-4-scout-17b-16e-instruct": {"provider":"meta","name":"Meta Llama 4 Scout","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyah6tjdejjashngznsylutuhhvufukzb2g2ls54g2flsfq"}},
"meta.llama-3.3-70b-instruct": {"provider":"meta","name":"Meta Llama 3.3 (70B)","api_format":"GENERIC"}, "meta.llama-4-scout-17b-16e-instruct": {"provider":"meta","name":"Meta Llama 4 Scout","api_format":"GENERIC",
"meta.llama-3.2-90b-vision-instruct": {"provider":"meta","name":"Meta Llama 3.2 90B Vision","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaw23hfc7mtvv5wef3gwvvaguyzqmhb5lx4r5s3y2xzc4a"}},
"meta.llama-3.2-11b-vision-instruct": {"provider":"meta","name":"Meta Llama 3.2 11B Vision","api_format":"GENERIC"}, "meta.llama-guard-4-12b": {"provider":"meta","name":"Meta Llama Guard 4 (12B)","api_format":"GENERIC",
"meta.llama-3.1-405b-instruct": {"provider":"meta","name":"Meta Llama 3.1 (405B)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyab5ggfxf4zs33lb5skxemyudnfxangjl4557toy3yapea"}},
# ── Google ── # ── Google ──
"google.gemini-2.5-pro": {"provider":"google","name":"Google Gemini 2.5 Pro","api_format":"GENERIC"}, "google.gemini-2.5-pro": {"provider":"google","name":"Google Gemini 2.5 Pro","api_format":"GENERIC",
"google.gemini-2.5-flash": {"provider":"google","name":"Google Gemini 2.5 Flash","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyargceyuaysrjzo2metq2rinavayxqmpu7tkm6mmfojcvq"}},
"google.gemini-2.5-flash-lite": {"provider":"google","name":"Google Gemini 2.5 Flash-Lite","api_format":"GENERIC"}, "google.gemini-2.5-flash": {"provider":"google","name":"Google Gemini 2.5 Flash","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaeo4ehrn25guuats5s45hnvswlhxo6riop275l2bkr2vq"}},
"google.gemini-2.5-flash-lite": {"provider":"google","name":"Google Gemini 2.5 Flash-Lite","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaqk3p6ljepyguyo4ff5dwjw3ecij3x4l2j32e3gz66wtq"}},
# ── OpenAI ── # ── OpenAI ──
"openai.gpt-5.2-pro": {"provider":"openai","name":"OpenAI GPT-5.2 Pro","api_format":"GENERIC"}, "openai.gpt-5.3-codex": {"provider":"openai","name":"OpenAI GPT-5.3 Codex","api_format":"GENERIC",
"openai.gpt-5.2": {"provider":"openai","name":"OpenAI GPT-5.2","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyayatqadc4zh74l6mh7sb3sb5olk7jnhq62bfnxgjwfb5a"}},
"openai.gpt-5.2-2025-12-11": {"provider":"openai","name":"OpenAI GPT-5.2 (2025-12-11)","api_format":"GENERIC"}, "openai.gpt-5.2-codex": {"provider":"openai","name":"OpenAI GPT-5.2 Codex","api_format":"GENERIC",
"openai.gpt-5.2-chat-latest": {"provider":"openai","name":"OpenAI GPT-5.2 Chat Latest","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyarqt3ngs42jvevvgunlvkb2ksxlnotqymbm4duy3phy4q"}},
"openai.gpt-5.2-pro-2025-12-11": {"provider":"openai","name":"OpenAI GPT-5.2 Pro (2025-12-11)","api_format":"GENERIC"}, "openai.gpt-5.2-pro": {"provider":"openai","name":"OpenAI GPT-5.2 Pro","api_format":"GENERIC",
"openai.gpt-5.1": {"provider":"openai","name":"OpenAI GPT-5.1","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaw6eprz3l3db3w3y5udndb6fjairuepn5chunmmgwueba"}},
"openai.gpt-5.1-2025-11-13": {"provider":"openai","name":"OpenAI GPT-5.1 (2025-11-13)","api_format":"GENERIC"}, "openai.gpt-5.2-pro-2025-12-11": {"provider":"openai","name":"OpenAI GPT-5.2 Pro (2025-12-11)","api_format":"GENERIC",
"openai.gpt-5.1-chat-latest": {"provider":"openai","name":"OpenAI GPT-5.1 Chat Latest","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya5s4tallv2x5rh7l2zc4kaxsbkihcnhd2w6lqf3a7ty2a"}},
"openai.gpt-5": {"provider":"openai","name":"OpenAI GPT-5","api_format":"GENERIC"}, "openai.gpt-5.2": {"provider":"openai","name":"OpenAI GPT-5.2","api_format":"GENERIC",
"openai.gpt-5-2025-08-07": {"provider":"openai","name":"OpenAI GPT-5 (2025-08-07)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya4fw3p5fddnexbfcurnz7spgkqb4mq4a6y5ubyv7777sa"}},
"openai.gpt-5-mini": {"provider":"openai","name":"OpenAI GPT-5 Mini","api_format":"GENERIC"}, "openai.gpt-5.2-2025-12-11": {"provider":"openai","name":"OpenAI GPT-5.2 (2025-12-11)","api_format":"GENERIC",
"openai.gpt-5-mini-2025-08-07": {"provider":"openai","name":"OpenAI GPT-5 Mini (2025-08-07)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyawclpjz3ar2psi2vjqk3zwzesnq2u6uli37djpdn2zaha"}},
"openai.gpt-5-nano": {"provider":"openai","name":"OpenAI GPT-5 Nano","api_format":"GENERIC"}, "openai.gpt-5.2-chat-latest": {"provider":"openai","name":"OpenAI GPT-5.2 Chat Latest","api_format":"GENERIC",
"openai.gpt-5-nano-2025-08-07": {"provider":"openai","name":"OpenAI GPT-5 Nano (2025-08-07)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyafvkojauwkg3b6nps2rogu5lmigedrkel65j6qtk7l2uq"}},
"openai.gpt-4.1": {"provider":"openai","name":"OpenAI GPT-4.1","api_format":"GENERIC"}, "openai.gpt-5.1-codex-max": {"provider":"openai","name":"OpenAI GPT-5.1 Codex Max","api_format":"GENERIC",
"openai.gpt-4.1-2025-04-14": {"provider":"openai","name":"OpenAI GPT-4.1 (2025-04-14)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaqy3hrasco26ocvumkr5canmnzkvkhgoyw6ntyvyeamrq"}},
"openai.gpt-4.1-mini": {"provider":"openai","name":"OpenAI GPT-4.1 Mini","api_format":"GENERIC"}, "openai.gpt-5.1-codex": {"provider":"openai","name":"OpenAI GPT-5.1 Codex","api_format":"GENERIC",
"openai.gpt-4.1-mini-2025-04-14": {"provider":"openai","name":"OpenAI GPT-4.1 Mini (2025-04-14)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyar76rnxb66b4bkhlpn62jdffjedmeijbbh3h3v4e6xrxa"}},
"openai.gpt-4.1-nano": {"provider":"openai","name":"OpenAI GPT-4.1 Nano","api_format":"GENERIC"}, "openai.gpt-5.1-codex-mini": {"provider":"openai","name":"OpenAI GPT-5.1 Codex Mini","api_format":"GENERIC",
"openai.gpt-4.1-nano-2025-04-14": {"provider":"openai","name":"OpenAI GPT-4.1 Nano (2025-04-14)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyashim6rmq4irtdxw5osv4flw6ueggq5sppyzmv3qw7tha"}},
"openai.gpt-4o": {"provider":"openai","name":"OpenAI GPT-4o","api_format":"GENERIC"}, "openai.gpt-5.1": {"provider":"openai","name":"OpenAI GPT-5.1","api_format":"GENERIC",
"openai.gpt-4o-2024-08-06": {"provider":"openai","name":"OpenAI GPT-4o (2024-08-06)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya3darth2ozqcfssb2bats5jitpgigllccajasdyqljnkq"}},
"openai.gpt-4o-2024-11-20": {"provider":"openai","name":"OpenAI GPT-4o (2024-11-20)","api_format":"GENERIC"}, "openai.gpt-5.1-2025-11-13": {"provider":"openai","name":"OpenAI GPT-5.1 (2025-11-13)","api_format":"GENERIC",
"openai.gpt-4o-mini": {"provider":"openai","name":"OpenAI GPT-4o Mini","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya5xtecezkpnkloj5wsmgtpbz7y4n7dsryanaj3l3npk5q"}},
"openai.gpt-4o-mini-search-preview": {"provider":"openai","name":"OpenAI GPT-4o Mini Search Preview","api_format":"GENERIC"}, "openai.gpt-5.1-chat-latest": {"provider":"openai","name":"OpenAI GPT-5.1 Chat Latest","api_format":"GENERIC",
"openai.gpt-4o-mini-search-preview-2025-03-11": {"provider":"openai","name":"OpenAI GPT-4o Mini Search (2025-03-11)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyavtwm6mlbmpmkkvejoprbt5cpflx2bq66lgy6yr2hxsba"}},
"openai.gpt-4o-search-preview": {"provider":"openai","name":"OpenAI GPT-4o Search Preview","api_format":"GENERIC"}, "openai.gpt-5-codex": {"provider":"openai","name":"OpenAI GPT-5 Codex","api_format":"GENERIC",
"openai.gpt-4o-search-preview-2025-03-11": {"provider":"openai","name":"OpenAI GPT-4o Search (2025-03-11)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyasddbvtsh44glecj4bbyghxdbjabmvb76pvrkjefeqgpa"}},
"openai.gpt-audio": {"provider":"openai","name":"OpenAI GPT Audio","api_format":"GENERIC"}, "openai.gpt-5": {"provider":"openai","name":"OpenAI GPT-5","api_format":"GENERIC",
"openai.o4-mini": {"provider":"openai","name":"OpenAI o4-mini","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyathaswupt2vqykuxzinzbu776zpydos343fokoddyywma"}},
"openai.o4-mini-2025-04-16": {"provider":"openai","name":"OpenAI o4-mini (2025-04-16)","api_format":"GENERIC"}, "openai.gpt-5-2025-08-07": {"provider":"openai","name":"OpenAI GPT-5 (2025-08-07)","api_format":"GENERIC",
"openai.o3": {"provider":"openai","name":"OpenAI o3","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyahr5xoj3itcnd2ppl45w3isil2brd4obx2x2qslckfxsq"}},
"openai.o3-2025-04-16": {"provider":"openai","name":"OpenAI o3 (2025-04-16)","api_format":"GENERIC"}, "openai.gpt-5-mini": {"provider":"openai","name":"OpenAI GPT-5 Mini","api_format":"GENERIC",
"openai.o3-mini": {"provider":"openai","name":"OpenAI o3-mini","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya3eain4n6v3edm4ryjvze5hnjouujd4vralxntfalwjaq"}},
"openai.o3-mini-2025-01-31": {"provider":"openai","name":"OpenAI o3-mini (2025-01-31)","api_format":"GENERIC"}, "openai.gpt-5-mini-2025-08-07": {"provider":"openai","name":"OpenAI GPT-5 Mini (2025-08-07)","api_format":"GENERIC",
"openai.o1": {"provider":"openai","name":"OpenAI o1","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyakzv5rbuziucahmfkbrvnrzwepgfzuyio4fq4goueda2a"}},
"openai.o1-2024-12-17": {"provider":"openai","name":"OpenAI o1 (2024-12-17)","api_format":"GENERIC"}, "openai.gpt-5-nano": {"provider":"openai","name":"OpenAI GPT-5 Nano","api_format":"GENERIC",
"openai.gpt-oss-120b": {"provider":"openai","name":"OpenAI GPT-oss (120B)","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyactz4ikvxbjchjlkdw4jtyftsopfwk6prltzarznudqxq"}},
"openai.gpt-oss-20b": {"provider":"openai","name":"OpenAI GPT-oss (20B)","api_format":"GENERIC"}, "openai.gpt-5-nano-2025-08-07": {"provider":"openai","name":"OpenAI GPT-5 Nano (2025-08-07)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyafyjacj4tcfrcvxpte4j5v5dhzrxs4ir7cz3hu3ztatlq"}},
"openai.gpt-4.1": {"provider":"openai","name":"OpenAI GPT-4.1","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaa6g75r2qqmtzjaooqtlxv4lxkpcqp2jdd6plpq7yq7ea"}},
"openai.gpt-4.1-2025-04-14": {"provider":"openai","name":"OpenAI GPT-4.1 (2025-04-14)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaba4ewqm32w7nsbal4od2unrtvhr6qybzfra5y2q7yhra"}},
"openai.gpt-4.1-mini": {"provider":"openai","name":"OpenAI GPT-4.1 Mini","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya6pk3sxishpiexm2rb5sf4ytb5tsbz4to2g3g23smidaa"}},
"openai.gpt-4.1-mini-2025-04-14": {"provider":"openai","name":"OpenAI GPT-4.1 Mini (2025-04-14)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyageakxq5b2haozdcjwalu6sdxsswsw3gsx4hxqaerpqvq"}},
"openai.gpt-4.1-nano": {"provider":"openai","name":"OpenAI GPT-4.1 Nano","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyacxqiaijwxalbynhst6oyg4wttzagz3dai4y2rnwh6wrq"}},
"openai.gpt-4.1-nano-2025-04-14": {"provider":"openai","name":"OpenAI GPT-4.1 Nano (2025-04-14)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaa3ubnmts4tfcwslpvuiuj74qdkyyfpb7vxo334nzzfoa"}},
"openai.gpt-4o": {"provider":"openai","name":"OpenAI GPT-4o","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyah7slrtboxdbfdy5cdspsfts62yumoclpdgwydopse7za"}},
"openai.gpt-4o-2024-08-06": {"provider":"openai","name":"OpenAI GPT-4o (2024-08-06)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyahw7ffo4apa3z5nrlfn3hjglirdasqn7ydwbe6o66tela"}},
"openai.gpt-4o-2024-11-20": {"provider":"openai","name":"OpenAI GPT-4o (2024-11-20)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyagxncxsf5vkooaj2pcrgcgjrxhexifnp2bghtnjstssga"}},
"openai.gpt-4o-mini": {"provider":"openai","name":"OpenAI GPT-4o Mini","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya5jba2auifbnsmrfjqmigut4aq6gei4kxyfqmwsyjo54a"}},
"openai.gpt-4o-mini-search-preview": {"provider":"openai","name":"OpenAI GPT-4o Mini Search Preview","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyauin4xlovatfjhxp67e3pxfmjp26sxide2yobsnxn5xyq"}},
"openai.gpt-4o-mini-search-preview-2025-03-11": {"provider":"openai","name":"OpenAI GPT-4o Mini Search (2025-03-11)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyabx7ppfcp5uyt2gmfc6mrfy74lnzenayxiyfpbvo5b7ka"}},
"openai.gpt-4o-search-preview": {"provider":"openai","name":"OpenAI GPT-4o Search Preview","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyar2iwiwsqlrrdw5wmppchuz56nmkrp2soyohx3boc37mq"}},
"openai.gpt-4o-search-preview-2025-03-11": {"provider":"openai","name":"OpenAI GPT-4o Search (2025-03-11)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya7huzy6zziboyhuwfqmbhsjrz57xat5hclnjnqrnan7ha"}},
"openai.gpt-image-1.5": {"provider":"openai","name":"OpenAI GPT Image 1.5","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyauvxywwfyxnqouoltmp2oe5srzspxnnflmxpkznbwgaea"}},
"openai.gpt-image-1": {"provider":"openai","name":"OpenAI GPT Image 1","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaykmvlptihcu4iumplkemkp3u3mcw7atypidcpfpminoq"}},
"openai.gpt-audio": {"provider":"openai","name":"OpenAI GPT Audio","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyabnxjhfcolefqhio7twnnqvkxbkphpy6f5h2mo4xqkdvq"}},
"openai.o4-mini": {"provider":"openai","name":"OpenAI o4-mini","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya5ivfqp4fxlajoeg2cahlqtuuswagiv6a7dggpigy23bq"}},
"openai.o4-mini-2025-04-16": {"provider":"openai","name":"OpenAI o4-mini (2025-04-16)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyatheqm7c6zhrtgwccbwyopoi5dzrzrclw7kx5igfrqniq"}},
"openai.o3": {"provider":"openai","name":"OpenAI o3","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyalgnrukpjk6wm5zsf4jzkoneahgswhrk7kukkoagwnzma"}},
"openai.o3-2025-04-16": {"provider":"openai","name":"OpenAI o3 (2025-04-16)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyah6nkmpmrgb67u4zuxs77uc3kg3vsgmfdig5zznbtcqoq"}},
"openai.o3-mini": {"provider":"openai","name":"OpenAI o3-mini","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyayrbuyw3robmloay76lh7j2l3mk65aoy64mhcgmwzn5yq"}},
"openai.o3-mini-2025-01-31": {"provider":"openai","name":"OpenAI o3-mini (2025-01-31)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaeo3yslwf6uhxvfhbop7ukixto35432w7vir53mvw2vza"}},
"openai.o1": {"provider":"openai","name":"OpenAI o1","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya674efirmykrx77pde5ftnuihvpn45vyhn2ecj6dnl5ca"}},
"openai.o1-2024-12-17": {"provider":"openai","name":"OpenAI o1 (2024-12-17)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyarak5fe624z3kudi7p4svnlif7bgg5gpoqcxcyeoajjcq"}},
"openai.gpt-oss-120b": {"provider":"openai","name":"OpenAI GPT-oss (120B)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyachl5cngrvo4tna3bj3yqqtfvgtjarbgidmy76z7ojy6a"}},
"openai.gpt-oss-20b": {"provider":"openai","name":"OpenAI GPT-oss (20B)","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaillcx47jg3axfefkaruzmcvmse66t4nmoxuwpaqbf4kq"}},
# ── xAI ── # ── xAI ──
"xai.grok-4": {"provider":"xai","name":"xAI Grok 4","api_format":"GENERIC"}, "xai.grok-4": {"provider":"xai","name":"xAI Grok 4","api_format":"GENERIC",
"xai.grok-4-1-fast-reasoning": {"provider":"xai","name":"xAI Grok 4.1 Fast Reasoning","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaldmhg25is4nouena4oa2pj4nvwgfeempo4syiaazukia"}},
"xai.grok-4-1-fast-non-reasoning": {"provider":"xai","name":"xAI Grok 4.1 Fast Non-Reasoning","api_format":"GENERIC"}, "xai.grok-4-1-fast-reasoning": {"provider":"xai","name":"xAI Grok 4.1 Fast Reasoning","api_format":"GENERIC",
"xai.grok-4-fast-reasoning": {"provider":"xai","name":"xAI Grok 4 Fast Reasoning","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaocp3cooe7jkje7irb7dsrspgobjtkxakutz76gjo3k3a"}},
"xai.grok-4-fast-non-reasoning": {"provider":"xai","name":"xAI Grok 4 Fast Non-Reasoning","api_format":"GENERIC"}, "xai.grok-4-1-fast-non-reasoning": {"provider":"xai","name":"xAI Grok 4.1 Fast Non-Reasoning","api_format":"GENERIC",
"xai.grok-3": {"provider":"xai","name":"xAI Grok 3","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaklmfkhxw5lwo5ifhqo2dxu5ymbeyzdr4nnpv3paigsoq"}},
"xai.grok-3-mini": {"provider":"xai","name":"xAI Grok 3 Mini","api_format":"GENERIC"}, "xai.grok-4-fast-reasoning": {"provider":"xai","name":"xAI Grok 4 Fast Reasoning","api_format":"GENERIC",
"xai.grok-3-fast": {"provider":"xai","name":"xAI Grok 3 Fast","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyamqkpviarwzvo3wwuhnhqloa224fneaukac5megifuaba"}},
"xai.grok-3-mini-fast": {"provider":"xai","name":"xAI Grok 3 Mini Fast","api_format":"GENERIC"}, "xai.grok-4-fast-non-reasoning": {"provider":"xai","name":"xAI Grok 4 Fast Non-Reasoning","api_format":"GENERIC",
"xai.grok-code-fast-1": {"provider":"xai","name":"xAI Grok Code Fast 1","api_format":"GENERIC"}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaj2m67qex5dzgi7gi5blfdztnvbwggvibaxi6ac3jthha"}},
"xai.grok-3": {"provider":"xai","name":"xAI Grok 3","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyag3w2xk76vlahjujj2gdfeuzhflt25gbo3bxidlsqfjla"}},
"xai.grok-3-mini": {"provider":"xai","name":"xAI Grok 3 Mini","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyar77g5dtex3loxuluziukznryr7kowvncea33ml7vrlda"}},
"xai.grok-3-fast": {"provider":"xai","name":"xAI Grok 3 Fast","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyazdu5a5ruzfds34kwb2zwc65p6fes5uwddmkq7dyisvxq"}},
"xai.grok-3-mini-fast": {"provider":"xai","name":"xAI Grok 3 Mini Fast","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyauvjoll2repj5pbtkk7pinwj57ex3lkehzpxd6v6rxscq"}},
"xai.grok-code-fast-1": {"provider":"xai","name":"xAI Grok Code Fast 1","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaayp5ccahfbpht56x7meyc26gyvojowmrbrr4xj626enq"}},
# ── ProtectAI ──
"protectai.deberta-v3-base-prompt-injection-v2": {"provider":"protectai","name":"ProtectAI DeBERTa Prompt Injection v2","api_format":"GENERIC",
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyasj4kxlosqvmyaxu53lrc7iddmo2owc6bizoa2y5w47oq"}},
} }
EMBEDDING_MODELS = { EMBEDDING_MODELS = {
"cohere.embed-v4.0": {"name":"Cohere Embed v4.0 (Multimodal)","dims":1536}, "cohere.embed-v4.0": {"name":"Cohere Embed v4.0 (Multimodal)","dims":1536,
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyahw4vlsxm7newcqtlgmristnwxlrxox3h7bcnlomjpgwa"}},
"openai.text-embedding-3-large": {"name":"OpenAI Text Embedding 3 Large","dims":3072,
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya3i6o2p5h2mij6unya5bsyc46aqey5hwy3icncawo3vcq"}},
"openai.text-embedding-3-small": {"name":"OpenAI Text Embedding 3 Small","dims":1536,
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyarjpjyniixp4tf7kyhr5bfajxmky4sjmbki2hp55ns2pq"}},
"cohere.embed-english-v3.0": {"name":"Cohere Embed English v3.0","dims":1024}, "cohere.embed-english-v3.0": {"name":"Cohere Embed English v3.0","dims":1024},
"cohere.embed-multilingual-v3.0": {"name":"Cohere Embed Multilingual v3.0","dims":1024}, "cohere.embed-multilingual-v3.0": {"name":"Cohere Embed Multilingual v3.0","dims":1024,
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaf4ga422xmco2gqbwaks7chwt24y6qtofhwwfrpxjxpxa"}},
"cohere.embed-english-light-v3.0": {"name":"Cohere Embed English Light v3.0","dims":384}, "cohere.embed-english-light-v3.0": {"name":"Cohere Embed English Light v3.0","dims":384},
"cohere.embed-multilingual-light-v3.0": {"name":"Cohere Embed Multilingual Light v3.0","dims":384}, "cohere.embed-multilingual-light-v3.0": {"name":"Cohere Embed Multilingual Light v3.0","dims":384},
"cohere.embed-english-image-v3.0": {"name":"Cohere Embed English Image v3.0","dims":1024}, "cohere.embed-english-image-v3.0": {"name":"Cohere Embed English Image v3.0","dims":1024,
"cohere.embed-multilingual-image-v3.0": {"name":"Cohere Embed Multilingual Image v3.0","dims":1024}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaukpmlzyv2y3rb2sqdw4ldqsysxqula3wfnhadnj77drq"}},
"cohere.embed-english-light-image-v3.0": {"name":"Cohere Embed English Light Image v3.0","dims":384}, "cohere.embed-multilingual-image-v3.0": {"name":"Cohere Embed Multilingual Image v3.0","dims":1024,
"cohere.embed-multilingual-light-image-v3.0": {"name":"Cohere Embed Multilingual Light Image v3.0","dims":384}, "ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyazeracodio7mgnoq76vk26jdvdt7x7pa4amy3s6yomplq"}},
"cohere.embed-english-light-image-v3.0": {"name":"Cohere Embed English Light Image v3.0","dims":384,
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceya56ycvdjfdwciqcgpzinzz72jre65z57rgyo4bvq7h55a"}},
"cohere.embed-multilingual-light-image-v3.0": {"name":"Cohere Embed Multilingual Light Image v3.0","dims":384,
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyanjovpmwmspjzwharl4tebjamhffc5brdqhvyvboarpyq"}},
} }
GENAI_REGIONS = [ GENAI_REGIONS = [
@@ -810,8 +898,12 @@ def _call_genai(gc: dict, message: str, history: list = None) -> str:
chat_request.messages = messages chat_request.messages = messages
# Serving mode - supports model_id or model_ocid # Serving mode - resolve OCID: explicit model_ocid > catalog ocid for region > short model_id
model_ref = gc.get("model_ocid") or gc["model_id"] model_ref = gc.get("model_ocid") or ""
if not model_ref:
region = gc.get("genai_region", "")
ocids = model_info.get("ocids", {})
model_ref = ocids.get(region) or gc["model_id"]
if gc.get("serving_type") == "DEDICATED" and gc.get("dedicated_endpoint_id"): if gc.get("serving_type") == "DEDICATED" and gc.get("dedicated_endpoint_id"):
chat_detail.serving_mode = oci.generative_ai_inference.models.DedicatedServingMode( chat_detail.serving_mode = oci.generative_ai_inference.models.DedicatedServingMode(
endpoint_id=gc["dedicated_endpoint_id"] endpoint_id=gc["dedicated_endpoint_id"]
@@ -902,7 +994,11 @@ def _embed_text(text: str, genai_cfg: dict, embedding_model_id: str) -> list:
) )
embed_detail = oci.generative_ai_inference.models.EmbedTextDetails() embed_detail = oci.generative_ai_inference.models.EmbedTextDetails()
embed_detail.inputs = [text] embed_detail.inputs = [text]
embed_detail.serving_mode = oci.generative_ai_inference.models.OnDemandServingMode(model_id=embedding_model_id) # Resolve OCID for embedding model by region
emb_info = EMBEDDING_MODELS.get(embedding_model_id, {})
region = genai_cfg.get("genai_region", "")
emb_ref = emb_info.get("ocids", {}).get(region) or embedding_model_id
embed_detail.serving_mode = oci.generative_ai_inference.models.OnDemandServingMode(model_id=emb_ref)
embed_detail.compartment_id = genai_cfg["compartment_id"] embed_detail.compartment_id = genai_cfg["compartment_id"]
embed_detail.truncate = "NONE" embed_detail.truncate = "NONE"
embed_detail.input_type = "SEARCH_QUERY" embed_detail.input_type = "SEARCH_QUERY"