Skip to main content
cohere-migration-deep-dive Migrate from OpenAI/Anthropic/other LLM providers to Cohere, or vice versa.
Use when switching LLM providers, migrating embeddings between models,
or re-platforming existing AI integrations to Cohere API v2.
Trigger with phrases like "migrate to cohere", "switch from openai to cohere",
"cohere migration", "replace openai with cohere", "cohere replatform".
설치로 이동 Skills Marketplace 커뮤니티가 만든 AI 스킬을 발견하고 탐색하세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/jeremylongshore/claude-code-plugins-plus-skills --skill cohere-migration-deep-dive명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Zip 다운로드 다운로드 중... 이 저장소의 다른 Skills Implement user sign-up and sign-in flows with Clerk.
Use when building authentication UI, customizing sign-in experience,
or implementing OAuth social login.
Trigger with phrases like "clerk sign-in", "clerk sign-up",
"clerk login flow", "clerk OAuth", "clerk social login".
Implement session management and middleware with Clerk.
Use when managing user sessions, configuring route protection,
or implementing token refresh and custom JWT templates.
Trigger with phrases like "clerk session", "clerk middleware",
"clerk route protection", "clerk token", "clerk JWT".
Configure enterprise SSO, role-based access control, and organization management.
Use when implementing SSO integration, configuring role-based permissions,
or setting up organization-level controls.
Trigger with phrases like "clerk SSO", "clerk RBAC",
"clerk enterprise", "clerk roles", "clerk permissions", "clerk organizations".
jeremylongshore
jeremylongshore/claude-code-plugins-plus-skills
GitHub 저장소 열기 name cohere-migration-deep-dive description Migrate from OpenAI/Anthropic/other LLM providers to Cohere, or vice versa.
Use when switching LLM providers, migrating embeddings between models,
or re-platforming existing AI integrations to Cohere API v2.
Trigger with phrases like "migrate to cohere", "switch from openai to cohere",
"cohere migration", "replace openai with cohere", "cohere replatform".
allowed-tools Read, Write, Edit, Bash(npm:*), Bash(node:*), Bash(kubectl:*) version 1.5.0 license MIT author Jeremy Longshore <jeremy@intentsolutions.io> tags ["saas","ai","nlp","cohere"] compatibility Designed for Claude Code
Cohere Migration Deep Dive
Overview
Comprehensive guide for migrating to Cohere from OpenAI, Anthropic, or other LLM providers, including embedding re-vectorization, prompt adaptation, and gradual traffic shifting.
Prerequisites
Current LLM integration documented
Cohere API key and SDK installed
Feature flag infrastructure
Rollback strategy
Migration Types
From Complexity Duration Key Challenge OpenAI → Cohere Medium 1-2 weeks Prompt adaptation, embedding migration Anthropic → Cohere Medium 1-2 weeks Message format, tool definitions Custom/OSS → Cohere Low Days SDK integration Embedding migration High 2-4 weeks Re-vectorize entire corpus
Instructions
Step 1: OpenAI to Cohere Chat Migration
import OpenAI from 'openai' ;
const openai = new OpenAI ();
const response = await openai.chat .completions .create ({
model : 'gpt-4o' ,
messages : [
{ role : 'system' , content : 'You are helpful.' },
{ role : 'user' , content : 'Hello' },
],
max_tokens : 500 ,
temperature : 0.7 ,
});
text = response. [ ]. . ;
{ } ;
cohere = ();
response = cohere. ({
: ,
: [
{ : , : },
{ : , : },
],
: ,
: ,
});
text = response. ?. ?.[ ]?. ;
const
choices
0
message
content
import
CohereClientV2
from
'cohere-ai'
const
new
CohereClientV2
const
await
chat
model
'command-a-03-2025'
messages
role
'system'
content
'You are helpful.'
role
'user'
content
'Hello'
maxTokens
500
temperature
0.7
const
message
content
0
text
Step 2: Embedding Migration
async function migrateEmbeddings (
documents : Array <{ id: string ; text: string }>,
batchSize = 96
) {
const cohere = new CohereClientV2 ();
let processed = 0 ;
for (let i = 0 ; i < documents.length ; i += batchSize) {
const batch = documents.slice (i, i + batchSize);
const response = await cohere.embed ({
model : 'embed-v4.0' ,
texts : batch.map (d => d.text ),
inputType : 'search_document' ,
embeddingTypes : ['float' ],
});
for (let j = 0 ; j < batch.length ; j++) {
await vectorDB.upsert ({
collection : 'docs-cohere' ,
id : batch[j].id ,
vector : response.embeddings .float [j],
metadata : { text : batch[j].text },
});
}
processed += batch.length ;
console .log (`Migrated ${processed} /${documents.length} embeddings` );
}
}
Step 3: Tool Use Migration
const openaiTools = [{
type : 'function' ,
function : {
name : 'get_weather' ,
description : 'Get weather' ,
parameters : {
type : 'object' ,
properties : { city : { type : 'string' } },
required : ['city' ],
},
},
}];
const cohereTools = [{
type : 'function' ,
function : {
name : 'get_weather' ,
description : 'Get weather' ,
parameters : {
type : 'object' ,
properties : { city : { type : 'string' } },
required : ['city' ],
},
},
}];
Step 4: Streaming Migration
const openaiStream = await openai.chat .completions .create ({
model : 'gpt-4o' ,
messages : [...],
stream : true ,
});
for await (const chunk of openaiStream) {
process.stdout .write (chunk.choices [0 ]?.delta ?.content ?? '' );
}
const cohereStream = await cohere.chatStream ({
model : 'command-a-03-2025' ,
messages : [...],
});
for await (const event of cohereStream) {
if (event.type === 'content-delta' ) {
process.stdout .write (event.delta ?.message ?.content ?.text ?? '' );
}
}
Step 5: Adapter Pattern for Gradual Migration interface LLMAdapter {
chat (message : string , options ?: { system ?: string ; maxTokens ?: number }): Promise <string >;
embed (texts : string []): Promise <number [][]>;
rerank (query : string , docs : string [], topN ?: number ): Promise <Array <{ index : number ; score : number }>>;
}
class CohereAdapter implements LLMAdapter {
private client = new CohereClientV2 ();
async chat (message : string , options ?: { system ?: string ; maxTokens ?: number }): Promise <string > {
const messages : any [] = [];
if (options?.system ) messages.push ({ role : 'system' , content : options.system });
messages.push ({ role : 'user' , content : message });
const response = await this .client .chat ({
model : 'command-a-03-2025' ,
messages,
maxTokens : options?.maxTokens ,
});
return response.message ?.content ?.[0 ]?.text ?? '' ;
}
async embed (texts : string []): Promise <number [][]> {
const response = await this .client .embed ({
model : 'embed-v4.0' ,
texts,
inputType : 'search_document' ,
embeddingTypes : ['float' ],
});
return response.embeddings .float ;
}
async rerank (query : string , docs : string [], topN = 5 ): Promise <Array <{ index : number ; score : number }>> {
const response = await this .client .rerank ({
model : 'rerank-v3.5' ,
query,
documents : docs,
topN,
});
return response.results .map (r => ({ index : r.index , score : r.relevanceScore }));
}
}
class OpenAIAdapter implements LLMAdapter {
}
function getLLMAdapter ( ): LLMAdapter {
const coherePercentage = getFeatureFlag ('cohere_migration_pct' );
if (Math .random () * 100 < coherePercentage) {
return new CohereAdapter ();
}
return new OpenAIAdapter ();
}
Step 6: Validation and Comparison async function compareOutputs (message : string ): Promise <{
openai : string ;
cohere : string ;
latencyMs : { openai : number ; cohere : number };
}> {
const startOpenAI = Date .now ();
const openaiResult = await openaiAdapter.chat (message);
const openaiLatency = Date .now () - startOpenAI;
const startCohere = Date .now ();
const cohereResult = await cohereAdapter.chat (message);
const cohereLatency = Date .now () - startCohere;
return {
openai : openaiResult,
cohere : cohereResult,
latencyMs : { openai : openaiLatency, cohere : cohereLatency },
};
}
const testQueries = ['Summarize this text' , 'Translate to French' , 'Extract key points' ];
for (const q of testQueries) {
const result = await compareOutputs (q);
console .log (`Query: ${q} ` );
console .log (`OpenAI (${result.latencyMs.openai} ms): ${result.openai.slice(0 , 100 )} ` );
console .log (`Cohere (${result.latencyMs.cohere} ms): ${result.cohere.slice(0 , 100 )} ` );
}
Cohere-Unique Features (Not in OpenAI) Feature Cohere OpenAI Built-in Rerank cohere.rerank()Not available RAG with citations documents param + citationsManual implementation Connectors (data sources) connectors paramNot available Classify endpoint cohere.classify()Not available Safety modes safetyMode paramModeration API (separate)
Rollback Plan
curl -X POST https://flagservice/flags/cohere_migration_pct -d '{"value": 0}'
Output
Adapter layer abstracting LLM provider
Embedding migration with batch processing
A/B comparison for output quality validation
Feature-flag controlled traffic shifting
Rollback via feature flag (instant, no deploy)
Error Handling Issue Cause Solution Embedding dimension mismatch Mixed providers in same DB Separate collections per provider Response shape different Provider-specific format Use adapter pattern Higher latency on Cohere Different model size Try command-r7b for speed Quality difference Different model strengths Tune system prompts per provider
Resources
Next Steps For Cohere-specific architecture patterns, see cohere-reference-architecture.