fix: remove unavailable Cohere models and fix xAI Grok param support
- Remove 5 Cohere chat models (not available in us-ashburn-1) - Remove 9 legacy Cohere embedding models (v3.0), keep embed-v4.0 - Update default embedding model to cohere.embed-v4.0 - Skip presence_penalty, frequency_penalty, top_k for xAI models - Remove Cohere from chat provider order in frontend
This commit is contained in:
@@ -48,17 +48,6 @@ security = HTTPBearer()
|
||||
# OCIDs are region-specific; "ocids" maps genai_region → OCID.
|
||||
# _call_genai resolves the OCID for the configured region at runtime.
|
||||
GENAI_MODELS = {
|
||||
# ── Cohere ──
|
||||
"cohere.command-a-reasoning": {"provider":"cohere","name":"Cohere Command A Reasoning","api_format":"COHERE",
|
||||
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaw5ch2lw2va4t2c2e6ha6kecinfceiqq37runhqchqrkq"}},
|
||||
"cohere.command-a-vision": {"provider":"cohere","name":"Cohere Command A Vision","api_format":"COHERE",
|
||||
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyabvp5xteqir7mkcoivaxq6hohml4tqsrfg5bju2cbtrdq"}},
|
||||
"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.llama-4-maverick-17b-128e-instruct-fp8": {"provider":"meta","name":"Meta Llama 4 Maverick","api_format":"GENERIC",
|
||||
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyah6tjdejjashngznsylutuhhvufukzb2g2ls54g2flsfq"}},
|
||||
@@ -201,19 +190,6 @@ EMBEDDING_MODELS = {
|
||||
"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-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-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,
|
||||
"ocids":{"us-ashburn-1":"ocid1.generativeaimodel.oc1.iad.amaaaaaask7dceyaukpmlzyv2y3rb2sqdw4ldqsysxqula3wfnhadnj77drq"}},
|
||||
"cohere.embed-multilingual-image-v3.0": {"name":"Cohere Embed Multilingual Image v3.0","dims":1024,
|
||||
"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 = [
|
||||
@@ -345,7 +321,7 @@ def init_db():
|
||||
""")
|
||||
c.execute("DELETE FROM config_logs WHERE created_at < datetime('now', '-30 days')")
|
||||
# ── Migrations ──
|
||||
for col in ["genai_config_id TEXT", "embedding_model_id TEXT DEFAULT 'cohere.embed-multilingual-v3.0'"]:
|
||||
for col in ["genai_config_id TEXT", "embedding_model_id TEXT DEFAULT 'cohere.embed-v4.0'"]:
|
||||
try:
|
||||
c.execute(f"ALTER TABLE adb_vector_configs ADD COLUMN {col}")
|
||||
except sqlite3.OperationalError:
|
||||
@@ -443,7 +419,7 @@ class GenAIConfigReq(BaseModel):
|
||||
class ADBVectorReq(BaseModel):
|
||||
config_name: str; dsn: str; username: str; password: str
|
||||
wallet_password: Optional[str] = None; table_name: str = "CIS_EMBEDDINGS"; use_mtls: bool = True
|
||||
genai_config_id: Optional[str] = None; embedding_model_id: str = "cohere.embed-multilingual-v3.0"
|
||||
genai_config_id: Optional[str] = None; embedding_model_id: str = "cohere.embed-v4.0"
|
||||
class IngestDocReq(BaseModel):
|
||||
adb_config_id: str; documents: List[Dict[str, Any]]
|
||||
class MCPServerReq(BaseModel):
|
||||
@@ -881,16 +857,19 @@ def _call_genai(gc: dict, message: str, history: list = None) -> str:
|
||||
chat_request.api_format = oci.generative_ai_inference.models.BaseChatRequest.API_FORMAT_GENERIC
|
||||
provider = model_info.get("provider", "")
|
||||
is_openai = provider == "openai"
|
||||
is_xai = provider == "xai"
|
||||
# OpenAI models use max_completion_tokens instead of max_tokens
|
||||
# and do not support top_k
|
||||
if is_openai:
|
||||
chat_request.max_completion_tokens = int(gc.get("max_tokens", 6000))
|
||||
else:
|
||||
chat_request.max_tokens = int(gc.get("max_tokens", 6000))
|
||||
chat_request.top_k = int(gc.get("top_k", 1))
|
||||
if not is_xai:
|
||||
chat_request.top_k = int(gc.get("top_k", 1))
|
||||
chat_request.temperature = float(gc.get("temperature", 1))
|
||||
chat_request.frequency_penalty = float(gc.get("frequency_penalty", 0))
|
||||
chat_request.presence_penalty = float(gc.get("presence_penalty", 0))
|
||||
if not is_xai:
|
||||
chat_request.frequency_penalty = float(gc.get("frequency_penalty", 0))
|
||||
chat_request.presence_penalty = float(gc.get("presence_penalty", 0))
|
||||
chat_request.top_p = float(gc.get("top_p", 0.95))
|
||||
|
||||
messages = []
|
||||
@@ -975,7 +954,7 @@ def _get_adb_connection(cfg: dict):
|
||||
def _ensure_embeddings_table(cfg: dict):
|
||||
"""Create the embeddings table in ADB if it doesn't exist."""
|
||||
table_name = cfg.get("table_name", "CIS_EMBEDDINGS")
|
||||
emb_model = cfg.get("embedding_model_id", "cohere.embed-multilingual-v3.0")
|
||||
emb_model = cfg.get("embedding_model_id", "cohere.embed-v4.0")
|
||||
dims = EMBEDDING_MODELS.get(emb_model, {}).get("dims", 1024)
|
||||
conn = _get_adb_connection(cfg)
|
||||
try:
|
||||
@@ -1177,7 +1156,7 @@ async def save_adb(
|
||||
config_name: str = Form(...), dsn: str = Form(...), username: str = Form(...),
|
||||
password: str = Form(...), wallet_password: str = Form(""),
|
||||
table_name: str = Form("CIS_EMBEDDINGS"), use_mtls: str = Form("true"),
|
||||
genai_config_id: str = Form(""), embedding_model_id: str = Form("cohere.embed-multilingual-v3.0"),
|
||||
genai_config_id: str = Form(""), embedding_model_id: str = Form("cohere.embed-v4.0"),
|
||||
wallet: Optional[UploadFile] = File(None),
|
||||
u=Depends(require("admin","user"))
|
||||
):
|
||||
@@ -1262,7 +1241,7 @@ async def update_adb(
|
||||
config_name: str = Form(...), dsn: str = Form(...), username: str = Form(...),
|
||||
password: str = Form(""), wallet_password: str = Form(""),
|
||||
table_name: str = Form("CIS_EMBEDDINGS"), use_mtls: str = Form("true"),
|
||||
genai_config_id: str = Form(""), embedding_model_id: str = Form("cohere.embed-multilingual-v3.0"),
|
||||
genai_config_id: str = Form(""), embedding_model_id: str = Form("cohere.embed-v4.0"),
|
||||
wallet: Optional[UploadFile] = File(None),
|
||||
u=Depends(require("admin","user"))
|
||||
):
|
||||
@@ -1322,7 +1301,7 @@ async def ingest_documents(vid: str, req: IngestDocReq, bg: BackgroundTasks, u=D
|
||||
def _ingest_documents_task(cfg: dict, genai_cfg: dict, documents: list, user_id: str, username: str):
|
||||
"""Background task: embed and insert documents into ADB via OCI GenAI."""
|
||||
import array
|
||||
emb_model = cfg.get("embedding_model_id", "cohere.embed-multilingual-v3.0")
|
||||
emb_model = cfg.get("embedding_model_id", "cohere.embed-v4.0")
|
||||
table_name = cfg.get("table_name", "CIS_EMBEDDINGS")
|
||||
_ensure_embeddings_table(cfg)
|
||||
conn = _get_adb_connection(cfg)
|
||||
@@ -1630,7 +1609,7 @@ async def chat(msg: ChatMsg, u=Depends(current_user)):
|
||||
with db() as c:
|
||||
emb_genai = c.execute("SELECT * FROM genai_configs WHERE id=?", (adb_cfg["genai_config_id"],)).fetchone()
|
||||
if emb_genai:
|
||||
emb_model = adb_cfg.get("embedding_model_id", "cohere.embed-multilingual-v3.0")
|
||||
emb_model = adb_cfg.get("embedding_model_id", "cohere.embed-v4.0")
|
||||
query_embedding = _embed_text(msg.message, dict(emb_genai), emb_model)
|
||||
documents = _vector_search(adb_cfg, query_embedding, top_k=5)
|
||||
if documents:
|
||||
|
||||
@@ -284,7 +284,7 @@ function rChat(){
|
||||
'openai.gpt-oss-120b','openai.gpt-oss-20b',
|
||||
'openai.gpt-5.2-pro','openai.gpt-5.2-pro-2025-12-11']);
|
||||
const provs={};for(const[mid,info]of Object.entries(S.models)){if(skip.has(mid))continue;const p=info.provider||'other';if(!provs[p])provs[p]=[];provs[p].push({id:mid,name:info.name})}
|
||||
const provOrder=['openai','google','meta','cohere','xai'];
|
||||
const provOrder=['openai','google','meta','xai'];
|
||||
let ddItems=`<div class="itm${!S.chatModel?' sel':''}" onclick="pickModel('')">Agente Local (sem IA)</div>`;
|
||||
if(S.genaiCfg.length){ddItems+=`<div class="grp">Configs Salvas</div>`;S.genaiCfg.forEach(g=>{const mi=S.models[g.model_id];ddItems+=`<div class="itm${S.chatModel==='cfg:'+g.id?' sel':''}" onclick="pickModel('cfg:${g.id}')">${g.name||mi?.name||g.model_id} (${g.genai_region})</div>`})}
|
||||
provOrder.filter(p=>provs[p]).forEach(p=>{ddItems+=`<div class="grp">${p.charAt(0).toUpperCase()+p.slice(1)}</div>`;provs[p].forEach(m=>{ddItems+=`<div class="itm${S.chatModel===m.id?' sel':''}" onclick="pickModel('${m.id}')">${m.name}</div>`})});
|
||||
@@ -603,7 +603,7 @@ async function sAdb(){const btn=document.getElementById('abtn');btn.disabled=tru
|
||||
fd.append('password',document.getElementById('apw').value);fd.append('wallet_password',document.getElementById('awpw').value||'');
|
||||
fd.append('table_name',document.getElementById('atbl').value);fd.append('use_mtls','true');
|
||||
fd.append('genai_config_id',document.getElementById('agcfg').value||'');
|
||||
fd.append('embedding_model_id',document.getElementById('aemb').value||'cohere.embed-multilingual-v3.0');
|
||||
fd.append('embedding_model_id',document.getElementById('aemb').value||'cohere.embed-v4.0');
|
||||
const wf=document.getElementById('awf').files[0];if(wf)fd.append('wallet',wf);
|
||||
const url=isEdit?'/adb/configs/'+S.editing.id:'/adb/config';const method=isEdit?'PUT':'POST';
|
||||
await $api(url,{method,body:fd,headers:{}});S.editing=null;
|
||||
|
||||
Reference in New Issue
Block a user