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コマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?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.