@mytechtoday/augment-extensions 0.7.0 → 1.2.1
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.
- package/AGENTS.md +265 -232
- package/README.md +956 -771
- package/augment-extensions/coding-standards/bash/README.md +196 -196
- package/augment-extensions/coding-standards/bash/module.json +163 -163
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
- package/augment-extensions/coding-standards/css/README.md +40 -40
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
- package/augment-extensions/coding-standards/css/module.json +44 -44
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
- package/augment-extensions/coding-standards/html/README.md +40 -40
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
- package/augment-extensions/coding-standards/html/module.json +44 -44
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
- package/augment-extensions/coding-standards/js/README.md +46 -46
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
- package/augment-extensions/coding-standards/js/module.json +49 -49
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
- package/augment-extensions/coding-standards/php/README.md +248 -248
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
- package/augment-extensions/coding-standards/php/module.json +166 -166
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
- package/augment-extensions/coding-standards/php/rules/security.md +358 -358
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
- package/augment-extensions/coding-standards/powershell/README.md +154 -154
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
- package/augment-extensions/coding-standards/powershell/module.json +165 -165
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
- package/augment-extensions/coding-standards/python/README.md +48 -48
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
- package/augment-extensions/coding-standards/python/module.json +30 -30
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
- package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
- package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
- package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
- package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
- package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
- package/augment-extensions/coding-standards/react/README.md +45 -45
- package/augment-extensions/coding-standards/react/module.json +27 -27
- package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
- package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
- package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
- package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
- package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
- package/augment-extensions/coding-standards/typescript/README.md +45 -45
- package/augment-extensions/coding-standards/typescript/module.json +27 -27
- package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
- package/augment-extensions/collections/html-css-js/README.md +82 -82
- package/augment-extensions/collections/html-css-js/collection.json +41 -41
- package/augment-extensions/domain-rules/api-design/README.md +41 -41
- package/augment-extensions/domain-rules/api-design/module.json +27 -27
- package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
- package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
- package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
- package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
- package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
- package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
- package/augment-extensions/domain-rules/database/README.md +161 -161
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
- package/augment-extensions/domain-rules/database/module.json +28 -28
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
- package/augment-extensions/domain-rules/mcp/README.md +150 -150
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
- package/augment-extensions/domain-rules/mcp/module.json +49 -49
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
- package/augment-extensions/domain-rules/security/README.md +41 -41
- package/augment-extensions/domain-rules/security/module.json +28 -28
- package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
- package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
- package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
- package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
- package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
- package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
- package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
- package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
- package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
- package/augment-extensions/domain-rules/wordpress/README.md +163 -163
- package/augment-extensions/domain-rules/wordpress/module.json +32 -32
- package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
- package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
- package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
- package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
- package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
- package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
- package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
- package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
- package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
- package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
- package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
- package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
- package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
- package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
- package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
- package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
- package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
- package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
- package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
- package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
- package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
- package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
- package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
- package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
- package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
- package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
- package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
- package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
- package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
- package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
- package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
- package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
- package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
- package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
- package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
- package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
- package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
- package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
- package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
- package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
- package/augment-extensions/examples/design-patterns/README.md +37 -37
- package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
- package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
- package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
- package/augment-extensions/examples/design-patterns/module.json +27 -27
- package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
- package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
- package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
- package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
- package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
- package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
- package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
- package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
- package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
- package/augment-extensions/workflows/beads/README.md +135 -135
- package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
- package/augment-extensions/workflows/beads/module.json +55 -55
- package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
- package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
- package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
- package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
- package/augment-extensions/workflows/beads-integration/README.md +143 -143
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
- package/augment-extensions/workflows/beads-integration/module.json +75 -75
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
- package/augment-extensions/workflows/database/README.md +195 -195
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
- package/augment-extensions/workflows/database/module.json +42 -42
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
- package/augment-extensions/workflows/database/rules/workflow.md +458 -458
- package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
- package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
- package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
- package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
- package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
- package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
- package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
- package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
- package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
- package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
- package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
- package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
- package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
- package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
- package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
- package/augment-extensions/writing-standards/screenplay/README.md +339 -300
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
- package/augment-extensions/writing-standards/screenplay/module.json +124 -124
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
- package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
- package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
- package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
- package/cli/MODULES.md +302 -302
- package/cli/dist/cli.js +109 -22
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/gui.d.ts.map +1 -1
- package/cli/dist/commands/gui.js +54 -6
- package/cli/dist/commands/gui.js.map +1 -1
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +76 -23
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/self-remove.d.ts.map +1 -1
- package/cli/dist/commands/self-remove.js +48 -74
- package/cli/dist/commands/self-remove.js.map +1 -1
- package/cli/dist/commands/show.d.ts +11 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +120 -0
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/showCompleted.d.ts +21 -0
- package/cli/dist/commands/showCompleted.d.ts.map +1 -0
- package/cli/dist/commands/showCompleted.js +225 -0
- package/cli/dist/commands/showCompleted.js.map +1 -0
- package/cli/dist/commands/skill.js +88 -88
- package/cli/dist/commands/update.d.ts +2 -0
- package/cli/dist/commands/update.d.ts.map +1 -1
- package/cli/dist/commands/update.js +67 -1
- package/cli/dist/commands/update.js.map +1 -1
- package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
- package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
- package/cli/dist/utils/beadsCompletedChecker.js +198 -0
- package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
- package/cli/dist/utils/catalog-sync.js +13 -13
- package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
- package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
- package/cli/dist/utils/extractCommandHelp.js +250 -0
- package/cli/dist/utils/extractCommandHelp.js.map +1 -0
- package/cli/dist/utils/install-rules.js +55 -55
- package/cli/dist/utils/mcp-integration.js +44 -44
- package/cli/dist/utils/rule-install-hooks.js +8 -8
- package/modules.md +667 -630
- package/package.json +85 -85
|
@@ -1,522 +1,522 @@
|
|
|
1
|
-
# Compressed MCP Example: Mobile Assistant
|
|
2
|
-
|
|
3
|
-
## Use Case
|
|
4
|
-
|
|
5
|
-
A mobile AI assistant that operates under strict resource constraints (limited bandwidth, battery, storage) requiring aggressive context compression.
|
|
6
|
-
|
|
7
|
-
**Challenges**:
|
|
8
|
-
- Minimize token usage for cost/latency
|
|
9
|
-
- Compress context without losing critical information
|
|
10
|
-
- Operate on mobile devices with limited resources
|
|
11
|
-
- Balance compression ratio vs. information retention
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Configuration
|
|
16
|
-
|
|
17
|
-
```json
|
|
18
|
-
{
|
|
19
|
-
"mcp": {
|
|
20
|
-
"type": "compressed",
|
|
21
|
-
"compression": {
|
|
22
|
-
"strategy": "multi_stage",
|
|
23
|
-
"stages": [
|
|
24
|
-
{"type": "deduplication", "enabled": true},
|
|
25
|
-
{"type": "summarization", "ratio": 0.3},
|
|
26
|
-
{"type": "entity_extraction", "enabled": true},
|
|
27
|
-
{"type": "semantic_compression", "ratio": 0.5}
|
|
28
|
-
],
|
|
29
|
-
"targetRatio": 0.15,
|
|
30
|
-
"minQualityScore": 0.7
|
|
31
|
-
},
|
|
32
|
-
"caching": {
|
|
33
|
-
"enabled": true,
|
|
34
|
-
"maxSize": "10MB",
|
|
35
|
-
"evictionPolicy": "lru"
|
|
36
|
-
},
|
|
37
|
-
"optimization": {
|
|
38
|
-
"batchRequests": true,
|
|
39
|
-
"prefetch": true,
|
|
40
|
-
"deltaEncoding": true
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## Architecture
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
52
|
-
│ Original Context (10,000 tokens) │
|
|
53
|
-
└─────────────────────────────────────────────────────────────┘
|
|
54
|
-
│
|
|
55
|
-
▼
|
|
56
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
57
|
-
│ Stage 1: Deduplication │
|
|
58
|
-
│ Remove duplicate sentences/phrases │
|
|
59
|
-
│ Output: 8,000 tokens (20% reduction) │
|
|
60
|
-
└─────────────────────────────────────────────────────────────┘
|
|
61
|
-
│
|
|
62
|
-
▼
|
|
63
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
64
|
-
│ Stage 2: Summarization │
|
|
65
|
-
│ Compress to 30% of original │
|
|
66
|
-
│ Output: 2,400 tokens (70% reduction) │
|
|
67
|
-
└─────────────────────────────────────────────────────────────┘
|
|
68
|
-
│
|
|
69
|
-
▼
|
|
70
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
71
|
-
│ Stage 3: Entity Extraction │
|
|
72
|
-
│ Extract key entities and facts │
|
|
73
|
-
│ Output: Structured entities + 1,800 tokens │
|
|
74
|
-
└─────────────────────────────────────────────────────────────┘
|
|
75
|
-
│
|
|
76
|
-
▼
|
|
77
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
78
|
-
│ Stage 4: Semantic Compression │
|
|
79
|
-
│ Compress to 50% using semantic similarity │
|
|
80
|
-
│ Output: 900 tokens (91% total reduction) │
|
|
81
|
-
└─────────────────────────────────────────────────────────────┘
|
|
82
|
-
│
|
|
83
|
-
▼
|
|
84
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
85
|
-
│ Final Compressed Context (1,500 tokens) │
|
|
86
|
-
│ Entities + Compressed Text │
|
|
87
|
-
│ Compression Ratio: 15% │
|
|
88
|
-
└─────────────────────────────────────────────────────────────┘
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## Implementation
|
|
94
|
-
|
|
95
|
-
### Step 1: Compression Pipeline
|
|
96
|
-
|
|
97
|
-
```python
|
|
98
|
-
import tiktoken
|
|
99
|
-
from typing import List, Dict, Any
|
|
100
|
-
import openai
|
|
101
|
-
from collections import Counter
|
|
102
|
-
import hashlib
|
|
103
|
-
|
|
104
|
-
class CompressionPipeline:
|
|
105
|
-
def __init__(self, config: Dict[str, Any], openai_api_key: str):
|
|
106
|
-
self.config = config
|
|
107
|
-
self.client = openai.OpenAI(api_key=openai_api_key)
|
|
108
|
-
self.tokenizer = tiktoken.encoding_for_model("gpt-4o")
|
|
109
|
-
self.target_ratio = config["compression"]["targetRatio"]
|
|
110
|
-
|
|
111
|
-
def compress(self, text: str) -> Dict[str, Any]:
|
|
112
|
-
"""Apply multi-stage compression"""
|
|
113
|
-
stages = self.config["compression"]["stages"]
|
|
114
|
-
|
|
115
|
-
current_text = text
|
|
116
|
-
original_tokens = len(self.tokenizer.encode(text))
|
|
117
|
-
compression_log = []
|
|
118
|
-
|
|
119
|
-
for stage in stages:
|
|
120
|
-
if not stage.get("enabled", True):
|
|
121
|
-
continue
|
|
122
|
-
|
|
123
|
-
stage_type = stage["type"]
|
|
124
|
-
|
|
125
|
-
if stage_type == "deduplication":
|
|
126
|
-
current_text = self._deduplicate(current_text)
|
|
127
|
-
elif stage_type == "summarization":
|
|
128
|
-
current_text = self._summarize(current_text, stage["ratio"])
|
|
129
|
-
elif stage_type == "entity_extraction":
|
|
130
|
-
entities = self._extract_entities(current_text)
|
|
131
|
-
current_text = self._compress_with_entities(current_text, entities)
|
|
132
|
-
elif stage_type == "semantic_compression":
|
|
133
|
-
current_text = self._semantic_compress(current_text, stage["ratio"])
|
|
134
|
-
|
|
135
|
-
current_tokens = len(self.tokenizer.encode(current_text))
|
|
136
|
-
compression_log.append({
|
|
137
|
-
"stage": stage_type,
|
|
138
|
-
"tokens": current_tokens,
|
|
139
|
-
"ratio": current_tokens / original_tokens
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
final_tokens = len(self.tokenizer.encode(current_text))
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
"compressed_text": current_text,
|
|
146
|
-
"original_tokens": original_tokens,
|
|
147
|
-
"compressed_tokens": final_tokens,
|
|
148
|
-
"compression_ratio": final_tokens / original_tokens,
|
|
149
|
-
"stages": compression_log
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
def _deduplicate(self, text: str) -> str:
|
|
153
|
-
"""Remove duplicate sentences"""
|
|
154
|
-
sentences = text.split('. ')
|
|
155
|
-
seen = set()
|
|
156
|
-
unique_sentences = []
|
|
157
|
-
|
|
158
|
-
for sentence in sentences:
|
|
159
|
-
# Hash sentence for deduplication
|
|
160
|
-
sentence_hash = hashlib.md5(sentence.lower().strip().encode()).hexdigest()
|
|
161
|
-
|
|
162
|
-
if sentence_hash not in seen:
|
|
163
|
-
seen.add(sentence_hash)
|
|
164
|
-
unique_sentences.append(sentence)
|
|
165
|
-
|
|
166
|
-
return '. '.join(unique_sentences)
|
|
167
|
-
|
|
168
|
-
def _summarize(self, text: str, ratio: float) -> str:
|
|
169
|
-
"""Summarize text to target ratio"""
|
|
170
|
-
current_tokens = len(self.tokenizer.encode(text))
|
|
171
|
-
target_tokens = int(current_tokens * ratio)
|
|
172
|
-
|
|
173
|
-
response = self.client.chat.completions.create(
|
|
174
|
-
model="gpt-4o-mini", # Use mini for cost efficiency
|
|
175
|
-
messages=[
|
|
176
|
-
{
|
|
177
|
-
"role": "system",
|
|
178
|
-
"content": f"Summarize the text to approximately {target_tokens} tokens. Preserve key information."
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
"role": "user",
|
|
182
|
-
"content": text
|
|
183
|
-
}
|
|
184
|
-
],
|
|
185
|
-
temperature=0.3
|
|
186
|
-
)
|
|
187
|
-
|
|
188
|
-
return response.choices[0].message.content
|
|
189
|
-
|
|
190
|
-
def _extract_entities(self, text: str) -> List[Dict[str, Any]]:
|
|
191
|
-
"""Extract key entities from text"""
|
|
192
|
-
response = self.client.chat.completions.create(
|
|
193
|
-
model="gpt-4o-mini",
|
|
194
|
-
messages=[
|
|
195
|
-
{
|
|
196
|
-
"role": "system",
|
|
197
|
-
"content": """Extract key entities from the text.
|
|
198
|
-
|
|
199
|
-
Return JSON array:
|
|
200
|
-
[{"type": "PERSON", "value": "John"}, {"type": "DATE", "value": "2024-01-15"}, ...]"""
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
"role": "user",
|
|
204
|
-
"content": text
|
|
205
|
-
}
|
|
206
|
-
],
|
|
207
|
-
response_format={"type": "json_object"}
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
import json
|
|
211
|
-
result = json.loads(response.choices[0].message.content)
|
|
212
|
-
return result.get("entities", [])
|
|
213
|
-
|
|
214
|
-
def _compress_with_entities(self, text: str, entities: List[Dict[str, Any]]) -> str:
|
|
215
|
-
"""Compress text while preserving entities"""
|
|
216
|
-
# Create entity placeholders
|
|
217
|
-
entity_map = {}
|
|
218
|
-
compressed_text = text
|
|
219
|
-
|
|
220
|
-
for i, entity in enumerate(entities):
|
|
221
|
-
placeholder = f"[E{i}]"
|
|
222
|
-
entity_map[placeholder] = f"{entity['type']}:{entity['value']}"
|
|
223
|
-
compressed_text = compressed_text.replace(entity['value'], placeholder)
|
|
224
|
-
|
|
225
|
-
# Add entity legend
|
|
226
|
-
entity_legend = "\n\nEntities: " + ", ".join(f"{k}={v}" for k, v in entity_map.items())
|
|
227
|
-
|
|
228
|
-
return compressed_text + entity_legend
|
|
229
|
-
|
|
230
|
-
def _semantic_compress(self, text: str, ratio: float) -> str:
|
|
231
|
-
"""Compress using semantic similarity (remove redundant sentences)"""
|
|
232
|
-
sentences = text.split('. ')
|
|
233
|
-
|
|
234
|
-
if len(sentences) <= 3:
|
|
235
|
-
return text
|
|
236
|
-
|
|
237
|
-
# Simple heuristic: keep sentences with unique keywords
|
|
238
|
-
target_count = max(3, int(len(sentences) * ratio))
|
|
239
|
-
|
|
240
|
-
# Score sentences by keyword diversity
|
|
241
|
-
all_words = ' '.join(sentences).lower().split()
|
|
242
|
-
word_freq = Counter(all_words)
|
|
243
|
-
|
|
244
|
-
sentence_scores = []
|
|
245
|
-
for sentence in sentences:
|
|
246
|
-
words = sentence.lower().split()
|
|
247
|
-
# Score based on rare words (more informative)
|
|
248
|
-
score = sum(1 / (word_freq[word] + 1) for word in words if word in word_freq)
|
|
249
|
-
sentence_scores.append((score, sentence))
|
|
250
|
-
|
|
251
|
-
# Keep top-scoring sentences
|
|
252
|
-
sentence_scores.sort(reverse=True)
|
|
253
|
-
selected_sentences = [s for _, s in sentence_scores[:target_count]]
|
|
254
|
-
|
|
255
|
-
return '. '.join(selected_sentences)
|
|
256
|
-
|
|
257
|
-
class MobileAssistant:
|
|
258
|
-
def __init__(self, config: Dict[str, Any], openai_api_key: str):
|
|
259
|
-
self.compression_pipeline = CompressionPipeline(config, openai_api_key)
|
|
260
|
-
self.client = openai.OpenAI(api_key=openai_api_key)
|
|
261
|
-
self.cache = {} # Simple in-memory cache
|
|
262
|
-
self.cache_max_size = 10 * 1024 * 1024 # 10MB
|
|
263
|
-
|
|
264
|
-
def process_query(self, query: str, context: str) -> Dict[str, Any]:
|
|
265
|
-
"""Process query with compressed context"""
|
|
266
|
-
# Check cache
|
|
267
|
-
cache_key = hashlib.md5(context.encode()).hexdigest()
|
|
268
|
-
|
|
269
|
-
if cache_key in self.cache:
|
|
270
|
-
compressed_result = self.cache[cache_key]
|
|
271
|
-
else:
|
|
272
|
-
# Compress context
|
|
273
|
-
compressed_result = self.compression_pipeline.compress(context)
|
|
274
|
-
|
|
275
|
-
# Cache result
|
|
276
|
-
self._cache_result(cache_key, compressed_result)
|
|
277
|
-
|
|
278
|
-
# Generate response with compressed context
|
|
279
|
-
response = self.client.chat.completions.create(
|
|
280
|
-
model="gpt-4o-mini", # Use mini for mobile efficiency
|
|
281
|
-
messages=[
|
|
282
|
-
{
|
|
283
|
-
"role": "system",
|
|
284
|
-
"content": "You are a helpful mobile assistant. Use the compressed context to answer questions concisely."
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"role": "user",
|
|
288
|
-
"content": f"""Context (compressed):
|
|
289
|
-
{compressed_result['compressed_text']}
|
|
290
|
-
|
|
291
|
-
Question: {query}
|
|
292
|
-
|
|
293
|
-
Answer:"""
|
|
294
|
-
}
|
|
295
|
-
],
|
|
296
|
-
temperature=0.5,
|
|
297
|
-
max_tokens=200 # Limit response length for mobile
|
|
298
|
-
)
|
|
299
|
-
|
|
300
|
-
answer = response.choices[0].message.content
|
|
301
|
-
|
|
302
|
-
return {
|
|
303
|
-
"answer": answer,
|
|
304
|
-
"compression_stats": {
|
|
305
|
-
"original_tokens": compressed_result["original_tokens"],
|
|
306
|
-
"compressed_tokens": compressed_result["compressed_tokens"],
|
|
307
|
-
"compression_ratio": compressed_result["compression_ratio"],
|
|
308
|
-
"stages": compressed_result["stages"]
|
|
309
|
-
},
|
|
310
|
-
"cached": cache_key in self.cache
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
def _cache_result(self, key: str, result: Dict[str, Any]) -> None:
|
|
314
|
-
"""Cache compression result with LRU eviction"""
|
|
315
|
-
import sys
|
|
316
|
-
|
|
317
|
-
result_size = sys.getsizeof(result)
|
|
318
|
-
|
|
319
|
-
# Simple LRU: remove oldest if cache full
|
|
320
|
-
if sum(sys.getsizeof(v) for v in self.cache.values()) + result_size > self.cache_max_size:
|
|
321
|
-
if self.cache:
|
|
322
|
-
oldest_key = next(iter(self.cache))
|
|
323
|
-
del self.cache[oldest_key]
|
|
324
|
-
|
|
325
|
-
self.cache[key] = result
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
---
|
|
329
|
-
|
|
330
|
-
## Usage Example
|
|
331
|
-
|
|
332
|
-
```python
|
|
333
|
-
# Configuration
|
|
334
|
-
config = {
|
|
335
|
-
"compression": {
|
|
336
|
-
"strategy": "multi_stage",
|
|
337
|
-
"stages": [
|
|
338
|
-
{"type": "deduplication", "enabled": True},
|
|
339
|
-
{"type": "summarization", "ratio": 0.3},
|
|
340
|
-
{"type": "entity_extraction", "enabled": True},
|
|
341
|
-
{"type": "semantic_compression", "ratio": 0.5}
|
|
342
|
-
],
|
|
343
|
-
"targetRatio": 0.15,
|
|
344
|
-
"minQualityScore": 0.7
|
|
345
|
-
},
|
|
346
|
-
"caching": {
|
|
347
|
-
"enabled": True,
|
|
348
|
-
"maxSize": "10MB",
|
|
349
|
-
"evictionPolicy": "lru"
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
# Initialize assistant
|
|
354
|
-
assistant = MobileAssistant(config, "your-openai-key")
|
|
355
|
-
|
|
356
|
-
# Long context (e.g., article, documentation)
|
|
357
|
-
long_context = """
|
|
358
|
-
[Long article text here - 10,000 tokens]
|
|
359
|
-
Python is a high-level programming language. Python is widely used.
|
|
360
|
-
Python supports multiple programming paradigms. Python has a large ecosystem.
|
|
361
|
-
...
|
|
362
|
-
"""
|
|
363
|
-
|
|
364
|
-
# Process query with compression
|
|
365
|
-
result = assistant.process_query(
|
|
366
|
-
query="What are the key features of Python?",
|
|
367
|
-
context=long_context
|
|
368
|
-
)
|
|
369
|
-
|
|
370
|
-
print(f"Answer: {result['answer']}")
|
|
371
|
-
print(f"\nCompression Stats:")
|
|
372
|
-
print(f" Original: {result['compression_stats']['original_tokens']} tokens")
|
|
373
|
-
print(f" Compressed: {result['compression_stats']['compressed_tokens']} tokens")
|
|
374
|
-
print(f" Ratio: {result['compression_stats']['compression_ratio']:.2%}")
|
|
375
|
-
print(f" Cached: {result['cached']}")
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
---
|
|
379
|
-
|
|
380
|
-
## Key Features
|
|
381
|
-
|
|
382
|
-
### 1. Multi-Stage Compression
|
|
383
|
-
- Deduplication (remove duplicates)
|
|
384
|
-
- Summarization (compress to ratio)
|
|
385
|
-
- Entity extraction (preserve key info)
|
|
386
|
-
- Semantic compression (remove redundancy)
|
|
387
|
-
|
|
388
|
-
### 2. Caching
|
|
389
|
-
- LRU eviction policy
|
|
390
|
-
- Size-based limits (10MB)
|
|
391
|
-
- Cache hit tracking
|
|
392
|
-
|
|
393
|
-
### 3. Mobile Optimization
|
|
394
|
-
- Use gpt-4o-mini for cost/speed
|
|
395
|
-
- Limit response tokens (200)
|
|
396
|
-
- Batch requests when possible
|
|
397
|
-
- Prefetch common contexts
|
|
398
|
-
|
|
399
|
-
### 4. Quality Preservation
|
|
400
|
-
- Entity preservation
|
|
401
|
-
- Keyword diversity scoring
|
|
402
|
-
- Configurable quality thresholds
|
|
403
|
-
|
|
404
|
-
---
|
|
405
|
-
|
|
406
|
-
## Testing
|
|
407
|
-
|
|
408
|
-
```python
|
|
409
|
-
import pytest
|
|
410
|
-
|
|
411
|
-
def test_deduplication():
|
|
412
|
-
pipeline = CompressionPipeline(config, "key")
|
|
413
|
-
|
|
414
|
-
text = "Python is great. Python is great. Python is awesome."
|
|
415
|
-
result = pipeline._deduplicate(text)
|
|
416
|
-
|
|
417
|
-
assert result.count("Python is great") == 1
|
|
418
|
-
|
|
419
|
-
def test_compression_ratio():
|
|
420
|
-
pipeline = CompressionPipeline(config, "key")
|
|
421
|
-
|
|
422
|
-
text = "This is a long text. " * 100
|
|
423
|
-
result = pipeline.compress(text)
|
|
424
|
-
|
|
425
|
-
assert result["compression_ratio"] < 0.5
|
|
426
|
-
assert result["compressed_tokens"] < result["original_tokens"]
|
|
427
|
-
|
|
428
|
-
def test_caching():
|
|
429
|
-
assistant = MobileAssistant(config, "key")
|
|
430
|
-
|
|
431
|
-
context = "Test context"
|
|
432
|
-
|
|
433
|
-
# First call - not cached
|
|
434
|
-
result1 = assistant.process_query("test", context)
|
|
435
|
-
assert not result1["cached"]
|
|
436
|
-
|
|
437
|
-
# Second call - cached
|
|
438
|
-
result2 = assistant.process_query("test", context)
|
|
439
|
-
assert result2["cached"]
|
|
440
|
-
|
|
441
|
-
def test_entity_extraction():
|
|
442
|
-
pipeline = CompressionPipeline(config, "key")
|
|
443
|
-
|
|
444
|
-
text = "John met Mary on January 15, 2024 in New York."
|
|
445
|
-
entities = pipeline._extract_entities(text)
|
|
446
|
-
|
|
447
|
-
assert len(entities) > 0
|
|
448
|
-
assert any(e["type"] == "PERSON" for e in entities)
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
---
|
|
452
|
-
|
|
453
|
-
## Best Practices
|
|
454
|
-
|
|
455
|
-
1. **Compression Ratio**: Target 10-20% for mobile use cases
|
|
456
|
-
2. **Quality Monitoring**: Track information retention metrics
|
|
457
|
-
3. **Caching Strategy**: Cache frequently accessed contexts
|
|
458
|
-
4. **Model Selection**: Use gpt-4o-mini for cost efficiency
|
|
459
|
-
5. **Batch Processing**: Batch multiple compressions
|
|
460
|
-
6. **Progressive Compression**: Compress incrementally as needed
|
|
461
|
-
7. **Fallback**: Keep original context for quality checks
|
|
462
|
-
8. **Monitoring**: Track compression performance and quality
|
|
463
|
-
|
|
464
|
-
---
|
|
465
|
-
|
|
466
|
-
## Performance Optimization
|
|
467
|
-
|
|
468
|
-
- **Parallel Compression**: Compress multiple contexts in parallel
|
|
469
|
-
- **Incremental Updates**: Only compress new content
|
|
470
|
-
- **Delta Encoding**: Store only changes from previous version
|
|
471
|
-
- **Prefetching**: Prefetch and compress common contexts
|
|
472
|
-
- **Lazy Compression**: Compress only when needed
|
|
473
|
-
- **Compression Levels**: Offer multiple compression levels
|
|
474
|
-
|
|
475
|
-
---
|
|
476
|
-
|
|
477
|
-
## Quality Metrics
|
|
478
|
-
|
|
479
|
-
### Compression Metrics
|
|
480
|
-
- **Compression Ratio**: Compressed tokens / Original tokens
|
|
481
|
-
- **Latency**: Time to compress
|
|
482
|
-
- **Cache Hit Rate**: Cached requests / Total requests
|
|
483
|
-
|
|
484
|
-
### Quality Metrics
|
|
485
|
-
- **Information Retention**: Key facts preserved
|
|
486
|
-
- **Entity Preservation**: Critical entities retained
|
|
487
|
-
- **Semantic Similarity**: Cosine similarity to original
|
|
488
|
-
- **User Satisfaction**: Feedback on answer quality
|
|
489
|
-
|
|
490
|
-
---
|
|
491
|
-
|
|
492
|
-
## Mobile-Specific Optimizations
|
|
493
|
-
|
|
494
|
-
### Bandwidth Optimization
|
|
495
|
-
- Compress requests/responses
|
|
496
|
-
- Use delta encoding for updates
|
|
497
|
-
- Batch multiple requests
|
|
498
|
-
- Prefetch common queries
|
|
499
|
-
|
|
500
|
-
### Battery Optimization
|
|
501
|
-
- Minimize API calls
|
|
502
|
-
- Cache aggressively
|
|
503
|
-
- Use efficient models (mini)
|
|
504
|
-
- Reduce token usage
|
|
505
|
-
|
|
506
|
-
### Storage Optimization
|
|
507
|
-
- Limit cache size (10MB)
|
|
508
|
-
- LRU eviction
|
|
509
|
-
- Compress cached data
|
|
510
|
-
- Periodic cache cleanup
|
|
511
|
-
|
|
512
|
-
---
|
|
513
|
-
|
|
514
|
-
## Security
|
|
515
|
-
|
|
516
|
-
- **Data Minimization**: Only compress necessary data
|
|
517
|
-
- **Cache Encryption**: Encrypt cached contexts
|
|
518
|
-
- **PII Handling**: Remove PII before compression
|
|
519
|
-
- **Audit Logging**: Log compression operations
|
|
520
|
-
- **Rate Limiting**: Limit compression requests per user
|
|
521
|
-
```
|
|
522
|
-
|
|
1
|
+
# Compressed MCP Example: Mobile Assistant
|
|
2
|
+
|
|
3
|
+
## Use Case
|
|
4
|
+
|
|
5
|
+
A mobile AI assistant that operates under strict resource constraints (limited bandwidth, battery, storage) requiring aggressive context compression.
|
|
6
|
+
|
|
7
|
+
**Challenges**:
|
|
8
|
+
- Minimize token usage for cost/latency
|
|
9
|
+
- Compress context without losing critical information
|
|
10
|
+
- Operate on mobile devices with limited resources
|
|
11
|
+
- Balance compression ratio vs. information retention
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcp": {
|
|
20
|
+
"type": "compressed",
|
|
21
|
+
"compression": {
|
|
22
|
+
"strategy": "multi_stage",
|
|
23
|
+
"stages": [
|
|
24
|
+
{"type": "deduplication", "enabled": true},
|
|
25
|
+
{"type": "summarization", "ratio": 0.3},
|
|
26
|
+
{"type": "entity_extraction", "enabled": true},
|
|
27
|
+
{"type": "semantic_compression", "ratio": 0.5}
|
|
28
|
+
],
|
|
29
|
+
"targetRatio": 0.15,
|
|
30
|
+
"minQualityScore": 0.7
|
|
31
|
+
},
|
|
32
|
+
"caching": {
|
|
33
|
+
"enabled": true,
|
|
34
|
+
"maxSize": "10MB",
|
|
35
|
+
"evictionPolicy": "lru"
|
|
36
|
+
},
|
|
37
|
+
"optimization": {
|
|
38
|
+
"batchRequests": true,
|
|
39
|
+
"prefetch": true,
|
|
40
|
+
"deltaEncoding": true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Architecture
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
52
|
+
│ Original Context (10,000 tokens) │
|
|
53
|
+
└─────────────────────────────────────────────────────────────┘
|
|
54
|
+
│
|
|
55
|
+
▼
|
|
56
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
57
|
+
│ Stage 1: Deduplication │
|
|
58
|
+
│ Remove duplicate sentences/phrases │
|
|
59
|
+
│ Output: 8,000 tokens (20% reduction) │
|
|
60
|
+
└─────────────────────────────────────────────────────────────┘
|
|
61
|
+
│
|
|
62
|
+
▼
|
|
63
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
64
|
+
│ Stage 2: Summarization │
|
|
65
|
+
│ Compress to 30% of original │
|
|
66
|
+
│ Output: 2,400 tokens (70% reduction) │
|
|
67
|
+
└─────────────────────────────────────────────────────────────┘
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
71
|
+
│ Stage 3: Entity Extraction │
|
|
72
|
+
│ Extract key entities and facts │
|
|
73
|
+
│ Output: Structured entities + 1,800 tokens │
|
|
74
|
+
└─────────────────────────────────────────────────────────────┘
|
|
75
|
+
│
|
|
76
|
+
▼
|
|
77
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
78
|
+
│ Stage 4: Semantic Compression │
|
|
79
|
+
│ Compress to 50% using semantic similarity │
|
|
80
|
+
│ Output: 900 tokens (91% total reduction) │
|
|
81
|
+
└─────────────────────────────────────────────────────────────┘
|
|
82
|
+
│
|
|
83
|
+
▼
|
|
84
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
85
|
+
│ Final Compressed Context (1,500 tokens) │
|
|
86
|
+
│ Entities + Compressed Text │
|
|
87
|
+
│ Compression Ratio: 15% │
|
|
88
|
+
└─────────────────────────────────────────────────────────────┘
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Implementation
|
|
94
|
+
|
|
95
|
+
### Step 1: Compression Pipeline
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
import tiktoken
|
|
99
|
+
from typing import List, Dict, Any
|
|
100
|
+
import openai
|
|
101
|
+
from collections import Counter
|
|
102
|
+
import hashlib
|
|
103
|
+
|
|
104
|
+
class CompressionPipeline:
|
|
105
|
+
def __init__(self, config: Dict[str, Any], openai_api_key: str):
|
|
106
|
+
self.config = config
|
|
107
|
+
self.client = openai.OpenAI(api_key=openai_api_key)
|
|
108
|
+
self.tokenizer = tiktoken.encoding_for_model("gpt-4o")
|
|
109
|
+
self.target_ratio = config["compression"]["targetRatio"]
|
|
110
|
+
|
|
111
|
+
def compress(self, text: str) -> Dict[str, Any]:
|
|
112
|
+
"""Apply multi-stage compression"""
|
|
113
|
+
stages = self.config["compression"]["stages"]
|
|
114
|
+
|
|
115
|
+
current_text = text
|
|
116
|
+
original_tokens = len(self.tokenizer.encode(text))
|
|
117
|
+
compression_log = []
|
|
118
|
+
|
|
119
|
+
for stage in stages:
|
|
120
|
+
if not stage.get("enabled", True):
|
|
121
|
+
continue
|
|
122
|
+
|
|
123
|
+
stage_type = stage["type"]
|
|
124
|
+
|
|
125
|
+
if stage_type == "deduplication":
|
|
126
|
+
current_text = self._deduplicate(current_text)
|
|
127
|
+
elif stage_type == "summarization":
|
|
128
|
+
current_text = self._summarize(current_text, stage["ratio"])
|
|
129
|
+
elif stage_type == "entity_extraction":
|
|
130
|
+
entities = self._extract_entities(current_text)
|
|
131
|
+
current_text = self._compress_with_entities(current_text, entities)
|
|
132
|
+
elif stage_type == "semantic_compression":
|
|
133
|
+
current_text = self._semantic_compress(current_text, stage["ratio"])
|
|
134
|
+
|
|
135
|
+
current_tokens = len(self.tokenizer.encode(current_text))
|
|
136
|
+
compression_log.append({
|
|
137
|
+
"stage": stage_type,
|
|
138
|
+
"tokens": current_tokens,
|
|
139
|
+
"ratio": current_tokens / original_tokens
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
final_tokens = len(self.tokenizer.encode(current_text))
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
"compressed_text": current_text,
|
|
146
|
+
"original_tokens": original_tokens,
|
|
147
|
+
"compressed_tokens": final_tokens,
|
|
148
|
+
"compression_ratio": final_tokens / original_tokens,
|
|
149
|
+
"stages": compression_log
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
def _deduplicate(self, text: str) -> str:
|
|
153
|
+
"""Remove duplicate sentences"""
|
|
154
|
+
sentences = text.split('. ')
|
|
155
|
+
seen = set()
|
|
156
|
+
unique_sentences = []
|
|
157
|
+
|
|
158
|
+
for sentence in sentences:
|
|
159
|
+
# Hash sentence for deduplication
|
|
160
|
+
sentence_hash = hashlib.md5(sentence.lower().strip().encode()).hexdigest()
|
|
161
|
+
|
|
162
|
+
if sentence_hash not in seen:
|
|
163
|
+
seen.add(sentence_hash)
|
|
164
|
+
unique_sentences.append(sentence)
|
|
165
|
+
|
|
166
|
+
return '. '.join(unique_sentences)
|
|
167
|
+
|
|
168
|
+
def _summarize(self, text: str, ratio: float) -> str:
|
|
169
|
+
"""Summarize text to target ratio"""
|
|
170
|
+
current_tokens = len(self.tokenizer.encode(text))
|
|
171
|
+
target_tokens = int(current_tokens * ratio)
|
|
172
|
+
|
|
173
|
+
response = self.client.chat.completions.create(
|
|
174
|
+
model="gpt-4o-mini", # Use mini for cost efficiency
|
|
175
|
+
messages=[
|
|
176
|
+
{
|
|
177
|
+
"role": "system",
|
|
178
|
+
"content": f"Summarize the text to approximately {target_tokens} tokens. Preserve key information."
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"role": "user",
|
|
182
|
+
"content": text
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
temperature=0.3
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
return response.choices[0].message.content
|
|
189
|
+
|
|
190
|
+
def _extract_entities(self, text: str) -> List[Dict[str, Any]]:
|
|
191
|
+
"""Extract key entities from text"""
|
|
192
|
+
response = self.client.chat.completions.create(
|
|
193
|
+
model="gpt-4o-mini",
|
|
194
|
+
messages=[
|
|
195
|
+
{
|
|
196
|
+
"role": "system",
|
|
197
|
+
"content": """Extract key entities from the text.
|
|
198
|
+
|
|
199
|
+
Return JSON array:
|
|
200
|
+
[{"type": "PERSON", "value": "John"}, {"type": "DATE", "value": "2024-01-15"}, ...]"""
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"role": "user",
|
|
204
|
+
"content": text
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
response_format={"type": "json_object"}
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
import json
|
|
211
|
+
result = json.loads(response.choices[0].message.content)
|
|
212
|
+
return result.get("entities", [])
|
|
213
|
+
|
|
214
|
+
def _compress_with_entities(self, text: str, entities: List[Dict[str, Any]]) -> str:
|
|
215
|
+
"""Compress text while preserving entities"""
|
|
216
|
+
# Create entity placeholders
|
|
217
|
+
entity_map = {}
|
|
218
|
+
compressed_text = text
|
|
219
|
+
|
|
220
|
+
for i, entity in enumerate(entities):
|
|
221
|
+
placeholder = f"[E{i}]"
|
|
222
|
+
entity_map[placeholder] = f"{entity['type']}:{entity['value']}"
|
|
223
|
+
compressed_text = compressed_text.replace(entity['value'], placeholder)
|
|
224
|
+
|
|
225
|
+
# Add entity legend
|
|
226
|
+
entity_legend = "\n\nEntities: " + ", ".join(f"{k}={v}" for k, v in entity_map.items())
|
|
227
|
+
|
|
228
|
+
return compressed_text + entity_legend
|
|
229
|
+
|
|
230
|
+
def _semantic_compress(self, text: str, ratio: float) -> str:
|
|
231
|
+
"""Compress using semantic similarity (remove redundant sentences)"""
|
|
232
|
+
sentences = text.split('. ')
|
|
233
|
+
|
|
234
|
+
if len(sentences) <= 3:
|
|
235
|
+
return text
|
|
236
|
+
|
|
237
|
+
# Simple heuristic: keep sentences with unique keywords
|
|
238
|
+
target_count = max(3, int(len(sentences) * ratio))
|
|
239
|
+
|
|
240
|
+
# Score sentences by keyword diversity
|
|
241
|
+
all_words = ' '.join(sentences).lower().split()
|
|
242
|
+
word_freq = Counter(all_words)
|
|
243
|
+
|
|
244
|
+
sentence_scores = []
|
|
245
|
+
for sentence in sentences:
|
|
246
|
+
words = sentence.lower().split()
|
|
247
|
+
# Score based on rare words (more informative)
|
|
248
|
+
score = sum(1 / (word_freq[word] + 1) for word in words if word in word_freq)
|
|
249
|
+
sentence_scores.append((score, sentence))
|
|
250
|
+
|
|
251
|
+
# Keep top-scoring sentences
|
|
252
|
+
sentence_scores.sort(reverse=True)
|
|
253
|
+
selected_sentences = [s for _, s in sentence_scores[:target_count]]
|
|
254
|
+
|
|
255
|
+
return '. '.join(selected_sentences)
|
|
256
|
+
|
|
257
|
+
class MobileAssistant:
|
|
258
|
+
def __init__(self, config: Dict[str, Any], openai_api_key: str):
|
|
259
|
+
self.compression_pipeline = CompressionPipeline(config, openai_api_key)
|
|
260
|
+
self.client = openai.OpenAI(api_key=openai_api_key)
|
|
261
|
+
self.cache = {} # Simple in-memory cache
|
|
262
|
+
self.cache_max_size = 10 * 1024 * 1024 # 10MB
|
|
263
|
+
|
|
264
|
+
def process_query(self, query: str, context: str) -> Dict[str, Any]:
|
|
265
|
+
"""Process query with compressed context"""
|
|
266
|
+
# Check cache
|
|
267
|
+
cache_key = hashlib.md5(context.encode()).hexdigest()
|
|
268
|
+
|
|
269
|
+
if cache_key in self.cache:
|
|
270
|
+
compressed_result = self.cache[cache_key]
|
|
271
|
+
else:
|
|
272
|
+
# Compress context
|
|
273
|
+
compressed_result = self.compression_pipeline.compress(context)
|
|
274
|
+
|
|
275
|
+
# Cache result
|
|
276
|
+
self._cache_result(cache_key, compressed_result)
|
|
277
|
+
|
|
278
|
+
# Generate response with compressed context
|
|
279
|
+
response = self.client.chat.completions.create(
|
|
280
|
+
model="gpt-4o-mini", # Use mini for mobile efficiency
|
|
281
|
+
messages=[
|
|
282
|
+
{
|
|
283
|
+
"role": "system",
|
|
284
|
+
"content": "You are a helpful mobile assistant. Use the compressed context to answer questions concisely."
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"role": "user",
|
|
288
|
+
"content": f"""Context (compressed):
|
|
289
|
+
{compressed_result['compressed_text']}
|
|
290
|
+
|
|
291
|
+
Question: {query}
|
|
292
|
+
|
|
293
|
+
Answer:"""
|
|
294
|
+
}
|
|
295
|
+
],
|
|
296
|
+
temperature=0.5,
|
|
297
|
+
max_tokens=200 # Limit response length for mobile
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
answer = response.choices[0].message.content
|
|
301
|
+
|
|
302
|
+
return {
|
|
303
|
+
"answer": answer,
|
|
304
|
+
"compression_stats": {
|
|
305
|
+
"original_tokens": compressed_result["original_tokens"],
|
|
306
|
+
"compressed_tokens": compressed_result["compressed_tokens"],
|
|
307
|
+
"compression_ratio": compressed_result["compression_ratio"],
|
|
308
|
+
"stages": compressed_result["stages"]
|
|
309
|
+
},
|
|
310
|
+
"cached": cache_key in self.cache
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
def _cache_result(self, key: str, result: Dict[str, Any]) -> None:
|
|
314
|
+
"""Cache compression result with LRU eviction"""
|
|
315
|
+
import sys
|
|
316
|
+
|
|
317
|
+
result_size = sys.getsizeof(result)
|
|
318
|
+
|
|
319
|
+
# Simple LRU: remove oldest if cache full
|
|
320
|
+
if sum(sys.getsizeof(v) for v in self.cache.values()) + result_size > self.cache_max_size:
|
|
321
|
+
if self.cache:
|
|
322
|
+
oldest_key = next(iter(self.cache))
|
|
323
|
+
del self.cache[oldest_key]
|
|
324
|
+
|
|
325
|
+
self.cache[key] = result
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Usage Example
|
|
331
|
+
|
|
332
|
+
```python
|
|
333
|
+
# Configuration
|
|
334
|
+
config = {
|
|
335
|
+
"compression": {
|
|
336
|
+
"strategy": "multi_stage",
|
|
337
|
+
"stages": [
|
|
338
|
+
{"type": "deduplication", "enabled": True},
|
|
339
|
+
{"type": "summarization", "ratio": 0.3},
|
|
340
|
+
{"type": "entity_extraction", "enabled": True},
|
|
341
|
+
{"type": "semantic_compression", "ratio": 0.5}
|
|
342
|
+
],
|
|
343
|
+
"targetRatio": 0.15,
|
|
344
|
+
"minQualityScore": 0.7
|
|
345
|
+
},
|
|
346
|
+
"caching": {
|
|
347
|
+
"enabled": True,
|
|
348
|
+
"maxSize": "10MB",
|
|
349
|
+
"evictionPolicy": "lru"
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
# Initialize assistant
|
|
354
|
+
assistant = MobileAssistant(config, "your-openai-key")
|
|
355
|
+
|
|
356
|
+
# Long context (e.g., article, documentation)
|
|
357
|
+
long_context = """
|
|
358
|
+
[Long article text here - 10,000 tokens]
|
|
359
|
+
Python is a high-level programming language. Python is widely used.
|
|
360
|
+
Python supports multiple programming paradigms. Python has a large ecosystem.
|
|
361
|
+
...
|
|
362
|
+
"""
|
|
363
|
+
|
|
364
|
+
# Process query with compression
|
|
365
|
+
result = assistant.process_query(
|
|
366
|
+
query="What are the key features of Python?",
|
|
367
|
+
context=long_context
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
print(f"Answer: {result['answer']}")
|
|
371
|
+
print(f"\nCompression Stats:")
|
|
372
|
+
print(f" Original: {result['compression_stats']['original_tokens']} tokens")
|
|
373
|
+
print(f" Compressed: {result['compression_stats']['compressed_tokens']} tokens")
|
|
374
|
+
print(f" Ratio: {result['compression_stats']['compression_ratio']:.2%}")
|
|
375
|
+
print(f" Cached: {result['cached']}")
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Key Features
|
|
381
|
+
|
|
382
|
+
### 1. Multi-Stage Compression
|
|
383
|
+
- Deduplication (remove duplicates)
|
|
384
|
+
- Summarization (compress to ratio)
|
|
385
|
+
- Entity extraction (preserve key info)
|
|
386
|
+
- Semantic compression (remove redundancy)
|
|
387
|
+
|
|
388
|
+
### 2. Caching
|
|
389
|
+
- LRU eviction policy
|
|
390
|
+
- Size-based limits (10MB)
|
|
391
|
+
- Cache hit tracking
|
|
392
|
+
|
|
393
|
+
### 3. Mobile Optimization
|
|
394
|
+
- Use gpt-4o-mini for cost/speed
|
|
395
|
+
- Limit response tokens (200)
|
|
396
|
+
- Batch requests when possible
|
|
397
|
+
- Prefetch common contexts
|
|
398
|
+
|
|
399
|
+
### 4. Quality Preservation
|
|
400
|
+
- Entity preservation
|
|
401
|
+
- Keyword diversity scoring
|
|
402
|
+
- Configurable quality thresholds
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## Testing
|
|
407
|
+
|
|
408
|
+
```python
|
|
409
|
+
import pytest
|
|
410
|
+
|
|
411
|
+
def test_deduplication():
|
|
412
|
+
pipeline = CompressionPipeline(config, "key")
|
|
413
|
+
|
|
414
|
+
text = "Python is great. Python is great. Python is awesome."
|
|
415
|
+
result = pipeline._deduplicate(text)
|
|
416
|
+
|
|
417
|
+
assert result.count("Python is great") == 1
|
|
418
|
+
|
|
419
|
+
def test_compression_ratio():
|
|
420
|
+
pipeline = CompressionPipeline(config, "key")
|
|
421
|
+
|
|
422
|
+
text = "This is a long text. " * 100
|
|
423
|
+
result = pipeline.compress(text)
|
|
424
|
+
|
|
425
|
+
assert result["compression_ratio"] < 0.5
|
|
426
|
+
assert result["compressed_tokens"] < result["original_tokens"]
|
|
427
|
+
|
|
428
|
+
def test_caching():
|
|
429
|
+
assistant = MobileAssistant(config, "key")
|
|
430
|
+
|
|
431
|
+
context = "Test context"
|
|
432
|
+
|
|
433
|
+
# First call - not cached
|
|
434
|
+
result1 = assistant.process_query("test", context)
|
|
435
|
+
assert not result1["cached"]
|
|
436
|
+
|
|
437
|
+
# Second call - cached
|
|
438
|
+
result2 = assistant.process_query("test", context)
|
|
439
|
+
assert result2["cached"]
|
|
440
|
+
|
|
441
|
+
def test_entity_extraction():
|
|
442
|
+
pipeline = CompressionPipeline(config, "key")
|
|
443
|
+
|
|
444
|
+
text = "John met Mary on January 15, 2024 in New York."
|
|
445
|
+
entities = pipeline._extract_entities(text)
|
|
446
|
+
|
|
447
|
+
assert len(entities) > 0
|
|
448
|
+
assert any(e["type"] == "PERSON" for e in entities)
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## Best Practices
|
|
454
|
+
|
|
455
|
+
1. **Compression Ratio**: Target 10-20% for mobile use cases
|
|
456
|
+
2. **Quality Monitoring**: Track information retention metrics
|
|
457
|
+
3. **Caching Strategy**: Cache frequently accessed contexts
|
|
458
|
+
4. **Model Selection**: Use gpt-4o-mini for cost efficiency
|
|
459
|
+
5. **Batch Processing**: Batch multiple compressions
|
|
460
|
+
6. **Progressive Compression**: Compress incrementally as needed
|
|
461
|
+
7. **Fallback**: Keep original context for quality checks
|
|
462
|
+
8. **Monitoring**: Track compression performance and quality
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
## Performance Optimization
|
|
467
|
+
|
|
468
|
+
- **Parallel Compression**: Compress multiple contexts in parallel
|
|
469
|
+
- **Incremental Updates**: Only compress new content
|
|
470
|
+
- **Delta Encoding**: Store only changes from previous version
|
|
471
|
+
- **Prefetching**: Prefetch and compress common contexts
|
|
472
|
+
- **Lazy Compression**: Compress only when needed
|
|
473
|
+
- **Compression Levels**: Offer multiple compression levels
|
|
474
|
+
|
|
475
|
+
---
|
|
476
|
+
|
|
477
|
+
## Quality Metrics
|
|
478
|
+
|
|
479
|
+
### Compression Metrics
|
|
480
|
+
- **Compression Ratio**: Compressed tokens / Original tokens
|
|
481
|
+
- **Latency**: Time to compress
|
|
482
|
+
- **Cache Hit Rate**: Cached requests / Total requests
|
|
483
|
+
|
|
484
|
+
### Quality Metrics
|
|
485
|
+
- **Information Retention**: Key facts preserved
|
|
486
|
+
- **Entity Preservation**: Critical entities retained
|
|
487
|
+
- **Semantic Similarity**: Cosine similarity to original
|
|
488
|
+
- **User Satisfaction**: Feedback on answer quality
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## Mobile-Specific Optimizations
|
|
493
|
+
|
|
494
|
+
### Bandwidth Optimization
|
|
495
|
+
- Compress requests/responses
|
|
496
|
+
- Use delta encoding for updates
|
|
497
|
+
- Batch multiple requests
|
|
498
|
+
- Prefetch common queries
|
|
499
|
+
|
|
500
|
+
### Battery Optimization
|
|
501
|
+
- Minimize API calls
|
|
502
|
+
- Cache aggressively
|
|
503
|
+
- Use efficient models (mini)
|
|
504
|
+
- Reduce token usage
|
|
505
|
+
|
|
506
|
+
### Storage Optimization
|
|
507
|
+
- Limit cache size (10MB)
|
|
508
|
+
- LRU eviction
|
|
509
|
+
- Compress cached data
|
|
510
|
+
- Periodic cache cleanup
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Security
|
|
515
|
+
|
|
516
|
+
- **Data Minimization**: Only compress necessary data
|
|
517
|
+
- **Cache Encryption**: Encrypt cached contexts
|
|
518
|
+
- **PII Handling**: Remove PII before compression
|
|
519
|
+
- **Audit Logging**: Log compression operations
|
|
520
|
+
- **Rate Limiting**: Limit compression requests per user
|
|
521
|
+
```
|
|
522
|
+
|