claude-autopm 2.8.1 → 2.8.3
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/README.md +399 -529
- package/bin/autopm.js +2 -0
- package/bin/commands/plugin.js +395 -0
- package/bin/commands/team.js +184 -10
- package/install/install.js +223 -4
- package/lib/plugins/PluginManager.js +1328 -0
- package/lib/plugins/PluginManager.old.js +400 -0
- package/package.json +5 -1
- package/packages/plugin-ai/LICENSE +21 -0
- package/packages/plugin-ai/README.md +316 -0
- package/packages/plugin-ai/agents/anthropic-claude-expert.md +579 -0
- package/packages/plugin-ai/agents/azure-openai-expert.md +1411 -0
- package/packages/plugin-ai/agents/google-a2a-expert.md +1445 -0
- package/packages/plugin-ai/agents/huggingface-expert.md +2131 -0
- package/packages/plugin-ai/agents/langchain-expert.md +1427 -0
- package/packages/plugin-ai/commands/a2a-setup.md +886 -0
- package/packages/plugin-ai/commands/ai-model-deployment.md +481 -0
- package/packages/plugin-ai/commands/anthropic-optimize.md +793 -0
- package/packages/plugin-ai/commands/huggingface-deploy.md +789 -0
- package/packages/plugin-ai/commands/langchain-optimize.md +807 -0
- package/packages/plugin-ai/commands/llm-optimize.md +348 -0
- package/packages/plugin-ai/commands/openai-optimize.md +863 -0
- package/packages/plugin-ai/commands/rag-optimize.md +841 -0
- package/packages/plugin-ai/commands/rag-setup-scaffold.md +382 -0
- package/packages/plugin-ai/package.json +66 -0
- package/packages/plugin-ai/plugin.json +519 -0
- package/packages/plugin-ai/rules/ai-model-standards.md +449 -0
- package/packages/plugin-ai/rules/prompt-engineering-standards.md +509 -0
- package/packages/plugin-ai/scripts/examples/huggingface-inference-example.py +145 -0
- package/packages/plugin-ai/scripts/examples/langchain-rag-example.py +366 -0
- package/packages/plugin-ai/scripts/examples/mlflow-tracking-example.py +224 -0
- package/packages/plugin-ai/scripts/examples/openai-chat-example.py +425 -0
- package/packages/plugin-cloud/README.md +268 -0
- package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-cloud/commands/cloud-cost-optimize.md +243 -0
- package/packages/plugin-cloud/commands/cloud-validate.md +196 -0
- package/packages/plugin-cloud/hooks/pre-cloud-deploy.js +456 -0
- package/packages/plugin-cloud/package.json +64 -0
- package/packages/plugin-cloud/plugin.json +338 -0
- package/packages/plugin-cloud/rules/cloud-security-compliance.md +313 -0
- package/packages/plugin-cloud/scripts/examples/aws-validate.sh +30 -0
- package/packages/plugin-cloud/scripts/examples/azure-setup.sh +33 -0
- package/packages/plugin-cloud/scripts/examples/gcp-setup.sh +39 -0
- package/packages/plugin-cloud/scripts/examples/k8s-validate.sh +40 -0
- package/packages/plugin-cloud/scripts/examples/terraform-init.sh +26 -0
- package/packages/plugin-core/README.md +274 -0
- package/packages/plugin-core/commands/code-rabbit.md +128 -0
- package/packages/plugin-core/commands/prompt.md +9 -0
- package/packages/plugin-core/commands/re-init.md +9 -0
- package/packages/plugin-core/hooks/context7-reminder.md +29 -0
- package/packages/plugin-core/hooks/enforce-agents.js +125 -0
- package/packages/plugin-core/hooks/enforce-agents.sh +35 -0
- package/packages/plugin-core/hooks/pre-agent-context7.js +224 -0
- package/packages/plugin-core/hooks/pre-command-context7.js +229 -0
- package/packages/plugin-core/hooks/strict-enforce-agents.sh +39 -0
- package/packages/plugin-core/hooks/test-hook.sh +21 -0
- package/packages/plugin-core/hooks/unified-context7-enforcement.sh +38 -0
- package/packages/plugin-core/package.json +45 -0
- package/packages/plugin-core/plugin.json +387 -0
- package/packages/plugin-core/rules/agent-coordination.md +549 -0
- package/packages/plugin-core/rules/agent-mandatory.md +170 -0
- package/packages/plugin-core/rules/command-pipelines.md +208 -0
- package/packages/plugin-core/rules/context-optimization.md +176 -0
- package/packages/plugin-core/rules/context7-enforcement.md +327 -0
- package/packages/plugin-core/rules/datetime.md +122 -0
- package/packages/plugin-core/rules/definition-of-done.md +272 -0
- package/packages/plugin-core/rules/development-environments.md +19 -0
- package/packages/plugin-core/rules/development-workflow.md +198 -0
- package/packages/plugin-core/rules/framework-path-rules.md +180 -0
- package/packages/plugin-core/rules/frontmatter-operations.md +64 -0
- package/packages/plugin-core/rules/git-strategy.md +237 -0
- package/packages/plugin-core/rules/golden-rules.md +181 -0
- package/packages/plugin-core/rules/naming-conventions.md +111 -0
- package/packages/plugin-core/rules/no-pr-workflow.md +183 -0
- package/packages/plugin-core/rules/pipeline-mandatory.md +109 -0
- package/packages/plugin-core/rules/security-checklist.md +318 -0
- package/packages/plugin-core/rules/standard-patterns.md +197 -0
- package/packages/plugin-core/rules/strip-frontmatter.md +85 -0
- package/packages/plugin-core/rules/tdd.enforcement.md +103 -0
- package/packages/plugin-core/rules/use-ast-grep.md +113 -0
- package/packages/plugin-core/scripts/lib/datetime-utils.sh +254 -0
- package/packages/plugin-core/scripts/lib/frontmatter-utils.sh +294 -0
- package/packages/plugin-core/scripts/lib/github-utils.sh +221 -0
- package/packages/plugin-core/scripts/lib/logging-utils.sh +199 -0
- package/packages/plugin-core/scripts/lib/validation-utils.sh +339 -0
- package/packages/plugin-core/scripts/mcp/add.sh +7 -0
- package/packages/plugin-core/scripts/mcp/disable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/enable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/list.sh +7 -0
- package/packages/plugin-core/scripts/mcp/sync.sh +8 -0
- package/packages/plugin-data/README.md +315 -0
- package/packages/plugin-data/agents/airflow-orchestration-expert.md +158 -0
- package/packages/plugin-data/agents/kedro-pipeline-expert.md +304 -0
- package/packages/plugin-data/agents/langgraph-workflow-expert.md +530 -0
- package/packages/plugin-data/commands/airflow-dag-scaffold.md +413 -0
- package/packages/plugin-data/commands/kafka-pipeline-scaffold.md +503 -0
- package/packages/plugin-data/package.json +66 -0
- package/packages/plugin-data/plugin.json +294 -0
- package/packages/plugin-data/rules/data-quality-standards.md +373 -0
- package/packages/plugin-data/rules/etl-pipeline-standards.md +255 -0
- package/packages/plugin-data/scripts/examples/airflow-dag-example.py +245 -0
- package/packages/plugin-data/scripts/examples/dbt-transform-example.sql +238 -0
- package/packages/plugin-data/scripts/examples/kafka-streaming-example.py +257 -0
- package/packages/plugin-data/scripts/examples/pandas-etl-example.py +332 -0
- package/packages/plugin-databases/README.md +330 -0
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/bigquery-expert.md +24 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/cosmosdb-expert.md +22 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/mongodb-expert.md +24 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/postgresql-expert.md +23 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/redis-expert.md +29 -7
- package/packages/plugin-databases/commands/db-optimize.md +612 -0
- package/packages/plugin-databases/package.json +60 -0
- package/packages/plugin-databases/plugin.json +237 -0
- package/packages/plugin-databases/rules/database-management-strategy.md +146 -0
- package/packages/plugin-databases/rules/database-pipeline.md +316 -0
- package/packages/plugin-databases/scripts/examples/bigquery-cost-analyze.sh +160 -0
- package/packages/plugin-databases/scripts/examples/cosmosdb-ru-optimize.sh +163 -0
- package/packages/plugin-databases/scripts/examples/mongodb-shard-check.sh +120 -0
- package/packages/plugin-databases/scripts/examples/postgres-index-analyze.sh +95 -0
- package/packages/plugin-databases/scripts/examples/redis-cache-stats.sh +121 -0
- package/packages/plugin-devops/README.md +367 -0
- package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/github-operations-specialist.md +1 -1
- package/packages/plugin-devops/commands/ci-pipeline-create.md +581 -0
- package/packages/plugin-devops/commands/docker-optimize.md +493 -0
- package/packages/plugin-devops/hooks/pre-docker-build.js +472 -0
- package/packages/plugin-devops/package.json +61 -0
- package/packages/plugin-devops/plugin.json +302 -0
- package/packages/plugin-devops/rules/github-operations.md +92 -0
- package/packages/plugin-devops/scripts/examples/docker-build-multistage.sh +43 -0
- package/packages/plugin-devops/scripts/examples/docker-compose-validate.sh +74 -0
- package/packages/plugin-devops/scripts/examples/github-workflow-validate.sh +48 -0
- package/packages/plugin-devops/scripts/examples/prometheus-health-check.sh +58 -0
- package/packages/plugin-devops/scripts/examples/ssh-key-setup.sh +74 -0
- package/packages/plugin-frameworks/README.md +309 -0
- package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/e2e-test-engineer.md +219 -0
- package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/react-frontend-engineer.md +176 -0
- package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/tailwindcss-expert.md +251 -0
- package/packages/plugin-frameworks/commands/nextjs-optimize.md +692 -0
- package/packages/plugin-frameworks/commands/react-optimize.md +583 -0
- package/packages/plugin-frameworks/package.json +59 -0
- package/packages/plugin-frameworks/plugin.json +224 -0
- package/packages/plugin-frameworks/rules/performance-guidelines.md +403 -0
- package/packages/plugin-frameworks/scripts/examples/react-component-perf.sh +34 -0
- package/packages/plugin-frameworks/scripts/examples/tailwind-optimize.sh +44 -0
- package/packages/plugin-frameworks/scripts/examples/vue-composition-check.sh +41 -0
- package/packages/plugin-languages/README.md +333 -0
- package/packages/plugin-languages/commands/javascript-optimize.md +636 -0
- package/packages/plugin-languages/commands/nodejs-api-scaffold.md +341 -0
- package/packages/plugin-languages/commands/nodejs-optimize.md +689 -0
- package/packages/plugin-languages/commands/python-api-scaffold.md +261 -0
- package/packages/plugin-languages/commands/python-optimize.md +593 -0
- package/packages/plugin-languages/package.json +65 -0
- package/packages/plugin-languages/plugin.json +265 -0
- package/packages/plugin-languages/rules/code-quality-standards.md +496 -0
- package/packages/plugin-languages/rules/testing-standards.md +768 -0
- package/packages/plugin-languages/scripts/examples/bash-production-script.sh +520 -0
- package/packages/plugin-languages/scripts/examples/javascript-es6-patterns.js +291 -0
- package/packages/plugin-languages/scripts/examples/nodejs-async-iteration.js +360 -0
- package/packages/plugin-languages/scripts/examples/python-async-patterns.py +289 -0
- package/packages/plugin-languages/scripts/examples/typescript-patterns.ts +432 -0
- package/packages/plugin-ml/README.md +430 -0
- package/packages/plugin-ml/agents/automl-expert.md +326 -0
- package/packages/plugin-ml/agents/computer-vision-expert.md +550 -0
- package/packages/plugin-ml/agents/gradient-boosting-expert.md +455 -0
- package/packages/plugin-ml/agents/neural-network-architect.md +1228 -0
- package/packages/plugin-ml/agents/nlp-transformer-expert.md +584 -0
- package/packages/plugin-ml/agents/pytorch-expert.md +412 -0
- package/packages/plugin-ml/agents/reinforcement-learning-expert.md +2088 -0
- package/packages/plugin-ml/agents/scikit-learn-expert.md +228 -0
- package/packages/plugin-ml/agents/tensorflow-keras-expert.md +509 -0
- package/packages/plugin-ml/agents/time-series-expert.md +303 -0
- package/packages/plugin-ml/commands/ml-automl.md +572 -0
- package/packages/plugin-ml/commands/ml-train-optimize.md +657 -0
- package/packages/plugin-ml/package.json +52 -0
- package/packages/plugin-ml/plugin.json +338 -0
- package/packages/plugin-pm/README.md +368 -0
- package/packages/plugin-pm/claudeautopm-plugin-pm-2.0.0.tgz +0 -0
- package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
- package/packages/plugin-pm/package.json +57 -0
- package/packages/plugin-pm/plugin.json +503 -0
- package/packages/plugin-testing/README.md +401 -0
- package/{autopm/.claude/agents/testing → packages/plugin-testing/agents}/frontend-testing-engineer.md +373 -0
- package/packages/plugin-testing/commands/jest-optimize.md +800 -0
- package/packages/plugin-testing/commands/playwright-optimize.md +887 -0
- package/packages/plugin-testing/commands/test-coverage.md +512 -0
- package/packages/plugin-testing/commands/test-performance.md +1041 -0
- package/packages/plugin-testing/commands/test-setup.md +414 -0
- package/packages/plugin-testing/package.json +40 -0
- package/packages/plugin-testing/plugin.json +197 -0
- package/packages/plugin-testing/rules/test-coverage-requirements.md +581 -0
- package/packages/plugin-testing/rules/testing-standards.md +529 -0
- package/packages/plugin-testing/scripts/examples/react-testing-example.test.jsx +460 -0
- package/packages/plugin-testing/scripts/examples/vitest-config-example.js +352 -0
- package/packages/plugin-testing/scripts/examples/vue-testing-example.test.js +586 -0
- package/scripts/publish-plugins.sh +166 -0
- package/autopm/.claude/agents/data/airflow-orchestration-expert.md +0 -52
- package/autopm/.claude/agents/data/kedro-pipeline-expert.md +0 -50
- package/autopm/.claude/agents/integration/message-queue-engineer.md +0 -794
- package/autopm/.claude/commands/ai/langgraph-workflow.md +0 -65
- package/autopm/.claude/commands/ai/openai-chat.md +0 -65
- package/autopm/.claude/commands/playwright/test-scaffold.md +0 -38
- package/autopm/.claude/commands/python/api-scaffold.md +0 -50
- package/autopm/.claude/commands/python/docs-query.md +0 -48
- package/autopm/.claude/commands/testing/prime.md +0 -314
- package/autopm/.claude/commands/testing/run.md +0 -125
- package/autopm/.claude/commands/ui/bootstrap-scaffold.md +0 -65
- package/autopm/.claude/rules/database-management-strategy.md +0 -17
- package/autopm/.claude/rules/database-pipeline.md +0 -94
- package/autopm/.claude/rules/ux-design-rules.md +0 -209
- package/autopm/.claude/rules/visual-testing.md +0 -223
- package/autopm/.claude/scripts/azure/README.md +0 -192
- package/autopm/.claude/scripts/azure/active-work.js +0 -524
- package/autopm/.claude/scripts/azure/active-work.sh +0 -20
- package/autopm/.claude/scripts/azure/blocked.js +0 -520
- package/autopm/.claude/scripts/azure/blocked.sh +0 -20
- package/autopm/.claude/scripts/azure/daily.js +0 -533
- package/autopm/.claude/scripts/azure/daily.sh +0 -20
- package/autopm/.claude/scripts/azure/dashboard.js +0 -970
- package/autopm/.claude/scripts/azure/dashboard.sh +0 -20
- package/autopm/.claude/scripts/azure/feature-list.js +0 -254
- package/autopm/.claude/scripts/azure/feature-list.sh +0 -20
- package/autopm/.claude/scripts/azure/feature-show.js +0 -7
- package/autopm/.claude/scripts/azure/feature-show.sh +0 -20
- package/autopm/.claude/scripts/azure/feature-status.js +0 -604
- package/autopm/.claude/scripts/azure/feature-status.sh +0 -20
- package/autopm/.claude/scripts/azure/help.js +0 -342
- package/autopm/.claude/scripts/azure/help.sh +0 -20
- package/autopm/.claude/scripts/azure/next-task.js +0 -508
- package/autopm/.claude/scripts/azure/next-task.sh +0 -20
- package/autopm/.claude/scripts/azure/search.js +0 -469
- package/autopm/.claude/scripts/azure/search.sh +0 -20
- package/autopm/.claude/scripts/azure/setup.js +0 -745
- package/autopm/.claude/scripts/azure/setup.sh +0 -20
- package/autopm/.claude/scripts/azure/sprint-report.js +0 -1012
- package/autopm/.claude/scripts/azure/sprint-report.sh +0 -20
- package/autopm/.claude/scripts/azure/sync.js +0 -563
- package/autopm/.claude/scripts/azure/sync.sh +0 -20
- package/autopm/.claude/scripts/azure/us-list.js +0 -210
- package/autopm/.claude/scripts/azure/us-list.sh +0 -20
- package/autopm/.claude/scripts/azure/us-status.js +0 -238
- package/autopm/.claude/scripts/azure/us-status.sh +0 -20
- package/autopm/.claude/scripts/azure/validate.js +0 -626
- package/autopm/.claude/scripts/azure/validate.sh +0 -20
- package/autopm/.claude/scripts/azure/wrapper-template.sh +0 -20
- package/autopm/.claude/scripts/github/dependency-tracker.js +0 -554
- package/autopm/.claude/scripts/github/dependency-validator.js +0 -545
- package/autopm/.claude/scripts/github/dependency-visualizer.js +0 -477
- package/bin/node/azure-feature-show.js +0 -7
- /package/{autopm/.claude/agents/cloud → packages/plugin-ai/agents}/gemini-api-expert.md +0 -0
- /package/{autopm/.claude/agents/data → packages/plugin-ai/agents}/langgraph-workflow-expert.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-ai/agents}/openai-python-expert.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/aws-cloud-architect.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/azure-cloud-architect.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/gcp-cloud-architect.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/gcp-cloud-functions-engineer.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/kubernetes-orchestrator.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/terraform-infrastructure-expert.md +0 -0
- /package/{autopm/.claude/commands/cloud → packages/plugin-cloud/commands}/infra-deploy.md +0 -0
- /package/{autopm/.claude/commands/kubernetes/deploy.md → packages/plugin-cloud/commands/k8s-deploy.md} +0 -0
- /package/{autopm/.claude/commands/infrastructure → packages/plugin-cloud/commands}/ssh-security.md +0 -0
- /package/{autopm/.claude/commands/infrastructure → packages/plugin-cloud/commands}/traefik-setup.md +0 -0
- /package/{autopm/.claude → packages/plugin-cloud}/rules/infrastructure-pipeline.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/agent-manager.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/code-analyzer.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/file-analyzer.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/test-runner.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/rules/ai-integration-patterns.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/rules/performance-guidelines.md +0 -0
- /package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/azure-devops-specialist.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/docker-containerization-expert.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/mcp-context-manager.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/observability-engineer.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/ssh-operations-expert.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/traefik-proxy-expert.md +0 -0
- /package/{autopm/.claude/commands/github → packages/plugin-devops/commands}/workflow-create.md +0 -0
- /package/{autopm/.claude → packages/plugin-devops}/rules/ci-cd-kubernetes-strategy.md +0 -0
- /package/{autopm/.claude → packages/plugin-devops}/rules/devops-troubleshooting-playbook.md +0 -0
- /package/{autopm/.claude → packages/plugin-devops}/rules/docker-first-development.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/nats-messaging-expert.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/react-ui-expert.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/ux-design-expert.md +0 -0
- /package/{autopm/.claude/commands/react → packages/plugin-frameworks/commands}/app-scaffold.md +0 -0
- /package/{autopm/.claude/commands/ui → packages/plugin-frameworks/commands}/tailwind-system.md +0 -0
- /package/{autopm/.claude → packages/plugin-frameworks}/rules/ui-development-standards.md +0 -0
- /package/{autopm/.claude → packages/plugin-frameworks}/rules/ui-framework-rules.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/bash-scripting-expert.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/javascript-frontend-engineer.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/nodejs-backend-engineer.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/python-backend-engineer.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/python-backend-expert.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/COMMANDS.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/COMMAND_MAPPING.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/INTEGRATION_FIX.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/README.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/active-work.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/aliases.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/blocked-items.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/clean.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/docs-query.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-decompose.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-list.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-new.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-show.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-start.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/fix-integration-example.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/help.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/import-us.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/init.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/next-task.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/search.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/sprint-status.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/standup.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/sync-all.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-analyze.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-close.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-edit.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-list.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-new.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-reopen.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-show.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-start.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-status.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-sync.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-edit.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-list.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-new.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-parse.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-show.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-status.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/validate.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/work-item-sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/blocked.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/clean.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-create.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-prime.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-update.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-close.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-decompose.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-edit.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-list.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-merge.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-oneshot.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-refresh.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-show.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-split.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-start.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync-modular.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync-original.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/help.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/import.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/in-progress.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/init.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-analyze.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-close.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-edit.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-reopen.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-show.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-start.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/next.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-edit.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-list.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-new.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-parse.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/search.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/standup.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/test-reference-update.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/validate.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/what-next.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/analytics.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/blocked.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/blocked.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/clean.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-create.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-prime.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-update.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-close.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-edit.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-list.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-show.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-show.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-split.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-start/epic-start.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-start/epic-start.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-status.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-status.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/README.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/create-epic-issue.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/create-task-issues.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/update-epic-file.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/update-references.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/help.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/help.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/in-progress.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/in-progress.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/init.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/init.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-close.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-edit.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-show.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-start.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/format-comment.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/gather-updates.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/post-comment.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/preflight-validation.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/update-frontmatter.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/README.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/epic-discovery.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/logger.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/next.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/next.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/optimize.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/pr-create.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/pr-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-list.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-new.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-parse.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-status.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-status.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/release.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/search.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/search.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/standup.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/standup.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/status.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/status.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/sync-batch.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/sync.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/template-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/template-new.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/validate.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/validate.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/what-next.js +0 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
LangChain RAG Example - Context7 Best Practices
|
|
4
|
+
|
|
5
|
+
Demonstrates LangChain RAG patterns from Context7:
|
|
6
|
+
- RunnablePassthrough.assign() for context injection
|
|
7
|
+
- Vector store retrieval with MMR
|
|
8
|
+
- RAG chain composition
|
|
9
|
+
- Document chunking and embedding
|
|
10
|
+
- Contextual compression for relevance
|
|
11
|
+
|
|
12
|
+
Source: /langchain-ai/langchain (150 snippets, trust 9.2)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import os
|
|
16
|
+
import logging
|
|
17
|
+
from typing import List
|
|
18
|
+
from langchain_community.document_loaders import TextLoader
|
|
19
|
+
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
|
20
|
+
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
|
|
21
|
+
from langchain_community.vectorstores import Chroma
|
|
22
|
+
from langchain_core.prompts import ChatPromptTemplate
|
|
23
|
+
from langchain_core.runnables import RunnablePassthrough
|
|
24
|
+
from langchain_core.output_parsers import StrOutputParser
|
|
25
|
+
from operator import itemgetter
|
|
26
|
+
|
|
27
|
+
logging.basicConfig(level=logging.INFO)
|
|
28
|
+
logger = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# ===================================================================
|
|
32
|
+
# CONTEXT7 PATTERN: Document Ingestion and Chunking
|
|
33
|
+
# ===================================================================
|
|
34
|
+
|
|
35
|
+
def create_sample_documents():
|
|
36
|
+
"""Create sample documents for demonstration"""
|
|
37
|
+
documents = [
|
|
38
|
+
"""
|
|
39
|
+
Python is a high-level, interpreted programming language known for its simplicity
|
|
40
|
+
and readability. It was created by Guido van Rossum and first released in 1991.
|
|
41
|
+
Python supports multiple programming paradigms including procedural, object-oriented,
|
|
42
|
+
and functional programming. It has a comprehensive standard library and a large
|
|
43
|
+
ecosystem of third-party packages available through PyPI.
|
|
44
|
+
""",
|
|
45
|
+
"""
|
|
46
|
+
Machine Learning is a subset of artificial intelligence that focuses on the
|
|
47
|
+
development of algorithms that can learn from and make predictions on data.
|
|
48
|
+
Python is one of the most popular languages for machine learning due to libraries
|
|
49
|
+
like scikit-learn, TensorFlow, and PyTorch. These libraries provide implementations
|
|
50
|
+
of various ML algorithms including classification, regression, and clustering.
|
|
51
|
+
""",
|
|
52
|
+
"""
|
|
53
|
+
LangChain is a framework for developing applications powered by language models.
|
|
54
|
+
It provides abstractions for working with LLMs, including chains, agents, and
|
|
55
|
+
retrievers. LangChain supports various vector stores for retrieval-augmented
|
|
56
|
+
generation (RAG), including Chroma, FAISS, and Pinecone. RAG combines the power
|
|
57
|
+
of language models with external knowledge bases for more accurate responses.
|
|
58
|
+
""",
|
|
59
|
+
"""
|
|
60
|
+
Vector databases store high-dimensional vectors (embeddings) and enable efficient
|
|
61
|
+
similarity search. They are essential for RAG systems because they allow quick
|
|
62
|
+
retrieval of relevant documents based on semantic similarity. Popular vector
|
|
63
|
+
databases include Chroma (lightweight, local), Pinecone (cloud-based), and
|
|
64
|
+
FAISS (Facebook AI Similarity Search). Embeddings are typically generated
|
|
65
|
+
using models like OpenAI's text-embedding-3-small or sentence transformers.
|
|
66
|
+
"""
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
return documents
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def ingest_and_chunk_documents(texts: List[str]) -> List:
|
|
73
|
+
"""
|
|
74
|
+
Ingest and chunk documents with Context7 best practices.
|
|
75
|
+
|
|
76
|
+
Context7 Pattern: RecursiveCharacterTextSplitter with optimal parameters
|
|
77
|
+
"""
|
|
78
|
+
logger.info("Chunking documents...")
|
|
79
|
+
|
|
80
|
+
# Context7 recommended: RecursiveCharacterTextSplitter
|
|
81
|
+
text_splitter = RecursiveCharacterTextSplitter(
|
|
82
|
+
chunk_size=512, # Optimal for embeddings
|
|
83
|
+
chunk_overlap=50, # Maintain context across chunks
|
|
84
|
+
length_function=len,
|
|
85
|
+
separators=["\n\n", "\n", " ", ""] # Hierarchical splitting
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
# Split documents
|
|
89
|
+
chunks = []
|
|
90
|
+
for i, text in enumerate(texts):
|
|
91
|
+
splits = text_splitter.split_text(text.strip())
|
|
92
|
+
for j, split in enumerate(splits):
|
|
93
|
+
chunks.append({
|
|
94
|
+
"page_content": split,
|
|
95
|
+
"metadata": {"source": f"doc_{i}", "chunk": j}
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
logger.info(f"✓ Created {len(chunks)} chunks from {len(texts)} documents")
|
|
99
|
+
return chunks
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
# ===================================================================
|
|
103
|
+
# CONTEXT7 PATTERN: Vector Store Creation
|
|
104
|
+
# ===================================================================
|
|
105
|
+
|
|
106
|
+
def create_vector_store(chunks: List[dict], persist_dir: str = "./chroma_db") -> Chroma:
|
|
107
|
+
"""
|
|
108
|
+
Create vector store with Context7 best practices.
|
|
109
|
+
|
|
110
|
+
Context7 Pattern: Chroma with text-embedding-3-small
|
|
111
|
+
"""
|
|
112
|
+
logger.info("Creating vector store...")
|
|
113
|
+
|
|
114
|
+
# Context7 recommended: text-embedding-3-small (cost-effective)
|
|
115
|
+
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
|
|
116
|
+
|
|
117
|
+
# Extract text and metadata
|
|
118
|
+
texts = [chunk["page_content"] for chunk in chunks]
|
|
119
|
+
metadatas = [chunk["metadata"] for chunk in chunks]
|
|
120
|
+
|
|
121
|
+
# Create Chroma vector store
|
|
122
|
+
vectorstore = Chroma.from_texts(
|
|
123
|
+
texts=texts,
|
|
124
|
+
embedding=embeddings,
|
|
125
|
+
metadatas=metadatas,
|
|
126
|
+
persist_directory=persist_dir
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
logger.info(f"✓ Vector store created with {len(texts)} documents")
|
|
130
|
+
return vectorstore
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# ===================================================================
|
|
134
|
+
# CONTEXT7 PATTERN: Retriever Configuration
|
|
135
|
+
# ===================================================================
|
|
136
|
+
|
|
137
|
+
def create_mmr_retriever(vectorstore: Chroma, k: int = 4):
|
|
138
|
+
"""
|
|
139
|
+
Create MMR retriever with Context7 best practices.
|
|
140
|
+
|
|
141
|
+
Context7 Pattern: MMR (Maximal Marginal Relevance) for diversity
|
|
142
|
+
"""
|
|
143
|
+
logger.info("Creating MMR retriever...")
|
|
144
|
+
|
|
145
|
+
# Context7 recommended: MMR for diverse, relevant results
|
|
146
|
+
retriever = vectorstore.as_retriever(
|
|
147
|
+
search_type="mmr",
|
|
148
|
+
search_kwargs={
|
|
149
|
+
"k": k, # Number of documents to return
|
|
150
|
+
"fetch_k": k * 2, # Fetch more candidates
|
|
151
|
+
"lambda_mult": 0.7 # Balance relevance (1.0) vs diversity (0.0)
|
|
152
|
+
}
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
logger.info(f"✓ MMR retriever created (k={k}, fetch_k={k*2}, lambda=0.7)")
|
|
156
|
+
return retriever
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
# ===================================================================
|
|
160
|
+
# CONTEXT7 PATTERN: RAG Chain with RunnablePassthrough.assign()
|
|
161
|
+
# ===================================================================
|
|
162
|
+
|
|
163
|
+
def create_rag_chain(retriever):
|
|
164
|
+
"""
|
|
165
|
+
Create RAG chain with Context7 best practices.
|
|
166
|
+
|
|
167
|
+
Context7 Pattern: RunnablePassthrough.assign() for elegant context handling
|
|
168
|
+
"""
|
|
169
|
+
logger.info("Creating RAG chain...")
|
|
170
|
+
|
|
171
|
+
# Context7 recommended prompt template
|
|
172
|
+
template = """Answer the question based ONLY on the following context.
|
|
173
|
+
If you cannot answer the question based on the context, say "I don't have enough information to answer."
|
|
174
|
+
|
|
175
|
+
Context:
|
|
176
|
+
{context}
|
|
177
|
+
|
|
178
|
+
Question: {question}
|
|
179
|
+
|
|
180
|
+
Answer:"""
|
|
181
|
+
|
|
182
|
+
prompt = ChatPromptTemplate.from_template(template)
|
|
183
|
+
|
|
184
|
+
# Context7: Use low temperature for factual responses
|
|
185
|
+
llm = ChatOpenAI(model="gpt-4", temperature=0)
|
|
186
|
+
|
|
187
|
+
# Context7 pattern: RunnablePassthrough.assign() for clean composition
|
|
188
|
+
rag_chain = (
|
|
189
|
+
RunnablePassthrough.assign(
|
|
190
|
+
context=itemgetter("question")
|
|
191
|
+
| retriever
|
|
192
|
+
| (lambda docs: "\n\n".join(doc.page_content for doc in docs))
|
|
193
|
+
)
|
|
194
|
+
| prompt
|
|
195
|
+
| llm
|
|
196
|
+
| StrOutputParser()
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
logger.info("✓ RAG chain created with RunnablePassthrough.assign()")
|
|
200
|
+
return rag_chain
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
# ===================================================================
|
|
204
|
+
# CONTEXT7 PATTERN: RAG Query Examples
|
|
205
|
+
# ===================================================================
|
|
206
|
+
|
|
207
|
+
async def run_rag_queries(rag_chain):
|
|
208
|
+
"""Run example RAG queries to demonstrate retrieval"""
|
|
209
|
+
print("\n" + "=" * 60)
|
|
210
|
+
print("RAG QUERY EXAMPLES")
|
|
211
|
+
print("=" * 60 + "\n")
|
|
212
|
+
|
|
213
|
+
queries = [
|
|
214
|
+
{
|
|
215
|
+
"title": "Query 1: Python Basics",
|
|
216
|
+
"question": "What is Python and who created it?"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"title": "Query 2: Machine Learning",
|
|
220
|
+
"question": "What Python libraries are popular for machine learning?"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"title": "Query 3: RAG and LangChain",
|
|
224
|
+
"question": "What is RAG and how does LangChain support it?"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"title": "Query 4: Unknown Topic (should return 'insufficient info')",
|
|
228
|
+
"question": "What is quantum computing?"
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
|
|
232
|
+
for query in queries:
|
|
233
|
+
print(f"\n{query['title']}")
|
|
234
|
+
print("-" * 60)
|
|
235
|
+
print(f"Question: {query['question']}")
|
|
236
|
+
print()
|
|
237
|
+
|
|
238
|
+
try:
|
|
239
|
+
response = rag_chain.invoke({"question": query["question"]})
|
|
240
|
+
print(f"Answer: {response}")
|
|
241
|
+
|
|
242
|
+
except Exception as e:
|
|
243
|
+
logger.error(f"Query failed: {e}")
|
|
244
|
+
print(f"Error: {e}")
|
|
245
|
+
|
|
246
|
+
print()
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
# ===================================================================
|
|
250
|
+
# CONTEXT7 PATTERN: Retrieval Quality Testing
|
|
251
|
+
# ===================================================================
|
|
252
|
+
|
|
253
|
+
def test_retrieval_quality(retriever):
|
|
254
|
+
"""Test retrieval quality with sample queries"""
|
|
255
|
+
print("\n" + "=" * 60)
|
|
256
|
+
print("RETRIEVAL QUALITY TEST")
|
|
257
|
+
print("=" * 60 + "\n")
|
|
258
|
+
|
|
259
|
+
test_queries = [
|
|
260
|
+
"Python programming language",
|
|
261
|
+
"machine learning libraries",
|
|
262
|
+
"vector databases and embeddings"
|
|
263
|
+
]
|
|
264
|
+
|
|
265
|
+
for query in test_queries:
|
|
266
|
+
print(f"Query: '{query}'")
|
|
267
|
+
print("-" * 60)
|
|
268
|
+
|
|
269
|
+
# Retrieve documents
|
|
270
|
+
docs = retriever.get_relevant_documents(query)
|
|
271
|
+
|
|
272
|
+
for i, doc in enumerate(docs, 1):
|
|
273
|
+
preview = doc.page_content[:100].replace("\n", " ")
|
|
274
|
+
print(f"{i}. {preview}...")
|
|
275
|
+
|
|
276
|
+
print()
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
# ===================================================================
|
|
280
|
+
# MAIN DEMONSTRATION
|
|
281
|
+
# ===================================================================
|
|
282
|
+
|
|
283
|
+
def main():
|
|
284
|
+
"""Run complete RAG demonstration"""
|
|
285
|
+
print("\n" + "=" * 60)
|
|
286
|
+
print("LangChain RAG Example - Context7 Best Practices")
|
|
287
|
+
print("=" * 60 + "\n")
|
|
288
|
+
|
|
289
|
+
try:
|
|
290
|
+
# Check API key
|
|
291
|
+
if not os.getenv("OPENAI_API_KEY"):
|
|
292
|
+
raise ValueError("OPENAI_API_KEY environment variable not set")
|
|
293
|
+
|
|
294
|
+
# 1. Create sample documents
|
|
295
|
+
print("Step 1: Creating sample documents...")
|
|
296
|
+
documents = create_sample_documents()
|
|
297
|
+
print(f"✓ Created {len(documents)} sample documents\n")
|
|
298
|
+
|
|
299
|
+
# 2. Chunk documents
|
|
300
|
+
print("Step 2: Chunking documents...")
|
|
301
|
+
chunks = ingest_and_chunk_documents(documents)
|
|
302
|
+
print()
|
|
303
|
+
|
|
304
|
+
# 3. Create vector store
|
|
305
|
+
print("Step 3: Creating vector store...")
|
|
306
|
+
vectorstore = create_vector_store(chunks)
|
|
307
|
+
print()
|
|
308
|
+
|
|
309
|
+
# 4. Create retriever
|
|
310
|
+
print("Step 4: Creating MMR retriever...")
|
|
311
|
+
retriever = create_mmr_retriever(vectorstore, k=3)
|
|
312
|
+
print()
|
|
313
|
+
|
|
314
|
+
# 5. Test retrieval quality
|
|
315
|
+
test_retrieval_quality(retriever)
|
|
316
|
+
|
|
317
|
+
# 6. Create RAG chain
|
|
318
|
+
print("Step 5: Creating RAG chain...")
|
|
319
|
+
rag_chain = create_rag_chain(retriever)
|
|
320
|
+
print()
|
|
321
|
+
|
|
322
|
+
# 7. Run RAG queries
|
|
323
|
+
import asyncio
|
|
324
|
+
asyncio.run(run_rag_queries(rag_chain))
|
|
325
|
+
|
|
326
|
+
# Summary
|
|
327
|
+
print("\n" + "=" * 60)
|
|
328
|
+
print("RAG EXAMPLE COMPLETED SUCCESSFULLY")
|
|
329
|
+
print("=" * 60)
|
|
330
|
+
print("\nContext7 Patterns Demonstrated:")
|
|
331
|
+
print("1. ✅ RecursiveCharacterTextSplitter for hierarchical chunking")
|
|
332
|
+
print("2. ✅ text-embedding-3-small for cost-effective embeddings")
|
|
333
|
+
print("3. ✅ MMR retrieval for diverse, relevant results")
|
|
334
|
+
print("4. ✅ RunnablePassthrough.assign() for clean composition")
|
|
335
|
+
print("5. ✅ Temperature=0 for factual RAG responses")
|
|
336
|
+
print("6. ✅ Context boundary enforcement in prompt")
|
|
337
|
+
print("\nSource: /langchain-ai/langchain (150 snippets, trust 9.2)")
|
|
338
|
+
|
|
339
|
+
except ValueError as e:
|
|
340
|
+
logger.error(f"Configuration error: {e}")
|
|
341
|
+
print(f"\n❌ Error: {e}")
|
|
342
|
+
print("\nPlease set OPENAI_API_KEY environment variable:")
|
|
343
|
+
print("export OPENAI_API_KEY='your-api-key-here'")
|
|
344
|
+
|
|
345
|
+
except Exception as e:
|
|
346
|
+
logger.error(f"Unexpected error: {e}")
|
|
347
|
+
print(f"\n❌ Unexpected error: {e}")
|
|
348
|
+
import traceback
|
|
349
|
+
traceback.print_exc()
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
if __name__ == "__main__":
|
|
353
|
+
print("LangChain RAG Example - Context7 Best Practices")
|
|
354
|
+
print("=" * 60)
|
|
355
|
+
print("")
|
|
356
|
+
print("This example demonstrates Context7-verified patterns for:")
|
|
357
|
+
print("- Document chunking with RecursiveCharacterTextSplitter")
|
|
358
|
+
print("- Vector store creation with Chroma")
|
|
359
|
+
print("- MMR retrieval for diverse results")
|
|
360
|
+
print("- RAG chain composition with RunnablePassthrough.assign()")
|
|
361
|
+
print("- Context boundary enforcement")
|
|
362
|
+
print("")
|
|
363
|
+
print("Source: /langchain-ai/langchain (150 snippets, trust 9.2)")
|
|
364
|
+
print("")
|
|
365
|
+
|
|
366
|
+
main()
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
MLflow Tracking Example - Context7 Best Practices
|
|
4
|
+
|
|
5
|
+
Demonstrates MLflow patterns from Context7:
|
|
6
|
+
- Experiment tracking and organization
|
|
7
|
+
- Parameter and metric logging
|
|
8
|
+
- Model registry and versioning
|
|
9
|
+
- Artifact storage
|
|
10
|
+
- Run comparison
|
|
11
|
+
|
|
12
|
+
Source: /mlflow/mlflow (3,114 snippets, trust 9.1)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import mlflow
|
|
16
|
+
import mlflow.sklearn
|
|
17
|
+
from mlflow.tracking import MlflowClient
|
|
18
|
+
from sklearn.ensemble import RandomForestClassifier
|
|
19
|
+
from sklearn.datasets import load_iris
|
|
20
|
+
from sklearn.model_selection import train_test_split
|
|
21
|
+
from sklearn.metrics import accuracy_score, f1_score
|
|
22
|
+
import logging
|
|
23
|
+
|
|
24
|
+
logging.basicConfig(level=logging.INFO)
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# ===================================================================
|
|
29
|
+
# CONTEXT7 PATTERN: Experiment Organization
|
|
30
|
+
# ===================================================================
|
|
31
|
+
|
|
32
|
+
def setup_experiment(experiment_name: str = "iris-classification"):
|
|
33
|
+
"""
|
|
34
|
+
Context7 Pattern: Organize runs into experiments
|
|
35
|
+
"""
|
|
36
|
+
logger.info(f"Setting up experiment: {experiment_name}")
|
|
37
|
+
|
|
38
|
+
# Context7 pattern: Set experiment for organization
|
|
39
|
+
mlflow.set_experiment(experiment_name)
|
|
40
|
+
|
|
41
|
+
logger.info("✓ Experiment setup complete")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# ===================================================================
|
|
45
|
+
# CONTEXT7 PATTERN: Parameter and Metric Logging
|
|
46
|
+
# ===================================================================
|
|
47
|
+
|
|
48
|
+
def train_and_log_model(n_estimators: int, max_depth: int):
|
|
49
|
+
"""
|
|
50
|
+
Context7 Pattern: Log params, metrics, and models
|
|
51
|
+
"""
|
|
52
|
+
logger.info(f"Training model (n_estimators={n_estimators}, max_depth={max_depth})")
|
|
53
|
+
|
|
54
|
+
# Load data
|
|
55
|
+
iris = load_iris()
|
|
56
|
+
X_train, X_test, y_train, y_test = train_test_split(
|
|
57
|
+
iris.data, iris.target, test_size=0.2, random_state=42
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Context7 pattern: Use mlflow.start_run() context manager
|
|
61
|
+
with mlflow.start_run():
|
|
62
|
+
# Log parameters
|
|
63
|
+
mlflow.log_param("n_estimators", n_estimators)
|
|
64
|
+
mlflow.log_param("max_depth", max_depth)
|
|
65
|
+
mlflow.log_param("random_state", 42)
|
|
66
|
+
|
|
67
|
+
# Train model
|
|
68
|
+
model = RandomForestClassifier(
|
|
69
|
+
n_estimators=n_estimators,
|
|
70
|
+
max_depth=max_depth,
|
|
71
|
+
random_state=42
|
|
72
|
+
)
|
|
73
|
+
model.fit(X_train, y_train)
|
|
74
|
+
|
|
75
|
+
# Make predictions
|
|
76
|
+
y_pred = model.predict(X_test)
|
|
77
|
+
|
|
78
|
+
# Calculate metrics
|
|
79
|
+
accuracy = accuracy_score(y_test, y_pred)
|
|
80
|
+
f1 = f1_score(y_test, y_pred, average="weighted")
|
|
81
|
+
|
|
82
|
+
# Log metrics
|
|
83
|
+
mlflow.log_metric("accuracy", accuracy)
|
|
84
|
+
mlflow.log_metric("f1_score", f1)
|
|
85
|
+
|
|
86
|
+
# Context7 pattern: Log model with signature
|
|
87
|
+
mlflow.sklearn.log_model(
|
|
88
|
+
model,
|
|
89
|
+
"model",
|
|
90
|
+
registered_model_name="iris-classifier"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Log tags
|
|
94
|
+
mlflow.set_tag("model_type", "RandomForest")
|
|
95
|
+
mlflow.set_tag("dataset", "iris")
|
|
96
|
+
|
|
97
|
+
run_id = mlflow.active_run().info.run_id
|
|
98
|
+
logger.info(f"✓ Run complete: {run_id} (accuracy={accuracy:.3f})")
|
|
99
|
+
|
|
100
|
+
return run_id, accuracy, f1
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# ===================================================================
|
|
104
|
+
# CONTEXT7 PATTERN: Run Comparison
|
|
105
|
+
# ===================================================================
|
|
106
|
+
|
|
107
|
+
def compare_runs():
|
|
108
|
+
"""
|
|
109
|
+
Context7 Pattern: Compare multiple runs
|
|
110
|
+
"""
|
|
111
|
+
logger.info("Comparing multiple model configurations...")
|
|
112
|
+
|
|
113
|
+
configs = [
|
|
114
|
+
{"n_estimators": 10, "max_depth": 3},
|
|
115
|
+
{"n_estimators": 50, "max_depth": 5},
|
|
116
|
+
{"n_estimators": 100, "max_depth": 10},
|
|
117
|
+
]
|
|
118
|
+
|
|
119
|
+
results = []
|
|
120
|
+
|
|
121
|
+
for config in configs:
|
|
122
|
+
run_id, accuracy, f1 = train_and_log_model(**config)
|
|
123
|
+
results.append({
|
|
124
|
+
"run_id": run_id,
|
|
125
|
+
"config": config,
|
|
126
|
+
"accuracy": accuracy,
|
|
127
|
+
"f1": f1
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
logger.info("✓ Model comparison complete")
|
|
131
|
+
return results
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
# ===================================================================
|
|
135
|
+
# CONTEXT7 PATTERN: Model Registry
|
|
136
|
+
# ===================================================================
|
|
137
|
+
|
|
138
|
+
def get_best_model():
|
|
139
|
+
"""
|
|
140
|
+
Context7 Pattern: Retrieve best model from registry
|
|
141
|
+
"""
|
|
142
|
+
logger.info("Retrieving best model from registry...")
|
|
143
|
+
|
|
144
|
+
client = MlflowClient()
|
|
145
|
+
|
|
146
|
+
# Get all versions of registered model
|
|
147
|
+
model_name = "iris-classifier"
|
|
148
|
+
versions = client.search_model_versions(f"name='{model_name}'")
|
|
149
|
+
|
|
150
|
+
if not versions:
|
|
151
|
+
logger.warning("No registered models found")
|
|
152
|
+
return None
|
|
153
|
+
|
|
154
|
+
# Find version with highest accuracy (from tags/metrics)
|
|
155
|
+
best_version = None
|
|
156
|
+
best_accuracy = 0
|
|
157
|
+
|
|
158
|
+
for version in versions:
|
|
159
|
+
run = client.get_run(version.run_id)
|
|
160
|
+
accuracy = run.data.metrics.get("accuracy", 0)
|
|
161
|
+
|
|
162
|
+
if accuracy > best_accuracy:
|
|
163
|
+
best_accuracy = accuracy
|
|
164
|
+
best_version = version
|
|
165
|
+
|
|
166
|
+
if best_version:
|
|
167
|
+
logger.info(f"✓ Best model: v{best_version.version} (accuracy={best_accuracy:.3f})")
|
|
168
|
+
|
|
169
|
+
return best_version
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# ===================================================================
|
|
173
|
+
# MAIN DEMONSTRATION
|
|
174
|
+
# ===================================================================
|
|
175
|
+
|
|
176
|
+
def main():
|
|
177
|
+
"""Run complete MLflow tracking demonstration"""
|
|
178
|
+
print("\n" + "=" * 60)
|
|
179
|
+
print("MLflow Tracking Example - Context7 Best Practices")
|
|
180
|
+
print("=" * 60 + "\n")
|
|
181
|
+
|
|
182
|
+
# 1. Setup experiment
|
|
183
|
+
print("Step 1: Setting up experiment...")
|
|
184
|
+
setup_experiment()
|
|
185
|
+
print()
|
|
186
|
+
|
|
187
|
+
# 2. Compare multiple runs
|
|
188
|
+
print("Step 2: Training and comparing models...")
|
|
189
|
+
print("-" * 60)
|
|
190
|
+
results = compare_runs()
|
|
191
|
+
print()
|
|
192
|
+
|
|
193
|
+
# 3. Display results
|
|
194
|
+
print("Step 3: Run Comparison Results")
|
|
195
|
+
print("-" * 60)
|
|
196
|
+
for i, result in enumerate(results, 1):
|
|
197
|
+
config = result["config"]
|
|
198
|
+
print(f"{i}. n_estimators={config['n_estimators']}, max_depth={config['max_depth']}")
|
|
199
|
+
print(f" Accuracy: {result['accuracy']:.3f}, F1: {result['f1']:.3f}")
|
|
200
|
+
print(f" Run ID: {result['run_id'][:8]}...")
|
|
201
|
+
print()
|
|
202
|
+
|
|
203
|
+
# 4. Get best model
|
|
204
|
+
print("Step 4: Retrieving best model from registry...")
|
|
205
|
+
print("-" * 60)
|
|
206
|
+
best_model = get_best_model()
|
|
207
|
+
print()
|
|
208
|
+
|
|
209
|
+
# Summary
|
|
210
|
+
print("\n" + "=" * 60)
|
|
211
|
+
print("MLflow TRACKING COMPLETED SUCCESSFULLY")
|
|
212
|
+
print("=" * 60)
|
|
213
|
+
print("\nContext7 Patterns Demonstrated:")
|
|
214
|
+
print("1. ✅ Experiment organization with set_experiment()")
|
|
215
|
+
print("2. ✅ Parameter logging with log_param()")
|
|
216
|
+
print("3. ✅ Metric logging with log_metric()")
|
|
217
|
+
print("4. ✅ Model logging with sklearn.log_model()")
|
|
218
|
+
print("5. ✅ Model registry for versioning")
|
|
219
|
+
print("\nSource: /mlflow/mlflow (3,114 snippets, trust 9.1)")
|
|
220
|
+
print(f"\nView results: mlflow ui")
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
if __name__ == "__main__":
|
|
224
|
+
main()
|