@mytechtoday/augment-extensions 0.7.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/AGENTS.md +265 -232
  2. package/README.md +956 -771
  3. package/augment-extensions/coding-standards/bash/README.md +196 -196
  4. package/augment-extensions/coding-standards/bash/module.json +163 -163
  5. package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
  6. package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
  7. package/augment-extensions/coding-standards/css/README.md +40 -40
  8. package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
  9. package/augment-extensions/coding-standards/css/module.json +44 -44
  10. package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
  11. package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
  12. package/augment-extensions/coding-standards/html/README.md +40 -40
  13. package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
  14. package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
  15. package/augment-extensions/coding-standards/html/module.json +44 -44
  16. package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
  17. package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
  18. package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
  19. package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
  20. package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
  21. package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
  22. package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
  23. package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
  24. package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
  25. package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
  26. package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
  27. package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
  28. package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
  29. package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
  30. package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
  31. package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
  32. package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
  33. package/augment-extensions/coding-standards/js/README.md +46 -46
  34. package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
  35. package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
  36. package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
  37. package/augment-extensions/coding-standards/js/module.json +49 -49
  38. package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
  39. package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
  40. package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
  41. package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
  42. package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
  43. package/augment-extensions/coding-standards/php/README.md +248 -248
  44. package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
  45. package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
  46. package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
  47. package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
  48. package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
  49. package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
  50. package/augment-extensions/coding-standards/php/module.json +166 -166
  51. package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
  52. package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
  53. package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
  54. package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
  55. package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
  56. package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
  57. package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
  58. package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
  59. package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
  60. package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
  61. package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
  62. package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
  63. package/augment-extensions/coding-standards/php/rules/security.md +358 -358
  64. package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
  65. package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
  66. package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
  67. package/augment-extensions/coding-standards/powershell/README.md +154 -154
  68. package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
  69. package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
  70. package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
  71. package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
  72. package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
  73. package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
  74. package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
  75. package/augment-extensions/coding-standards/powershell/module.json +165 -165
  76. package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
  77. package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
  78. package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
  79. package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
  80. package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
  81. package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
  82. package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
  83. package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
  84. package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
  85. package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
  86. package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
  87. package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
  88. package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
  89. package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
  90. package/augment-extensions/coding-standards/python/README.md +48 -48
  91. package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
  92. package/augment-extensions/coding-standards/python/module.json +30 -30
  93. package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
  94. package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
  95. package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
  96. package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
  97. package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
  98. package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
  99. package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
  100. package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
  101. package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
  102. package/augment-extensions/coding-standards/react/README.md +45 -45
  103. package/augment-extensions/coding-standards/react/module.json +27 -27
  104. package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
  105. package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
  106. package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
  107. package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
  108. package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
  109. package/augment-extensions/coding-standards/typescript/README.md +45 -45
  110. package/augment-extensions/coding-standards/typescript/module.json +27 -27
  111. package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
  112. package/augment-extensions/collections/html-css-js/README.md +82 -82
  113. package/augment-extensions/collections/html-css-js/collection.json +41 -41
  114. package/augment-extensions/domain-rules/api-design/README.md +41 -41
  115. package/augment-extensions/domain-rules/api-design/module.json +27 -27
  116. package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
  117. package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
  118. package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
  119. package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
  120. package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
  121. package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
  122. package/augment-extensions/domain-rules/database/README.md +161 -161
  123. package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
  124. package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
  125. package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
  126. package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
  127. package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
  128. package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
  129. package/augment-extensions/domain-rules/database/module.json +28 -28
  130. package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
  131. package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
  132. package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
  133. package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
  134. package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
  135. package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
  136. package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
  137. package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
  138. package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
  139. package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
  140. package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
  141. package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
  142. package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
  143. package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
  144. package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
  145. package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
  146. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
  147. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
  148. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
  149. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
  150. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
  151. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
  152. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
  153. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
  154. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
  155. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
  156. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
  157. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
  158. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
  159. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
  160. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
  161. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
  162. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
  163. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
  164. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
  165. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
  166. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
  167. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
  168. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
  169. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
  170. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
  171. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
  172. package/augment-extensions/domain-rules/mcp/README.md +150 -150
  173. package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
  174. package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
  175. package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
  176. package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
  177. package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
  178. package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
  179. package/augment-extensions/domain-rules/mcp/module.json +49 -49
  180. package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
  181. package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
  182. package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
  183. package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
  184. package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
  185. package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
  186. package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
  187. package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
  188. package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
  189. package/augment-extensions/domain-rules/security/README.md +41 -41
  190. package/augment-extensions/domain-rules/security/module.json +28 -28
  191. package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
  192. package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
  193. package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
  194. package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
  195. package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
  196. package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
  197. package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
  198. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
  199. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
  200. package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
  201. package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
  202. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
  203. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
  204. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
  205. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
  206. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
  207. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
  208. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
  209. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
  210. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
  211. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
  212. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
  213. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
  214. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
  215. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
  216. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
  217. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
  218. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
  219. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
  220. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
  221. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
  222. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
  223. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
  224. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
  225. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
  226. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
  227. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
  228. package/augment-extensions/domain-rules/wordpress/README.md +163 -163
  229. package/augment-extensions/domain-rules/wordpress/module.json +32 -32
  230. package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
  231. package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
  232. package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
  233. package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
  234. package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
  235. package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
  236. package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
  237. package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
  238. package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
  239. package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
  240. package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
  241. package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
  242. package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
  243. package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
  244. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
  245. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
  246. package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
  247. package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
  248. package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
  249. package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
  250. package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
  251. package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
  252. package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
  253. package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
  254. package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
  255. package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
  256. package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
  257. package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
  258. package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
  259. package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
  260. package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
  261. package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
  262. package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
  263. package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
  264. package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
  265. package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
  266. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
  267. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
  268. package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
  269. package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
  270. package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
  271. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
  272. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
  273. package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
  274. package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
  275. package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
  276. package/augment-extensions/examples/design-patterns/README.md +37 -37
  277. package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
  278. package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
  279. package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
  280. package/augment-extensions/examples/design-patterns/module.json +27 -27
  281. package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
  282. package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
  283. package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
  284. package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
  285. package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
  286. package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
  287. package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
  288. package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
  289. package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
  290. package/augment-extensions/workflows/beads/README.md +135 -135
  291. package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
  292. package/augment-extensions/workflows/beads/module.json +55 -55
  293. package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
  294. package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
  295. package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
  296. package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
  297. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
  298. package/augment-extensions/workflows/beads-integration/README.md +143 -143
  299. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
  300. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
  301. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
  302. package/augment-extensions/workflows/beads-integration/module.json +75 -75
  303. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
  304. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
  305. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
  306. package/augment-extensions/workflows/database/README.md +195 -195
  307. package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
  308. package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
  309. package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
  310. package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
  311. package/augment-extensions/workflows/database/module.json +42 -42
  312. package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
  313. package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
  314. package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
  315. package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
  316. package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
  317. package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
  318. package/augment-extensions/workflows/database/rules/workflow.md +458 -458
  319. package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
  320. package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
  321. package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
  322. package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
  323. package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
  324. package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
  325. package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
  326. package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
  327. package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
  328. package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
  329. package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
  330. package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
  331. package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
  332. package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
  333. package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
  334. package/augment-extensions/writing-standards/screenplay/README.md +339 -300
  335. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
  336. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
  337. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
  338. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
  339. package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
  340. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
  341. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
  342. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
  343. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
  344. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
  345. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
  346. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
  347. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
  348. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
  349. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
  350. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
  351. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
  352. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
  353. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
  354. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
  355. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
  356. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
  357. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
  358. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
  359. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
  360. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
  361. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
  362. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
  363. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
  364. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
  365. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
  366. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
  367. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
  368. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
  369. package/augment-extensions/writing-standards/screenplay/module.json +124 -124
  370. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
  371. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
  372. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
  373. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
  374. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
  375. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
  376. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
  377. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
  378. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
  379. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
  380. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
  381. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
  382. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
  383. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
  384. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
  385. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
  386. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
  387. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
  388. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
  389. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
  390. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
  391. package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
  392. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
  393. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
  394. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
  395. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
  396. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
  397. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
  398. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
  399. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
  400. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
  401. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
  402. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
  403. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
  404. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
  405. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
  406. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
  407. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
  408. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
  409. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
  410. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
  411. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
  412. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
  413. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
  414. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
  415. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
  416. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
  417. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
  418. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
  419. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
  420. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
  421. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
  422. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
  423. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
  424. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
  425. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
  426. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
  427. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
  428. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
  429. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
  430. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
  431. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
  432. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
  433. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
  434. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
  435. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
  436. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
  437. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
  438. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
  439. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
  440. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
  441. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
  442. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
  443. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
  444. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
  445. package/cli/MODULES.md +302 -302
  446. package/cli/dist/cli.js +109 -22
  447. package/cli/dist/cli.js.map +1 -1
  448. package/cli/dist/commands/gui.d.ts.map +1 -1
  449. package/cli/dist/commands/gui.js +54 -6
  450. package/cli/dist/commands/gui.js.map +1 -1
  451. package/cli/dist/commands/init.d.ts.map +1 -1
  452. package/cli/dist/commands/init.js +76 -23
  453. package/cli/dist/commands/init.js.map +1 -1
  454. package/cli/dist/commands/self-remove.d.ts.map +1 -1
  455. package/cli/dist/commands/self-remove.js +48 -74
  456. package/cli/dist/commands/self-remove.js.map +1 -1
  457. package/cli/dist/commands/show.d.ts +11 -0
  458. package/cli/dist/commands/show.d.ts.map +1 -1
  459. package/cli/dist/commands/show.js +120 -0
  460. package/cli/dist/commands/show.js.map +1 -1
  461. package/cli/dist/commands/showCompleted.d.ts +21 -0
  462. package/cli/dist/commands/showCompleted.d.ts.map +1 -0
  463. package/cli/dist/commands/showCompleted.js +225 -0
  464. package/cli/dist/commands/showCompleted.js.map +1 -0
  465. package/cli/dist/commands/skill.js +88 -88
  466. package/cli/dist/commands/update.d.ts +2 -0
  467. package/cli/dist/commands/update.d.ts.map +1 -1
  468. package/cli/dist/commands/update.js +67 -1
  469. package/cli/dist/commands/update.js.map +1 -1
  470. package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
  471. package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
  472. package/cli/dist/utils/beadsCompletedChecker.js +198 -0
  473. package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
  474. package/cli/dist/utils/catalog-sync.js +13 -13
  475. package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
  476. package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
  477. package/cli/dist/utils/extractCommandHelp.js +250 -0
  478. package/cli/dist/utils/extractCommandHelp.js.map +1 -0
  479. package/cli/dist/utils/install-rules.js +55 -55
  480. package/cli/dist/utils/mcp-integration.js +44 -44
  481. package/cli/dist/utils/rule-install-hooks.js +8 -8
  482. package/modules.md +667 -630
  483. package/package.json +85 -85
