From 2071fa037ae63bec8f99228faffc6fd6579f635d Mon Sep 17 00:00:00 2001 From: nogueiraguh Date: Wed, 4 Mar 2026 13:53:57 -0300 Subject: [PATCH] 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 --- backend/app.py | 47 +++++++++++++-------------------------------- frontend/index.html | 4 ++-- 2 files changed, 15 insertions(+), 36 deletions(-) diff --git a/backend/app.py b/backend/app.py index 8d46560..f25df57 100644 --- a/backend/app.py +++ b/backend/app.py @@ -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: diff --git a/frontend/index.html b/frontend/index.html index ffb8ca2..6db9271 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -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=`
Agente Local (sem IA)
`; if(S.genaiCfg.length){ddItems+=`
Configs Salvas
`;S.genaiCfg.forEach(g=>{const mi=S.models[g.model_id];ddItems+=`
${g.name||mi?.name||g.model_id} (${g.genai_region})
`})} provOrder.filter(p=>provs[p]).forEach(p=>{ddItems+=`
${p.charAt(0).toUpperCase()+p.slice(1)}
`;provs[p].forEach(m=>{ddItems+=`
${m.name}
`})}); @@ -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;