Skip to content

Commit 3a384bc

Browse files
authored
Merge pull request #940 from constructive-io/devin/1774944693-embedder-config-docs
feat(codegen): generate embedder config reference for CLI docs
2 parents c06bf0e + 128e678 commit 3a384bc

1 file changed

Lines changed: 120 additions & 0 deletions

File tree

graphql/codegen/src/core/codegen/cli/docs-generator.ts

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,64 @@ export function generateSkills(
370370
}),
371371
});
372372

373+
// Embedder reference (generated once when any table has Vector fields)
374+
const hasEmbeddings = tables.some((t) =>
375+
categorizeSpecialFields(t, registry).some((g) => g.category === 'embedding'),
376+
);
377+
if (hasEmbeddings) {
378+
referenceNames.push('embedder');
379+
files.push({
380+
fileName: `${skillName}/references/embedder.md`,
381+
content: buildSkillReference({
382+
title: 'Embedder Configuration',
383+
description:
384+
`Configure text-to-vector embedding for \`--auto-embed\` support in ${toolName}.\n\n` +
385+
'When an embedder is configured, you can pass plain text to vector fields and ' +
386+
'the CLI will automatically convert it to an embedding vector.\n\n' +
387+
'**Supported providers:** ollama, openai\n\n' +
388+
'**Configuration methods:** appstash config (persisted per-context) or environment variables',
389+
usage: [
390+
`# Configure via appstash config (persisted per-context)`,
391+
`${toolName} config set embedder.provider <provider>`,
392+
`${toolName} config set embedder.model <model>`,
393+
`${toolName} config set embedder.baseUrl <url>`,
394+
'',
395+
`# Or configure via environment variables`,
396+
`EMBEDDER_PROVIDER=<provider> EMBEDDER_MODEL=<model> EMBEDDER_BASE_URL=<url> ${toolName} <command>`,
397+
],
398+
examples: [
399+
{
400+
description: 'Ollama with nomic-embed-text (open-source, local)',
401+
code: [
402+
`# Start Ollama locally and pull the model`,
403+
`ollama pull nomic-embed-text`,
404+
'',
405+
`# Register the embedder`,
406+
`${toolName} config set embedder.provider ollama`,
407+
`${toolName} config set embedder.model nomic-embed-text`,
408+
`${toolName} config set embedder.baseUrl http://localhost:11434`,
409+
'',
410+
`# Now use --auto-embed with any vector field`,
411+
`${toolName} ${toKebabCase(getTableNames(tables[0]).singularName)} search "my query" --auto-embed`,
412+
],
413+
},
414+
{
415+
description: 'OpenAI with an API key',
416+
code: [
417+
`# Register the embedder`,
418+
`${toolName} config set embedder.provider openai`,
419+
`${toolName} config set embedder.model text-embedding-3-small`,
420+
`${toolName} config set embedder.apiKey sk-proj-...your-api-key`,
421+
'',
422+
`# Or use environment variables`,
423+
`EMBEDDER_PROVIDER=openai EMBEDDER_MODEL=text-embedding-3-small EMBEDDER_API_KEY=sk-proj-...your-api-key ${toolName} ${toKebabCase(getTableNames(tables[0]).singularName)} search "my query" --auto-embed`,
424+
],
425+
},
426+
],
427+
}),
428+
});
429+
}
430+
373431
// Table references
374432
for (const table of tables) {
375433
const { singularName } = getTableNames(table);
@@ -989,6 +1047,68 @@ export function generateMultiTargetSkills(
9891047
}),
9901048
});
9911049

1050+
// Embedder reference (generated once when any target has tables with Vector fields)
1051+
const allTargetTables = targets.flatMap((t) => t.tables);
1052+
const hasEmbeddings = allTargetTables.some((t) =>
1053+
categorizeSpecialFields(t, registry).some((g) => g.category === 'embedding'),
1054+
);
1055+
if (hasEmbeddings) {
1056+
const firstTableName = allTargetTables.length > 0
1057+
? toKebabCase(getTableNames(allTargetTables[0]).singularName)
1058+
: 'model';
1059+
commonReferenceNames.push('embedder');
1060+
files.push({
1061+
fileName: `${commonSkillName}/references/embedder.md`,
1062+
content: buildSkillReference({
1063+
title: 'Embedder Configuration',
1064+
description:
1065+
`Configure text-to-vector embedding for \`--auto-embed\` support in ${toolName}.\n\n` +
1066+
'When an embedder is configured, you can pass plain text to vector fields and ' +
1067+
'the CLI will automatically convert it to an embedding vector.\n\n' +
1068+
'**Supported providers:** ollama, openai\n\n' +
1069+
'**Configuration methods:** appstash config (persisted per-context) or environment variables',
1070+
usage: [
1071+
`# Configure via appstash config (persisted per-context)`,
1072+
`${toolName} ${builtinNames.config} set embedder.provider <provider>`,
1073+
`${toolName} ${builtinNames.config} set embedder.model <model>`,
1074+
`${toolName} ${builtinNames.config} set embedder.baseUrl <url>`,
1075+
'',
1076+
`# Or configure via environment variables`,
1077+
`EMBEDDER_PROVIDER=<provider> EMBEDDER_MODEL=<model> EMBEDDER_BASE_URL=<url> ${toolName} <command>`,
1078+
],
1079+
examples: [
1080+
{
1081+
description: 'Ollama with nomic-embed-text (open-source, local)',
1082+
code: [
1083+
`# Start Ollama locally and pull the model`,
1084+
`ollama pull nomic-embed-text`,
1085+
'',
1086+
`# Register the embedder`,
1087+
`${toolName} ${builtinNames.config} set embedder.provider ollama`,
1088+
`${toolName} ${builtinNames.config} set embedder.model nomic-embed-text`,
1089+
`${toolName} ${builtinNames.config} set embedder.baseUrl http://localhost:11434`,
1090+
'',
1091+
`# Now use --auto-embed with any vector field`,
1092+
`${toolName} ${targets[0]?.name ? `${targets[0].name}:` : ''}${firstTableName} search "my query" --auto-embed`,
1093+
],
1094+
},
1095+
{
1096+
description: 'OpenAI with an API key',
1097+
code: [
1098+
`# Register the embedder`,
1099+
`${toolName} ${builtinNames.config} set embedder.provider openai`,
1100+
`${toolName} ${builtinNames.config} set embedder.model text-embedding-3-small`,
1101+
`${toolName} ${builtinNames.config} set embedder.apiKey sk-proj-...your-api-key`,
1102+
'',
1103+
`# Or use environment variables`,
1104+
`EMBEDDER_PROVIDER=openai EMBEDDER_MODEL=text-embedding-3-small EMBEDDER_API_KEY=sk-proj-...your-api-key ${toolName} ${targets[0]?.name ? `${targets[0].name}:` : ''}${firstTableName} search "my query" --auto-embed`,
1105+
],
1106+
},
1107+
],
1108+
}),
1109+
});
1110+
}
1111+
9921112
// Common SKILL.md
9931113
files.push({
9941114
fileName: `${commonSkillName}/SKILL.md`,

0 commit comments

Comments
 (0)