@@ -1,858 +1,858 @@
1
- # Vector Embeddings
2
-
3
- ## Overview
4
-
5
- This document covers vector embedding fundamentals, including embedding models (OpenAI, Cohere, sentence-transformers), embedding dimensions, chunking strategies, metadata storage, embedding updates, versioning, batch processing, and cost optimization.
6
-
7
- ---
8
-
9
- ## What are Vector Embeddings?
10
-
11
- ### Definition
12
-
13
- **Vector Embedding**: A numerical representation of data (text, images, audio) as a high-dimensional vector
14
-
15
- **Key Concepts:**
16
- - Converts unstructured data to structured vectors
17
- - Captures semantic meaning in numerical form
18
- - Similar items have similar embeddings (close in vector space)
19
- - Enables mathematical operations on meaning
20
-
21
- **Example:**
22
- ```
23
- Text: "The cat sat on the mat"
24
- Embedding: [0.234, -0.567, 0.891, ..., 0.123] # 1536 dimensions
25
-
26
- Text: "A feline rested on the rug"
27
- Embedding: [0.241, -0.553, 0.879, ..., 0.118] # Similar vector!
28
- ```
29
-
30
- ### How Embeddings Work
31
-
32
- **1. Training:**
33
- - ML models trained on large datasets
34
- - Learn to represent semantic meaning as vectors
35
- - Similar meanings → similar vectors
36
-
37
- **2. Generation:**
38
- - Input data (text, image, etc.)
39
- - Model processes input
40
- - Outputs fixed-size vector
41
-
42
- **3. Usage:**
43
- - Store vectors in vector database
44
- - Compare vectors using distance metrics
45
- - Find similar items by vector similarity
46
-
47
- ---
48
-
49
- ## Embedding Models
50
-
51
- ### Popular Embedding Models
52
-
53
- **OpenAI Embeddings**
54
- - **Model**: `text-embedding-3-small`, `text-embedding-3-large`
55
- - **Dimensions**: 1536 (small), 3072 (large)
56
- - **Max Input**: 8191 tokens
57
- - **Cost**: $0.02 / 1M tokens (small), $0.13 / 1M tokens (large)
58
- - **Best for**: General-purpose text embeddings, high quality
59
- - **API**: OpenAI API (requires API key)
60
-
61
- ```python
62
- from openai import OpenAI
63
-
64
- client = OpenAI(api_key="your-api-key")
65
-
66
- response = client.embeddings.create(
67
- model="text-embedding-3-small",
68
- input="Your text here"
69
- )
70
-
71
- embedding = response.data[0].embedding # 1536-dimensional vector
72
- ```
73
-
74
- **Cohere Embeddings**
75
- - **Model**: `embed-english-v3.0`, `embed-multilingual-v3.0`
76
- - **Dimensions**: 1024 (default), configurable
77
- - **Max Input**: 512 tokens
78
- - **Cost**: $0.10 / 1M tokens
79
- - **Best for**: Multilingual support, semantic search
80
- - **API**: Cohere API (requires API key)
81
-
82
- ```python
83
- import cohere
84
-
85
- co = cohere.Client("your-api-key")
86
-
87
- response = co.embed(
88
- texts=["Your text here"],
89
- model="embed-english-v3.0",
90
- input_type="search_document" # or "search_query"
91
- )
92
-
93
- embedding = response.embeddings[0] # 1024-dimensional vector
94
- ```
95
-
96
- **Sentence Transformers (Open Source)**
97
- - **Models**: `all-MiniLM-L6-v2`, `all-mpnet-base-v2`, `multi-qa-mpnet-base-dot-v1`
98
- - **Dimensions**: 384 (MiniLM), 768 (mpnet)
99
- - **Max Input**: 256-512 tokens (model-dependent)
100
- - **Cost**: Free (self-hosted)
101
- - **Best for**: Self-hosting, cost optimization, privacy
102
- - **Library**: Hugging Face Transformers
103
-
104
- ```python
105
- from sentence_transformers import SentenceTransformer
106
-
107
- model = SentenceTransformer('all-MiniLM-L6-v2')
108
-
109
- embedding = model.encode("Your text here") # 384-dimensional vector
110
- ```
111
-
112
- **Voyage AI**
113
- - **Model**: `voyage-2`, `voyage-code-2`
114
- - **Dimensions**: 1024
115
- - **Max Input**: 16000 tokens
116
- - **Cost**: $0.12 / 1M tokens
117
- - **Best for**: Long documents, code embeddings
118
- - **API**: Voyage AI API
119
-
120
- **Google Vertex AI (PaLM)**
121
- - **Model**: `textembedding-gecko`
122
- - **Dimensions**: 768
123
- - **Max Input**: 3072 tokens
124
- - **Cost**: $0.025 / 1M tokens
125
- - **Best for**: Google Cloud users
126
- - **API**: Google Cloud Vertex AI
127
-
128
- ### Model Selection Criteria
129
-
130
- | Model | Dimensions | Quality | Cost | Speed | Best For |
131
- |-------|------------|---------|------|-------|----------|
132
- | OpenAI (large) | 3072 | Highest | High | Medium | Production, high quality |
133
- | OpenAI (small) | 1536 | High | Medium | Fast | Production, balanced |
134
- | Cohere | 1024 | High | Medium | Fast | Multilingual, semantic search |
135
- | Sentence Transformers | 384-768 | Medium | Free | Fast | Self-hosting, cost optimization |
136
- | Voyage AI | 1024 | High | Medium | Medium | Long documents, code |
137
-
138
- **Recommendation**:
139
- - **Production**: OpenAI `text-embedding-3-small` (balanced quality/cost)
140
- - **Self-hosted**: Sentence Transformers `all-mpnet-base-v2` (best quality)
141
- - **Multilingual**: Cohere `embed-multilingual-v3.0`
142
- - **Code**: Voyage AI `voyage-code-2`
143
-
144
- ---
145
-
146
- ## Embedding Dimensions
147
-
148
- ### Understanding Dimensions
149
-
150
- **Dimension**: Number of values in the embedding vector
151
-
152
- **Trade-offs:**
153
- - **Higher dimensions** (1536, 3072):
154
- - More expressive (capture more nuance)
155
- - Better quality (more accurate similarity)
156
- - Slower search (more computations)
157
- - More storage (larger vectors)
158
-
159
- - **Lower dimensions** (384, 768):
160
- - Less expressive (less nuance)
161
- - Lower quality (less accurate)
162
- - Faster search (fewer computations)
163
- - Less storage (smaller vectors)
164
-
165
- ### Dimension Recommendations
166
-
167
- **Small datasets (< 100k documents):**
168
- - Use higher dimensions (1536+)
169
- - Quality > speed
170
- - Storage cost is minimal
171
-
172
- **Large datasets (> 1M documents):**
173
- - Consider lower dimensions (384-768)
174
- - Speed and storage matter
175
- - Quality may still be acceptable
176
-
177
- **Real-time applications:**
178
- - Use lower dimensions (384-768)
179
- - Latency is critical
180
- - Batch pre-compute embeddings
181
-
182
- ---
183
-
184
- ## Chunking Strategies
185
-
186
- ### Why Chunking Matters
187
-
188
- **Problem**: Documents are often too long for embedding models (max 512-8191 tokens)
189
-
190
- **Solution**: Split documents into smaller chunks, embed each chunk separately
191
-
192
- **Benefits:**
193
- - Fit within model token limits
194
- - More granular search (find specific sections)
195
- - Better context matching
196
-
197
- **Challenges:**
198
- - Losing context across chunks
199
- - Determining optimal chunk size
200
- - Handling chunk boundaries
201
-
202
- ### Chunking Methods
203
-
204
- **Method 1: Fixed-Size Chunking**
205
- ```python
206
- def chunk_by_tokens(text, chunk_size=512, overlap=50):
207
- """Split text into fixed-size chunks with overlap"""
208
- tokens = tokenize(text)
209
- chunks = []
210
-
211
- for i in range(0, len(tokens), chunk_size - overlap):
212
- chunk = tokens[i:i + chunk_size]
213
- chunks.append(detokenize(chunk))
214
-
215
- return chunks
216
-
217
- # Example
218
- text = "Long document..."
219
- chunks = chunk_by_tokens(text, chunk_size=512, overlap=50)
220
- ```
221
-
222
- **Pros**: Simple, predictable chunk sizes
223
- **Cons**: May split sentences/paragraphs awkwardly
224
-
225
- **Method 2: Sentence-Based Chunking**
226
- ```python
227
- def chunk_by_sentences(text, max_tokens=512):
228
- """Split text by sentences, group until max_tokens"""
229
- sentences = split_into_sentences(text)
230
- chunks = []
231
- current_chunk = []
232
- current_tokens = 0
233
-
234
- for sentence in sentences:
235
- sentence_tokens = count_tokens(sentence)
236
-
237
- if current_tokens + sentence_tokens > max_tokens:
238
- chunks.append(" ".join(current_chunk))
239
- current_chunk = [sentence]
240
- current_tokens = sentence_tokens
241
- else:
242
- current_chunk.append(sentence)
243
- current_tokens += sentence_tokens
244
-
245
- if current_chunk:
246
- chunks.append(" ".join(current_chunk))
247
-
248
- return chunks
249
- ```
250
-
251
- **Pros**: Preserves sentence boundaries
252
- **Cons**: Variable chunk sizes
253
-
254
- **Method 3: Paragraph-Based Chunking**
255
- ```python
256
- def chunk_by_paragraphs(text, max_tokens=512):
257
- """Split text by paragraphs, group until max_tokens"""
258
- paragraphs = text.split("\n\n")
259
- chunks = []
260
- current_chunk = []
261
- current_tokens = 0
262
-
263
- for para in paragraphs:
264
- para_tokens = count_tokens(para)
265
-
266
- if para_tokens > max_tokens:
267
- # Split large paragraph by sentences
268
- chunks.extend(chunk_by_sentences(para, max_tokens))
269
- elif current_tokens + para_tokens > max_tokens:
270
- chunks.append("\n\n".join(current_chunk))
271
- current_chunk = [para]
272
- current_tokens = para_tokens
273
- else:
274
- current_chunk.append(para)
275
- current_tokens += para_tokens
276
-
277
- if current_chunk:
278
- chunks.append("\n\n".join(current_chunk))
279
-
280
- return chunks
281
- ```
282
-
283
- **Pros**: Preserves logical structure
284
- **Cons**: More complex, variable sizes
285
-
286
- **Method 4: Semantic Chunking**
287
- ```python
288
- def chunk_by_semantics(text, max_tokens=512):
289
- """Split text by semantic similarity"""
290
- sentences = split_into_sentences(text)
291
- embeddings = [embed(s) for s in sentences]
292
-
293
- chunks = []
294
- current_chunk = [sentences[0]]
295
-
296
- for i in range(1, len(sentences)):
297
- similarity = cosine_similarity(embeddings[i-1], embeddings[i])
298
-
299
- if similarity < 0.7 or count_tokens(" ".join(current_chunk)) > max_tokens:
300
- chunks.append(" ".join(current_chunk))
301
- current_chunk = [sentences[i]]
302
- else:
303
- current_chunk.append(sentences[i])
304
-
305
- if current_chunk:
306
- chunks.append(" ".join(current_chunk))
307
-
308
- return chunks
309
- ```
310
-
311
- **Pros**: Preserves semantic coherence
312
- **Cons**: Expensive (requires embeddings), complex
313
-
314
- ### Chunking Best Practices
315
-
316
- **Chunk Size:**
317
- - **Small chunks (128-256 tokens)**: More granular, better for specific queries
318
- - **Medium chunks (256-512 tokens)**: Balanced, good default
319
- - **Large chunks (512-1024 tokens)**: More context, better for broad queries
320
-
321
- **Overlap:**
322
- - Use 10-20% overlap to preserve context across boundaries
323
- - Example: 512 token chunks with 50 token overlap
324
-
325
- **Metadata:**
326
- - Store chunk metadata (document ID, chunk index, position)
327
- - Enable reconstruction of original document
328
- - Track chunk relationships
329
-
330
- ```python
331
- # Example with metadata
332
- chunks = [
333
- {
334
- "text": "First chunk...",
335
- "embedding": [0.1, 0.2, ...],
336
- "metadata": {
337
- "document_id": "doc123",
338
- "chunk_index": 0,
339
- "total_chunks": 5,
340
- "source": "article.pdf",
341
- "page": 1
342
- }
343
- },
344
- # ...
345
- ]
346
- ```
347
-
348
- ---
349
-
350
- ## Metadata Storage
351
-
352
- ### Why Store Metadata?
353
-
354
- **Metadata**: Additional information stored with embeddings
355
-
356
- **Benefits:**
357
- - Filter search results (by date, category, author, etc.)
358
- - Reconstruct original content
359
- - Track embedding provenance
360
- - Enable hybrid search
361
-
362
- ### Metadata Schema
363
-
364
- **Essential Metadata:**
365
- ```python
366
- {
367
- "id": "unique-id",
368
- "text": "Original text content",
369
- "embedding": [0.1, 0.2, ...],
370
- "metadata": {
371
- # Source information
372
- "source": "document.pdf",
373
- "source_type": "pdf",
374
- "url": "https://example.com/doc",
375
-
376
- # Content information
377
- "title": "Document Title",
378
- "author": "John Doe",
379
- "category": "technology",
380
- "tags": ["ai", "ml", "nlp"],
381
-
382
- # Temporal information
383
- "created_at": "2024-01-15T10:00:00Z",
384
- "updated_at": "2024-01-20T15:30:00Z",
385
- "published_date": "2024-01-10",
386
-
387
- # Chunking information
388
- "chunk_index": 0,
389
- "total_chunks": 5,
390
- "chunk_size": 512,
391
-
392
- # Embedding information
393
- "embedding_model": "text-embedding-3-small",
394
- "embedding_version": "1.0",
395
- "embedding_date": "2024-01-15T10:00:00Z"
396
- }
397
- }
398
- ```
399
-
400
- ### Metadata Filtering
401
-
402
- **Example: Filter by category and date**
403
- ```python
404
- # Pinecone
405
- results = index.query(
406
- vector=query_embedding,
407
- top_k=10,
408
- filter={
409
- "category": {"$eq": "technology"},
410
- "published_date": {"$gte": "2024-01-01"}
411
- }
412
- )
413
-
414
- # Weaviate
415
- results = client.query.get("Document", ["text", "title"]) \
416
- .with_near_vector({"vector": query_embedding}) \
417
- .with_where({
418
- "operator": "And",
419
- "operands": [
420
- {"path": ["category"], "operator": "Equal", "valueString": "technology"},
421
- {"path": ["published_date"], "operator": "GreaterThanEqual", "valueString": "2024-01-01"}
422
- ]
423
- }) \
424
- .with_limit(10) \
425
- .do()
426
- ```
427
-
428
- ---
429
-
430
- ## Embedding Updates
431
-
432
- ### When to Update Embeddings
433
-
434
- **Update embeddings when:**
435
- - ✅ Content changes significantly
436
- - ✅ Embedding model is upgraded
437
- - ✅ Embedding quality is poor
438
- - ✅ New metadata is added
439
-
440
- **Don't update when:**
441
- - ❌ Minor typo fixes
442
- - ❌ Metadata-only changes
443
- - ❌ Formatting changes
444
-
445
- ### Update Strategies
446
-
447
- **Strategy 1: Full Reindex**
448
- ```python
449
- def full_reindex(documents, index):
450
- """Re-embed all documents"""
451
- for doc in documents:
452
- embedding = embed(doc.text)
453
- index.upsert(id=doc.id, vector=embedding, metadata=doc.metadata)
454
- ```
455
-
456
- **Pros**: Clean, consistent
457
- **Cons**: Expensive, time-consuming
458
-
459
- **Strategy 2: Incremental Update**
460
- ```python
461
- def incremental_update(changed_documents, index):
462
- """Update only changed documents"""
463
- for doc in changed_documents:
464
- embedding = embed(doc.text)
465
- index.upsert(id=doc.id, vector=embedding, metadata=doc.metadata)
466
- ```
467
-
468
- **Pros**: Efficient, fast
469
- **Cons**: May have inconsistent embeddings (different models)
470
-
471
- **Strategy 3: Versioned Embeddings**
472
- ```python
473
- def versioned_update(documents, index, new_version):
474
- """Create new version of embeddings"""
475
- for doc in documents:
476
- embedding = embed(doc.text)
477
- index.upsert(
478
- id=f"{doc.id}_v{new_version}",
479
- vector=embedding,
480
- metadata={**doc.metadata, "version": new_version}
481
- )
482
-
483
- # Optionally delete old versions
484
- # delete_old_versions(index, old_version)
485
- ```
486
-
487
- **Pros**: Rollback capability, A/B testing
488
- **Cons**: More storage, complex management
489
-
490
- ---
491
-
492
- ## Embedding Versioning
493
-
494
- ### Why Version Embeddings?
495
-
496
- **Reasons:**
497
- - Track which model generated embeddings
498
- - Enable rollback if new model performs poorly
499
- - A/B test different embedding models
500
- - Maintain consistency across updates
501
-
502
- ### Versioning Schema
503
-
504
- ```python
505
- {
506
- "id": "doc123",
507
- "text": "Document content",
508
- "embedding": [0.1, 0.2, ...],
509
- "metadata": {
510
- "embedding_model": "text-embedding-3-small",
511
- "embedding_version": "v2",
512
- "embedding_date": "2024-01-15T10:00:00Z",
513
- "previous_versions": ["v1"]
514
- }
515
- }
516
- ```
517
-
518
- ### Version Migration
519
-
520
- ```python
521
- def migrate_embeddings(index, old_version, new_version, new_model):
522
- """Migrate embeddings to new version"""
523
- # Fetch all documents with old version
524
- docs = index.fetch(filter={"embedding_version": old_version})
525
-
526
- # Re-embed with new model
527
- for doc in docs:
528
- new_embedding = embed(doc.text, model=new_model)
529
-
530
- # Update with new version
531
- index.upsert(
532
- id=doc.id,
533
- vector=new_embedding,
534
- metadata={
535
- **doc.metadata,
536
- "embedding_model": new_model,
537
- "embedding_version": new_version,
538
- "embedding_date": datetime.now().isoformat(),
539
- "previous_versions": doc.metadata.get("previous_versions", []) + [old_version]
540
- }
541
- )
542
- ```
543
-
544
- ---
545
-
546
- ## Batch Processing
547
-
548
- ### Why Batch Process?
549
-
550
- **Benefits:**
551
- - Faster processing (parallel requests)
552
- - Lower cost (batch discounts)
553
- - Better resource utilization
554
- - Reduced API rate limiting
555
-
556
- ### Batch Embedding
557
-
558
- **Example with OpenAI:**
559
- ```python
560
- from openai import OpenAI
561
-
562
- client = OpenAI(api_key="your-api-key")
563
-
564
- def batch_embed(texts, batch_size=100):
565
- """Embed texts in batches"""
566
- embeddings = []
567
-
568
- for i in range(0, len(texts), batch_size):
569
- batch = texts[i:i + batch_size]
570
-
571
- response = client.embeddings.create(
572
- model="text-embedding-3-small",
573
- input=batch
574
- )
575
-
576
- batch_embeddings = [item.embedding for item in response.data]
577
- embeddings.extend(batch_embeddings)
578
-
579
- return embeddings
580
-
581
- # Usage
582
- texts = ["Text 1", "Text 2", ..., "Text 1000"]
583
- embeddings = batch_embed(texts, batch_size=100)
584
- ```
585
-
586
- **Example with Sentence Transformers:**
587
- ```python
588
- from sentence_transformers import SentenceTransformer
589
-
590
- model = SentenceTransformer('all-MiniLM-L6-v2')
591
-
592
- def batch_embed_local(texts, batch_size=32):
593
- """Embed texts in batches (local model)"""
594
- embeddings = model.encode(
595
- texts,
596
- batch_size=batch_size,
597
- show_progress_bar=True
598
- )
599
- return embeddings
600
-
601
- # Usage
602
- texts = ["Text 1", "Text 2", ..., "Text 10000"]
603
- embeddings = batch_embed_local(texts, batch_size=32)
604
- ```
605
-
606
- ### Batch Upsert
607
-
608
- ```python
609
- def batch_upsert(index, documents, batch_size=100):
610
- """Upsert documents in batches"""
611
- for i in range(0, len(documents), batch_size):
612
- batch = documents[i:i + batch_size]
613
-
614
- # Prepare batch data
615
- ids = [doc.id for doc in batch]
616
- vectors = [doc.embedding for doc in batch]
617
- metadata = [doc.metadata for doc in batch]
618
-
619
- # Upsert batch
620
- index.upsert(vectors=list(zip(ids, vectors, metadata)))
621
- ```
622
-
623
- ---
624
-
625
- ## Cost Optimization
626
-
627
- ### Embedding Cost Factors
628
-
629
- **1. Model Selection:**
630
- - OpenAI small: $0.02 / 1M tokens
631
- - OpenAI large: $0.13 / 1M tokens
632
- - Cohere: $0.10 / 1M tokens
633
- - Sentence Transformers: Free (self-hosted)
634
-
635
- **2. Token Count:**
636
- - Longer texts = more tokens = higher cost
637
- - Chunking strategy affects total tokens
638
-
639
- **3. Update Frequency:**
640
- - Frequent updates = higher cost
641
- - Cache embeddings when possible
642
-
643
- ### Cost Optimization Strategies
644
-
645
- **Strategy 1: Use Smaller Models**
646
- ```python
647
- # Instead of text-embedding-3-large (expensive)
648
- # Use text-embedding-3-small (cheaper, still good quality)
649
- model = "text-embedding-3-small"
650
- ```
651
-
652
- **Strategy 2: Self-Host Open Source Models**
653
- ```python
654
- # Free (after infrastructure cost)
655
- from sentence_transformers import SentenceTransformer
656
- model = SentenceTransformer('all-MiniLM-L6-v2')
657
- ```
658
-
659
- **Strategy 3: Cache Embeddings**
660
- ```python
661
- import hashlib
662
- import json
663
-
664
- embedding_cache = {}
665
-
666
- def embed_with_cache(text, model):
667
- """Cache embeddings to avoid re-computation"""
668
- # Create cache key
669
- cache_key = hashlib.md5(f"{model}:{text}".encode()).hexdigest()
670
-
671
- # Check cache
672
- if cache_key in embedding_cache:
673
- return embedding_cache[cache_key]
674
-
675
- # Generate embedding
676
- embedding = embed(text, model)
677
-
678
- # Store in cache
679
- embedding_cache[cache_key] = embedding
680
-
681
- return embedding
682
- ```
683
-
684
- **Strategy 4: Batch Processing**
685
- ```python
686
- # Batch requests for better throughput and potential discounts
687
- embeddings = batch_embed(texts, batch_size=100)
688
- ```
689
-
690
- **Strategy 5: Optimize Chunking**
691
- ```python
692
- # Larger chunks = fewer embeddings = lower cost
693
- # But balance with search quality
694
- chunk_size = 512 # Instead of 256
695
- ```
696
-
697
- ### Cost Estimation
698
-
699
- ```python
700
- def estimate_embedding_cost(num_documents, avg_tokens_per_doc, model="text-embedding-3-small"):
701
- """Estimate embedding cost"""
702
- costs = {
703
- "text-embedding-3-small": 0.02 / 1_000_000,
704
- "text-embedding-3-large": 0.13 / 1_000_000,
705
- "embed-english-v3.0": 0.10 / 1_000_000
706
- }
707
-
708
- total_tokens = num_documents * avg_tokens_per_doc
709
- cost_per_token = costs.get(model, 0)
710
- total_cost = total_tokens * cost_per_token
711
-
712
- return {
713
- "total_tokens": total_tokens,
714
- "total_cost": total_cost,
715
- "cost_per_document": total_cost / num_documents
716
- }
717
-
718
- # Example
719
- estimate = estimate_embedding_cost(
720
- num_documents=100_000,
721
- avg_tokens_per_doc=500,
722
- model="text-embedding-3-small"
723
- )
724
- print(f"Total cost: ${estimate['total_cost']:.2f}")
725
- # Output: Total cost: $1.00
726
- ```
727
-
728
- ---
729
-
730
- ## Best Practices
731
-
732
- ### 1. Model Selection
733
-
734
- ✅ **DO:**
735
- - Use OpenAI for production (high quality, reliable)
736
- - Use Sentence Transformers for self-hosting (cost optimization)
737
- - Use Cohere for multilingual (best multilingual support)
738
- - Benchmark models on your data before choosing
739
-
740
- ❌ **DON'T:**
741
- - Mix embeddings from different models in same index
742
- - Choose model based on dimensions alone
743
- - Ignore cost implications
744
- - Skip model evaluation
745
-
746
- ### 2. Chunking
747
-
748
- ✅ **DO:**
749
- - Use 256-512 token chunks as default
750
- - Add 10-20% overlap between chunks
751
- - Preserve sentence/paragraph boundaries
752
- - Store chunk metadata (index, total chunks)
753
-
754
- ❌ **DON'T:**
755
- - Use chunks larger than model max tokens
756
- - Split mid-sentence without overlap
757
- - Ignore chunk boundaries
758
- - Forget to store chunk relationships
759
-
760
- ### 3. Metadata
761
-
762
- ✅ **DO:**
763
- - Store original text with embeddings
764
- - Include source, author, date, category
765
- - Track embedding model and version
766
- - Enable filtering by metadata
767
-
768
- ❌ **DON'T:**
769
- - Store only embeddings without metadata
770
- - Forget to version embeddings
771
- - Ignore temporal information
772
- - Skip source tracking
773
-
774
- ### 4. Updates
775
-
776
- ✅ **DO:**
777
- - Version embeddings for rollback
778
- - Update incrementally when possible
779
- - Cache embeddings to avoid re-computation
780
- - Monitor embedding quality over time
781
-
782
- ❌ **DON'T:**
783
- - Re-embed everything for minor changes
784
- - Mix old and new embeddings without versioning
785
- - Ignore embedding drift
786
- - Skip quality monitoring
787
-
788
- ### 5. Cost Optimization
789
-
790
- ✅ **DO:**
791
- - Batch embed documents
792
- - Cache embeddings
793
- - Use appropriate model for use case
794
- - Monitor and optimize token usage
795
-
796
- ❌ **DON'T:**
797
- - Embed one document at a time
798
- - Re-embed unnecessarily
799
- - Use expensive models when cheaper ones suffice
800
- - Ignore cost monitoring
801
-
802
- ---
803
-
804
- ## Common Pitfalls
805
-
806
- ### 1. Mixing Embedding Models
807
-
808
- **Problem**: Using different models for indexing and querying
809
-
810
- **Solution**: Use same model consistently
811
-
812
- ### 2. Poor Chunking
813
-
814
- **Problem**: Chunks too large (exceed token limit) or too small (lose context)
815
-
816
- **Solution**: Use 256-512 token chunks with overlap
817
-
818
- ### 3. Missing Metadata
819
-
820
- **Problem**: Can't filter or reconstruct original content
821
-
822
- **Solution**: Store comprehensive metadata with embeddings
823
-
824
- ### 4. No Versioning
825
-
826
- **Problem**: Can't track which model generated embeddings
827
-
828
- **Solution**: Version embeddings with model name and date
829
-
830
- ### 5. Inefficient Batch Processing
831
-
832
- **Problem**: Embedding one document at a time (slow, expensive)
833
-
834
- **Solution**: Batch embed documents (100+ at a time)
835
-
836
- ---
837
-
838
- ## Summary
839
-
840
- **Key Takeaways:**
841
- 1. Choose embedding model based on quality, cost, and use case
842
- 2. Use 256-512 token chunks with 10-20% overlap
843
- 3. Store comprehensive metadata (source, author, date, version)
844
- 4. Version embeddings for rollback and consistency
845
- 5. Batch process for efficiency and cost optimization
846
- 6. Cache embeddings to avoid re-computation
847
-
848
- **Model Recommendations:**
849
- - **Production**: OpenAI `text-embedding-3-small`
850
- - **Self-hosted**: Sentence Transformers `all-mpnet-base-v2`
851
- - **Multilingual**: Cohere `embed-multilingual-v3.0`
852
- - **Code**: Voyage AI `voyage-code-2`
853
-
854
- **Next Steps:**
855
- - See `vector-databases.md` for vector storage and search
856
- - See `vector-indexing.md` for index optimization
857
- - See `examples/vector-database-example.md` for complete implementation
858
-
1
+ # Vector Embeddings
2
+
3
+ ## Overview
4
+
5
+ This document covers vector embedding fundamentals, including embedding models (OpenAI, Cohere, sentence-transformers), embedding dimensions, chunking strategies, metadata storage, embedding updates, versioning, batch processing, and cost optimization.
6
+
7
+ ---
8
+
9
+ ## What are Vector Embeddings?
10
+
11
+ ### Definition
12
+
13
+ **Vector Embedding**: A numerical representation of data (text, images, audio) as a high-dimensional vector
14
+
15
+ **Key Concepts:**
16
+ - Converts unstructured data to structured vectors
17
+ - Captures semantic meaning in numerical form
18
+ - Similar items have similar embeddings (close in vector space)
19
+ - Enables mathematical operations on meaning
20
+
21
+ **Example:**
22
+ ```
23
+ Text: "The cat sat on the mat"
24
+ Embedding: [0.234, -0.567, 0.891, ..., 0.123] # 1536 dimensions
25
+
26
+ Text: "A feline rested on the rug"
27
+ Embedding: [0.241, -0.553, 0.879, ..., 0.118] # Similar vector!
28
+ ```
29
+
30
+ ### How Embeddings Work
31
+
32
+ **1. Training:**
33
+ - ML models trained on large datasets
34
+ - Learn to represent semantic meaning as vectors
35
+ - Similar meanings → similar vectors
36
+
37
+ **2. Generation:**
38
+ - Input data (text, image, etc.)
39
+ - Model processes input
40
+ - Outputs fixed-size vector
41
+
42
+ **3. Usage:**
43
+ - Store vectors in vector database
44
+ - Compare vectors using distance metrics
45
+ - Find similar items by vector similarity
46
+
47
+ ---
48
+
49
+ ## Embedding Models
50
+
51
+ ### Popular Embedding Models
52
+
53
+ **OpenAI Embeddings**
54
+ - **Model**: `text-embedding-3-small`, `text-embedding-3-large`
55
+ - **Dimensions**: 1536 (small), 3072 (large)
56
+ - **Max Input**: 8191 tokens
57
+ - **Cost**: $0.02 / 1M tokens (small), $0.13 / 1M tokens (large)
58
+ - **Best for**: General-purpose text embeddings, high quality
59
+ - **API**: OpenAI API (requires API key)
60
+
61
+ ```python
62
+ from openai import OpenAI
63
+
64
+ client = OpenAI(api_key="your-api-key")
65
+
66
+ response = client.embeddings.create(
67
+ model="text-embedding-3-small",
68
+ input="Your text here"
69
+ )
70
+
71
+ embedding = response.data[0].embedding # 1536-dimensional vector
72
+ ```
73
+
74
+ **Cohere Embeddings**
75
+ - **Model**: `embed-english-v3.0`, `embed-multilingual-v3.0`
76
+ - **Dimensions**: 1024 (default), configurable
77
+ - **Max Input**: 512 tokens
78
+ - **Cost**: $0.10 / 1M tokens
79
+ - **Best for**: Multilingual support, semantic search
80
+ - **API**: Cohere API (requires API key)
81
+
82
+ ```python
83
+ import cohere
84
+
85
+ co = cohere.Client("your-api-key")
86
+
87
+ response = co.embed(
88
+ texts=["Your text here"],
89
+ model="embed-english-v3.0",
90
+ input_type="search_document" # or "search_query"
91
+ )
92
+
93
+ embedding = response.embeddings[0] # 1024-dimensional vector
94
+ ```
95
+
96
+ **Sentence Transformers (Open Source)**
97
+ - **Models**: `all-MiniLM-L6-v2`, `all-mpnet-base-v2`, `multi-qa-mpnet-base-dot-v1`
98
+ - **Dimensions**: 384 (MiniLM), 768 (mpnet)
99
+ - **Max Input**: 256-512 tokens (model-dependent)
100
+ - **Cost**: Free (self-hosted)
101
+ - **Best for**: Self-hosting, cost optimization, privacy
102
+ - **Library**: Hugging Face Transformers
103
+
104
+ ```python
105
+ from sentence_transformers import SentenceTransformer
106
+
107
+ model = SentenceTransformer('all-MiniLM-L6-v2')
108
+
109
+ embedding = model.encode("Your text here") # 384-dimensional vector
110
+ ```
111
+
112
+ **Voyage AI**
113
+ - **Model**: `voyage-2`, `voyage-code-2`
114
+ - **Dimensions**: 1024
115
+ - **Max Input**: 16000 tokens
116
+ - **Cost**: $0.12 / 1M tokens
117
+ - **Best for**: Long documents, code embeddings
118
+ - **API**: Voyage AI API
119
+
120
+ **Google Vertex AI (PaLM)**
121
+ - **Model**: `textembedding-gecko`
122
+ - **Dimensions**: 768
123
+ - **Max Input**: 3072 tokens
124
+ - **Cost**: $0.025 / 1M tokens
125
+ - **Best for**: Google Cloud users
126
+ - **API**: Google Cloud Vertex AI
127
+
128
+ ### Model Selection Criteria
129
+
130
+ | Model | Dimensions | Quality | Cost | Speed | Best For |
131
+ |-------|------------|---------|------|-------|----------|
132
+ | OpenAI (large) | 3072 | Highest | High | Medium | Production, high quality |
133
+ | OpenAI (small) | 1536 | High | Medium | Fast | Production, balanced |
134
+ | Cohere | 1024 | High | Medium | Fast | Multilingual, semantic search |
135
+ | Sentence Transformers | 384-768 | Medium | Free | Fast | Self-hosting, cost optimization |
136
+ | Voyage AI | 1024 | High | Medium | Medium | Long documents, code |
137
+
138
+ **Recommendation**:
139
+ - **Production**: OpenAI `text-embedding-3-small` (balanced quality/cost)
140
+ - **Self-hosted**: Sentence Transformers `all-mpnet-base-v2` (best quality)
141
+ - **Multilingual**: Cohere `embed-multilingual-v3.0`
142
+ - **Code**: Voyage AI `voyage-code-2`
143
+
144
+ ---
145
+
146
+ ## Embedding Dimensions
147
+
148
+ ### Understanding Dimensions
149
+
150
+ **Dimension**: Number of values in the embedding vector
151
+
152
+ **Trade-offs:**
153
+ - **Higher dimensions** (1536, 3072):
154
+ - More expressive (capture more nuance)
155
+ - Better quality (more accurate similarity)
156
+ - Slower search (more computations)
157
+ - More storage (larger vectors)
158
+
159
+ - **Lower dimensions** (384, 768):
160
+ - Less expressive (less nuance)
161
+ - Lower quality (less accurate)
162
+ - Faster search (fewer computations)
163
+ - Less storage (smaller vectors)
164
+
165
+ ### Dimension Recommendations
166
+
167
+ **Small datasets (< 100k documents):**
168
+ - Use higher dimensions (1536+)
169
+ - Quality > speed
170
+ - Storage cost is minimal
171
+
172
+ **Large datasets (> 1M documents):**
173
+ - Consider lower dimensions (384-768)
174
+ - Speed and storage matter
175
+ - Quality may still be acceptable
176
+
177
+ **Real-time applications:**
178
+ - Use lower dimensions (384-768)
179
+ - Latency is critical
180
+ - Batch pre-compute embeddings
181
+
182
+ ---
183
+
184
+ ## Chunking Strategies
185
+
186
+ ### Why Chunking Matters
187
+
188
+ **Problem**: Documents are often too long for embedding models (max 512-8191 tokens)
189
+
190
+ **Solution**: Split documents into smaller chunks, embed each chunk separately
191
+
192
+ **Benefits:**
193
+ - Fit within model token limits
194
+ - More granular search (find specific sections)
195
+ - Better context matching
196
+
197
+ **Challenges:**
198
+ - Losing context across chunks
199
+ - Determining optimal chunk size
200
+ - Handling chunk boundaries
201
+
202
+ ### Chunking Methods
203
+
204
+ **Method 1: Fixed-Size Chunking**
205
+ ```python
206
+ def chunk_by_tokens(text, chunk_size=512, overlap=50):
207
+ """Split text into fixed-size chunks with overlap"""
208
+ tokens = tokenize(text)
209
+ chunks = []
210
+
211
+ for i in range(0, len(tokens), chunk_size - overlap):
212
+ chunk = tokens[i:i + chunk_size]
213
+ chunks.append(detokenize(chunk))
214
+
215
+ return chunks
216
+
217
+ # Example
218
+ text = "Long document..."
219
+ chunks = chunk_by_tokens(text, chunk_size=512, overlap=50)
220
+ ```
221
+
222
+ **Pros**: Simple, predictable chunk sizes
223
+ **Cons**: May split sentences/paragraphs awkwardly
224
+
225
+ **Method 2: Sentence-Based Chunking**
226
+ ```python
227
+ def chunk_by_sentences(text, max_tokens=512):
228
+ """Split text by sentences, group until max_tokens"""
229
+ sentences = split_into_sentences(text)
230
+ chunks = []
231
+ current_chunk = []
232
+ current_tokens = 0
233
+
234
+ for sentence in sentences:
235
+ sentence_tokens = count_tokens(sentence)
236
+
237
+ if current_tokens + sentence_tokens > max_tokens:
238
+ chunks.append(" ".join(current_chunk))
239
+ current_chunk = [sentence]
240
+ current_tokens = sentence_tokens
241
+ else:
242
+ current_chunk.append(sentence)
243
+ current_tokens += sentence_tokens
244
+
245
+ if current_chunk:
246
+ chunks.append(" ".join(current_chunk))
247
+
248
+ return chunks
249
+ ```
250
+
251
+ **Pros**: Preserves sentence boundaries
252
+ **Cons**: Variable chunk sizes
253
+
254
+ **Method 3: Paragraph-Based Chunking**
255
+ ```python
256
+ def chunk_by_paragraphs(text, max_tokens=512):
257
+ """Split text by paragraphs, group until max_tokens"""
258
+ paragraphs = text.split("\n\n")
259
+ chunks = []
260
+ current_chunk = []
261
+ current_tokens = 0
262
+
263
+ for para in paragraphs:
264
+ para_tokens = count_tokens(para)
265
+
266
+ if para_tokens > max_tokens:
267
+ # Split large paragraph by sentences
268
+ chunks.extend(chunk_by_sentences(para, max_tokens))
269
+ elif current_tokens + para_tokens > max_tokens:
270
+ chunks.append("\n\n".join(current_chunk))
271
+ current_chunk = [para]
272
+ current_tokens = para_tokens
273
+ else:
274
+ current_chunk.append(para)
275
+ current_tokens += para_tokens
276
+
277
+ if current_chunk:
278
+ chunks.append("\n\n".join(current_chunk))
279
+
280
+ return chunks
281
+ ```
282
+
283
+ **Pros**: Preserves logical structure
284
+ **Cons**: More complex, variable sizes
285
+
286
+ **Method 4: Semantic Chunking**
287
+ ```python
288
+ def chunk_by_semantics(text, max_tokens=512):
289
+ """Split text by semantic similarity"""
290
+ sentences = split_into_sentences(text)
291
+ embeddings = [embed(s) for s in sentences]
292
+
293
+ chunks = []
294
+ current_chunk = [sentences[0]]
295
+
296
+ for i in range(1, len(sentences)):
297
+ similarity = cosine_similarity(embeddings[i-1], embeddings[i])
298
+
299
+ if similarity < 0.7 or count_tokens(" ".join(current_chunk)) > max_tokens:
300
+ chunks.append(" ".join(current_chunk))
301
+ current_chunk = [sentences[i]]
302
+ else:
303
+ current_chunk.append(sentences[i])
304
+
305
+ if current_chunk:
306
+ chunks.append(" ".join(current_chunk))
307
+
308
+ return chunks
309
+ ```
310
+
311
+ **Pros**: Preserves semantic coherence
312
+ **Cons**: Expensive (requires embeddings), complex
313
+
314
+ ### Chunking Best Practices
315
+
316
+ **Chunk Size:**
317
+ - **Small chunks (128-256 tokens)**: More granular, better for specific queries
318
+ - **Medium chunks (256-512 tokens)**: Balanced, good default
319
+ - **Large chunks (512-1024 tokens)**: More context, better for broad queries
320
+
321
+ **Overlap:**
322
+ - Use 10-20% overlap to preserve context across boundaries
323
+ - Example: 512 token chunks with 50 token overlap
324
+
325
+ **Metadata:**
326
+ - Store chunk metadata (document ID, chunk index, position)
327
+ - Enable reconstruction of original document
328
+ - Track chunk relationships
329
+
330
+ ```python
331
+ # Example with metadata
332
+ chunks = [
333
+ {
334
+ "text": "First chunk...",
335
+ "embedding": [0.1, 0.2, ...],
336
+ "metadata": {
337
+ "document_id": "doc123",
338
+ "chunk_index": 0,
339
+ "total_chunks": 5,
340
+ "source": "article.pdf",
341
+ "page": 1
342
+ }
343
+ },
344
+ # ...
345
+ ]
346
+ ```
347
+
348
+ ---
349
+
350
+ ## Metadata Storage
351
+
352
+ ### Why Store Metadata?
353
+
354
+ **Metadata**: Additional information stored with embeddings
355
+
356
+ **Benefits:**
357
+ - Filter search results (by date, category, author, etc.)
358
+ - Reconstruct original content
359
+ - Track embedding provenance
360
+ - Enable hybrid search
361
+
362
+ ### Metadata Schema
363
+
364
+ **Essential Metadata:**
365
+ ```python
366
+ {
367
+ "id": "unique-id",
368
+ "text": "Original text content",
369
+ "embedding": [0.1, 0.2, ...],
370
+ "metadata": {
371
+ # Source information
372
+ "source": "document.pdf",
373
+ "source_type": "pdf",
374
+ "url": "https://example.com/doc",
375
+
376
+ # Content information
377
+ "title": "Document Title",
378
+ "author": "John Doe",
379
+ "category": "technology",
380
+ "tags": ["ai", "ml", "nlp"],
381
+
382
+ # Temporal information
383
+ "created_at": "2024-01-15T10:00:00Z",
384
+ "updated_at": "2024-01-20T15:30:00Z",
385
+ "published_date": "2024-01-10",
386
+
387
+ # Chunking information
388
+ "chunk_index": 0,
389
+ "total_chunks": 5,
390
+ "chunk_size": 512,
391
+
392
+ # Embedding information
393
+ "embedding_model": "text-embedding-3-small",
394
+ "embedding_version": "1.0",
395
+ "embedding_date": "2024-01-15T10:00:00Z"
396
+ }
397
+ }
398
+ ```
399
+
400
+ ### Metadata Filtering
401
+
402
+ **Example: Filter by category and date**
403
+ ```python
404
+ # Pinecone
405
+ results = index.query(
406
+ vector=query_embedding,
407
+ top_k=10,
408
+ filter={
409
+ "category": {"$eq": "technology"},
410
+ "published_date": {"$gte": "2024-01-01"}
411
+ }
412
+ )
413
+
414
+ # Weaviate
415
+ results = client.query.get("Document", ["text", "title"]) \
416
+ .with_near_vector({"vector": query_embedding}) \
417
+ .with_where({
418
+ "operator": "And",
419
+ "operands": [
420
+ {"path": ["category"], "operator": "Equal", "valueString": "technology"},
421
+ {"path": ["published_date"], "operator": "GreaterThanEqual", "valueString": "2024-01-01"}
422
+ ]
423
+ }) \
424
+ .with_limit(10) \
425
+ .do()
426
+ ```
427
+
428
+ ---
429
+
430
+ ## Embedding Updates
431
+
432
+ ### When to Update Embeddings
433
+
434
+ **Update embeddings when:**
435
+ - ✅ Content changes significantly
436
+ - ✅ Embedding model is upgraded
437
+ - ✅ Embedding quality is poor
438
+ - ✅ New metadata is added
439
+
440
+ **Don't update when:**
441
+ - ❌ Minor typo fixes
442
+ - ❌ Metadata-only changes
443
+ - ❌ Formatting changes
444
+
445
+ ### Update Strategies
446
+
447
+ **Strategy 1: Full Reindex**
448
+ ```python
449
+ def full_reindex(documents, index):
450
+ """Re-embed all documents"""
451
+ for doc in documents:
452
+ embedding = embed(doc.text)
453
+ index.upsert(id=doc.id, vector=embedding, metadata=doc.metadata)
454
+ ```
455
+
456
+ **Pros**: Clean, consistent
457
+ **Cons**: Expensive, time-consuming
458
+
459
+ **Strategy 2: Incremental Update**
460
+ ```python
461
+ def incremental_update(changed_documents, index):
462
+ """Update only changed documents"""
463
+ for doc in changed_documents:
464
+ embedding = embed(doc.text)
465
+ index.upsert(id=doc.id, vector=embedding, metadata=doc.metadata)
466
+ ```
467
+
468
+ **Pros**: Efficient, fast
469
+ **Cons**: May have inconsistent embeddings (different models)
470
+
471
+ **Strategy 3: Versioned Embeddings**
472
+ ```python
473
+ def versioned_update(documents, index, new_version):
474
+ """Create new version of embeddings"""
475
+ for doc in documents:
476
+ embedding = embed(doc.text)
477
+ index.upsert(
478
+ id=f"{doc.id}_v{new_version}",
479
+ vector=embedding,
480
+ metadata={**doc.metadata, "version": new_version}
481
+ )
482
+
483
+ # Optionally delete old versions
484
+ # delete_old_versions(index, old_version)
485
+ ```
486
+
487
+ **Pros**: Rollback capability, A/B testing
488
+ **Cons**: More storage, complex management
489
+
490
+ ---
491
+
492
+ ## Embedding Versioning
493
+
494
+ ### Why Version Embeddings?
495
+
496
+ **Reasons:**
497
+ - Track which model generated embeddings
498
+ - Enable rollback if new model performs poorly
499
+ - A/B test different embedding models
500
+ - Maintain consistency across updates
501
+
502
+ ### Versioning Schema
503
+
504
+ ```python
505
+ {
506
+ "id": "doc123",
507
+ "text": "Document content",
508
+ "embedding": [0.1, 0.2, ...],
509
+ "metadata": {
510
+ "embedding_model": "text-embedding-3-small",
511
+ "embedding_version": "v2",
512
+ "embedding_date": "2024-01-15T10:00:00Z",
513
+ "previous_versions": ["v1"]
514
+ }
515
+ }
516
+ ```
517
+
518
+ ### Version Migration
519
+
520
+ ```python
521
+ def migrate_embeddings(index, old_version, new_version, new_model):
522
+ """Migrate embeddings to new version"""
523
+ # Fetch all documents with old version
524
+ docs = index.fetch(filter={"embedding_version": old_version})
525
+
526
+ # Re-embed with new model
527
+ for doc in docs:
528
+ new_embedding = embed(doc.text, model=new_model)
529
+
530
+ # Update with new version
531
+ index.upsert(
532
+ id=doc.id,
533
+ vector=new_embedding,
534
+ metadata={
535
+ **doc.metadata,
536
+ "embedding_model": new_model,
537
+ "embedding_version": new_version,
538
+ "embedding_date": datetime.now().isoformat(),
539
+ "previous_versions": doc.metadata.get("previous_versions", []) + [old_version]
540
+ }
541
+ )
542
+ ```
543
+
544
+ ---
545
+
546
+ ## Batch Processing
547
+
548
+ ### Why Batch Process?
549
+
550
+ **Benefits:**
551
+ - Faster processing (parallel requests)
552
+ - Lower cost (batch discounts)
553
+ - Better resource utilization
554
+ - Reduced API rate limiting
555
+
556
+ ### Batch Embedding
557
+
558
+ **Example with OpenAI:**
559
+ ```python
560
+ from openai import OpenAI
561
+
562
+ client = OpenAI(api_key="your-api-key")
563
+
564
+ def batch_embed(texts, batch_size=100):
565
+ """Embed texts in batches"""
566
+ embeddings = []
567
+
568
+ for i in range(0, len(texts), batch_size):
569
+ batch = texts[i:i + batch_size]
570
+
571
+ response = client.embeddings.create(
572
+ model="text-embedding-3-small",
573
+ input=batch
574
+ )
575
+
576
+ batch_embeddings = [item.embedding for item in response.data]
577
+ embeddings.extend(batch_embeddings)
578
+
579
+ return embeddings
580
+
581
+ # Usage
582
+ texts = ["Text 1", "Text 2", ..., "Text 1000"]
583
+ embeddings = batch_embed(texts, batch_size=100)
584
+ ```
585
+
586
+ **Example with Sentence Transformers:**
587
+ ```python
588
+ from sentence_transformers import SentenceTransformer
589
+
590
+ model = SentenceTransformer('all-MiniLM-L6-v2')
591
+
592
+ def batch_embed_local(texts, batch_size=32):
593
+ """Embed texts in batches (local model)"""
594
+ embeddings = model.encode(
595
+ texts,
596
+ batch_size=batch_size,
597
+ show_progress_bar=True
598
+ )
599
+ return embeddings
600
+
601
+ # Usage
602
+ texts = ["Text 1", "Text 2", ..., "Text 10000"]
603
+ embeddings = batch_embed_local(texts, batch_size=32)
604
+ ```
605
+
606
+ ### Batch Upsert
607
+
608
+ ```python
609
+ def batch_upsert(index, documents, batch_size=100):
610
+ """Upsert documents in batches"""
611
+ for i in range(0, len(documents), batch_size):
612
+ batch = documents[i:i + batch_size]
613
+
614
+ # Prepare batch data
615
+ ids = [doc.id for doc in batch]
616
+ vectors = [doc.embedding for doc in batch]
617
+ metadata = [doc.metadata for doc in batch]
618
+
619
+ # Upsert batch
620
+ index.upsert(vectors=list(zip(ids, vectors, metadata)))
621
+ ```
622
+
623
+ ---
624
+
625
+ ## Cost Optimization
626
+
627
+ ### Embedding Cost Factors
628
+
629
+ **1. Model Selection:**
630
+ - OpenAI small: $0.02 / 1M tokens
631
+ - OpenAI large: $0.13 / 1M tokens
632
+ - Cohere: $0.10 / 1M tokens
633
+ - Sentence Transformers: Free (self-hosted)
634
+
635
+ **2. Token Count:**
636
+ - Longer texts = more tokens = higher cost
637
+ - Chunking strategy affects total tokens
638
+
639
+ **3. Update Frequency:**
640
+ - Frequent updates = higher cost
641
+ - Cache embeddings when possible
642
+
643
+ ### Cost Optimization Strategies
644
+
645
+ **Strategy 1: Use Smaller Models**
646
+ ```python
647
+ # Instead of text-embedding-3-large (expensive)
648
+ # Use text-embedding-3-small (cheaper, still good quality)
649
+ model = "text-embedding-3-small"
650
+ ```
651
+
652
+ **Strategy 2: Self-Host Open Source Models**
653
+ ```python
654
+ # Free (after infrastructure cost)
655
+ from sentence_transformers import SentenceTransformer
656
+ model = SentenceTransformer('all-MiniLM-L6-v2')
657
+ ```
658
+
659
+ **Strategy 3: Cache Embeddings**
660
+ ```python
661
+ import hashlib
662
+ import json
663
+
664
+ embedding_cache = {}
665
+
666
+ def embed_with_cache(text, model):
667
+ """Cache embeddings to avoid re-computation"""
668
+ # Create cache key
669
+ cache_key = hashlib.md5(f"{model}:{text}".encode()).hexdigest()
670
+
671
+ # Check cache
672
+ if cache_key in embedding_cache:
673
+ return embedding_cache[cache_key]
674
+
675
+ # Generate embedding
676
+ embedding = embed(text, model)
677
+
678
+ # Store in cache
679
+ embedding_cache[cache_key] = embedding
680
+
681
+ return embedding
682
+ ```
683
+
684
+ **Strategy 4: Batch Processing**
685
+ ```python
686
+ # Batch requests for better throughput and potential discounts
687
+ embeddings = batch_embed(texts, batch_size=100)
688
+ ```
689
+
690
+ **Strategy 5: Optimize Chunking**
691
+ ```python
692
+ # Larger chunks = fewer embeddings = lower cost
693
+ # But balance with search quality
694
+ chunk_size = 512 # Instead of 256
695
+ ```
696
+
697
+ ### Cost Estimation
698
+
699
+ ```python
700
+ def estimate_embedding_cost(num_documents, avg_tokens_per_doc, model="text-embedding-3-small"):
701
+ """Estimate embedding cost"""
702
+ costs = {
703
+ "text-embedding-3-small": 0.02 / 1_000_000,
704
+ "text-embedding-3-large": 0.13 / 1_000_000,
705
+ "embed-english-v3.0": 0.10 / 1_000_000
706
+ }
707
+
708
+ total_tokens = num_documents * avg_tokens_per_doc
709
+ cost_per_token = costs.get(model, 0)
710
+ total_cost = total_tokens * cost_per_token
711
+
712
+ return {
713
+ "total_tokens": total_tokens,
714
+ "total_cost": total_cost,
715
+ "cost_per_document": total_cost / num_documents
716
+ }
717
+
718
+ # Example
719
+ estimate = estimate_embedding_cost(
720
+ num_documents=100_000,
721
+ avg_tokens_per_doc=500,
722
+ model="text-embedding-3-small"
723
+ )
724
+ print(f"Total cost: ${estimate['total_cost']:.2f}")
725
+ # Output: Total cost: $1.00
726
+ ```
727
+
728
+ ---
729
+
730
+ ## Best Practices
731
+
732
+ ### 1. Model Selection
733
+
734
+ ✅ **DO:**
735
+ - Use OpenAI for production (high quality, reliable)
736
+ - Use Sentence Transformers for self-hosting (cost optimization)
737
+ - Use Cohere for multilingual (best multilingual support)
738
+ - Benchmark models on your data before choosing
739
+
740
+ ❌ **DON'T:**
741
+ - Mix embeddings from different models in same index
742
+ - Choose model based on dimensions alone
743
+ - Ignore cost implications
744
+ - Skip model evaluation
745
+
746
+ ### 2. Chunking
747
+
748
+ ✅ **DO:**
749
+ - Use 256-512 token chunks as default
750
+ - Add 10-20% overlap between chunks
751
+ - Preserve sentence/paragraph boundaries
752
+ - Store chunk metadata (index, total chunks)
753
+
754
+ ❌ **DON'T:**
755
+ - Use chunks larger than model max tokens
756
+ - Split mid-sentence without overlap
757
+ - Ignore chunk boundaries
758
+ - Forget to store chunk relationships
759
+
760
+ ### 3. Metadata
761
+
762
+ ✅ **DO:**
763
+ - Store original text with embeddings
764
+ - Include source, author, date, category
765
+ - Track embedding model and version
766
+ - Enable filtering by metadata
767
+
768
+ ❌ **DON'T:**
769
+ - Store only embeddings without metadata
770
+ - Forget to version embeddings
771
+ - Ignore temporal information
772
+ - Skip source tracking
773
+
774
+ ### 4. Updates
775
+
776
+ ✅ **DO:**
777
+ - Version embeddings for rollback
778
+ - Update incrementally when possible
779
+ - Cache embeddings to avoid re-computation
780
+ - Monitor embedding quality over time
781
+
782
+ ❌ **DON'T:**
783
+ - Re-embed everything for minor changes
784
+ - Mix old and new embeddings without versioning
785
+ - Ignore embedding drift
786
+ - Skip quality monitoring
787
+
788
+ ### 5. Cost Optimization
789
+
790
+ ✅ **DO:**
791
+ - Batch embed documents
792
+ - Cache embeddings
793
+ - Use appropriate model for use case
794
+ - Monitor and optimize token usage
795
+
796
+ ❌ **DON'T:**
797
+ - Embed one document at a time
798
+ - Re-embed unnecessarily
799
+ - Use expensive models when cheaper ones suffice
800
+ - Ignore cost monitoring
801
+
802
+ ---
803
+
804
+ ## Common Pitfalls
805
+
806
+ ### 1. Mixing Embedding Models
807
+
808
+ **Problem**: Using different models for indexing and querying
809
+
810
+ **Solution**: Use same model consistently
811
+
812
+ ### 2. Poor Chunking
813
+
814
+ **Problem**: Chunks too large (exceed token limit) or too small (lose context)
815
+
816
+ **Solution**: Use 256-512 token chunks with overlap
817
+
818
+ ### 3. Missing Metadata
819
+
820
+ **Problem**: Can't filter or reconstruct original content
821
+
822
+ **Solution**: Store comprehensive metadata with embeddings
823
+
824
+ ### 4. No Versioning
825
+
826
+ **Problem**: Can't track which model generated embeddings
827
+
828
+ **Solution**: Version embeddings with model name and date
829
+
830
+ ### 5. Inefficient Batch Processing
831
+
832
+ **Problem**: Embedding one document at a time (slow, expensive)
833
+
834
+ **Solution**: Batch embed documents (100+ at a time)
835
+
836
+ ---
837
+
838
+ ## Summary
839
+
840
+ **Key Takeaways:**
841
+ 1. Choose embedding model based on quality, cost, and use case
842
+ 2. Use 256-512 token chunks with 10-20% overlap
843
+ 3. Store comprehensive metadata (source, author, date, version)
844
+ 4. Version embeddings for rollback and consistency
845
+ 5. Batch process for efficiency and cost optimization
846
+ 6. Cache embeddings to avoid re-computation
847
+
848
+ **Model Recommendations:**
849
+ - **Production**: OpenAI `text-embedding-3-small`
850
+ - **Self-hosted**: Sentence Transformers `all-mpnet-base-v2`
851
+ - **Multilingual**: Cohere `embed-multilingual-v3.0`
852
+ - **Code**: Voyage AI `voyage-code-2`
853
+
854
+ **Next Steps:**
855
+ - See `vector-databases.md` for vector storage and search
856
+ - See `vector-indexing.md` for index optimization
857
+ - See `examples/vector-database-example.md` for complete implementation
858
+