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,481 @@
|
|
|
1
|
+
# AI Model Deployment Command
|
|
2
|
+
|
|
3
|
+
## Required Documentation Access
|
|
4
|
+
|
|
5
|
+
**MANDATORY:** Before deploying AI models, query Context7 for best practices:
|
|
6
|
+
|
|
7
|
+
**Documentation Queries:**
|
|
8
|
+
- `mcp://context7/mlflow/deployment` - MLflow model deployment patterns
|
|
9
|
+
- `mcp://context7/ml flow/tracking` - Experiment tracking and model registry
|
|
10
|
+
- `mcp://context7/openai/production` - OpenAI production deployment
|
|
11
|
+
- `mcp://context7/huggingface/inference` - HuggingFace model serving
|
|
12
|
+
- `mcp://context7/langchain/production` - LangChain production patterns
|
|
13
|
+
|
|
14
|
+
**Why This is Required:**
|
|
15
|
+
- Ensures deployment follows industry-standard MLOps practices
|
|
16
|
+
- Prevents production issues with proper model versioning
|
|
17
|
+
- Applies Context7-verified monitoring and logging strategies
|
|
18
|
+
- Uses optimized inference configurations
|
|
19
|
+
- Implements proper error handling and fallbacks
|
|
20
|
+
|
|
21
|
+
## Command Description
|
|
22
|
+
|
|
23
|
+
Generate production-ready AI model deployment infrastructure with Context7-verified patterns:
|
|
24
|
+
- Model versioning and registry (MLflow)
|
|
25
|
+
- API endpoint generation (FastAPI)
|
|
26
|
+
- Load balancing and scaling
|
|
27
|
+
- Monitoring and observability
|
|
28
|
+
- Error handling and fallbacks
|
|
29
|
+
- CI/CD integration
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
/ai:model-deploy <model-name>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Options
|
|
38
|
+
|
|
39
|
+
- `--model-type` - Model type (openai, huggingface, custom) [default: openai]
|
|
40
|
+
- `--framework` - Deployment framework (fastapi, flask, mlflow) [default: fastapi]
|
|
41
|
+
- `--monitoring` - Enable monitoring (prometheus, datadog, none) [default: prometheus]
|
|
42
|
+
- `--caching` - Enable response caching [default: true]
|
|
43
|
+
- `--rate-limiting` - Requests per minute [default: 60]
|
|
44
|
+
|
|
45
|
+
## Implementation Steps
|
|
46
|
+
|
|
47
|
+
1. **Query Context7 Documentation**
|
|
48
|
+
```python
|
|
49
|
+
# MANDATORY: Query these Context7 resources before scaffolding
|
|
50
|
+
- /mlflow/mlflow deployment patterns
|
|
51
|
+
- /openai/openai-python production best practices
|
|
52
|
+
- /huggingface/transformers inference optimization
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
2. **Create Project Structure**
|
|
56
|
+
```
|
|
57
|
+
<model-name>-deployment/
|
|
58
|
+
├── app/
|
|
59
|
+
│ ├── api/
|
|
60
|
+
│ │ ├── __init__.py
|
|
61
|
+
│ │ ├── routes.py # API endpoints
|
|
62
|
+
│ │ └── models.py # Pydantic models
|
|
63
|
+
│ ├── core/
|
|
64
|
+
│ │ ├── config.py # Configuration
|
|
65
|
+
│ │ ├── inference.py # Model inference logic
|
|
66
|
+
│ │ └── monitoring.py # Metrics and logging
|
|
67
|
+
│ └── main.py # FastAPI application
|
|
68
|
+
├── models/
|
|
69
|
+
│ └── registry/ # MLflow model registry
|
|
70
|
+
├── tests/
|
|
71
|
+
│ ├── test_api.py
|
|
72
|
+
│ ├── test_inference.py
|
|
73
|
+
│ └── test_monitoring.py
|
|
74
|
+
├── deployment/
|
|
75
|
+
│ ├── docker/
|
|
76
|
+
│ │ ├── Dockerfile
|
|
77
|
+
│ │ └── docker-compose.yml
|
|
78
|
+
│ └── kubernetes/
|
|
79
|
+
│ ├── deployment.yaml
|
|
80
|
+
│ └── service.yaml
|
|
81
|
+
├── monitoring/
|
|
82
|
+
│ ├── prometheus.yml
|
|
83
|
+
│ └── grafana-dashboard.json
|
|
84
|
+
├── .env.example
|
|
85
|
+
├── requirements.txt
|
|
86
|
+
└── README.md
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
3. **Generate FastAPI Application (Context7 Pattern)**
|
|
90
|
+
```python
|
|
91
|
+
# app/main.py - Context7 best practices
|
|
92
|
+
from fastapi import FastAPI, HTTPException, Depends
|
|
93
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
94
|
+
from fastapi.responses import JSONResponse
|
|
95
|
+
from prometheus_fastapi_instrumentator import Instrumentator
|
|
96
|
+
import logging
|
|
97
|
+
from contextlib import asynccontextmanager
|
|
98
|
+
|
|
99
|
+
from app.api.routes import router
|
|
100
|
+
from app.core.config import settings
|
|
101
|
+
from app.core.inference import ModelInference
|
|
102
|
+
|
|
103
|
+
# Context7 Pattern: Lifespan context manager for startup/shutdown
|
|
104
|
+
@asynccontextmanager
|
|
105
|
+
async def lifespan(app: FastAPI):
|
|
106
|
+
# Startup: Load model
|
|
107
|
+
logger.info("Loading AI model...")
|
|
108
|
+
app.state.model = ModelInference(settings.MODEL_PATH)
|
|
109
|
+
await app.state.model.load()
|
|
110
|
+
logger.info("Model loaded successfully")
|
|
111
|
+
|
|
112
|
+
yield
|
|
113
|
+
|
|
114
|
+
# Shutdown: Cleanup
|
|
115
|
+
logger.info("Shutting down...")
|
|
116
|
+
await app.state.model.cleanup()
|
|
117
|
+
|
|
118
|
+
app = FastAPI(
|
|
119
|
+
title="AI Model Deployment API",
|
|
120
|
+
description="Production-ready AI model serving",
|
|
121
|
+
version="1.0.0",
|
|
122
|
+
lifespan=lifespan
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Context7 Pattern: Prometheus metrics instrumentation
|
|
126
|
+
Instrumentator().instrument(app).expose(app)
|
|
127
|
+
|
|
128
|
+
# CORS middleware
|
|
129
|
+
app.add_middleware(
|
|
130
|
+
CORSMiddleware,
|
|
131
|
+
allow_origins=settings.ALLOWED_ORIGINS,
|
|
132
|
+
allow_credentials=True,
|
|
133
|
+
allow_methods=["*"],
|
|
134
|
+
allow_headers=["*"],
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
# Include API routes
|
|
138
|
+
app.include_router(router, prefix="/api/v1")
|
|
139
|
+
|
|
140
|
+
@app.get("/health")
|
|
141
|
+
async def health_check():
|
|
142
|
+
"""Health check endpoint"""
|
|
143
|
+
return {"status": "healthy", "model": "loaded"}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
4. **Generate Inference Logic (Context7 Pattern)**
|
|
147
|
+
```python
|
|
148
|
+
# app/core/inference.py - Context7 best practices
|
|
149
|
+
from typing import List, Dict, Any, Optional
|
|
150
|
+
import asyncio
|
|
151
|
+
from datetime import datetime, timedelta
|
|
152
|
+
import logging
|
|
153
|
+
from openai import AsyncOpenAI
|
|
154
|
+
from cachetools import TTLCache
|
|
155
|
+
|
|
156
|
+
logger = logging.getLogger(__name__)
|
|
157
|
+
|
|
158
|
+
class ModelInference:
|
|
159
|
+
"""
|
|
160
|
+
Model inference with Context7 best practices.
|
|
161
|
+
|
|
162
|
+
Context7 Patterns:
|
|
163
|
+
- AsyncOpenAI for non-blocking inference
|
|
164
|
+
- TTL caching for repeated queries
|
|
165
|
+
- Rate limiting and retry logic
|
|
166
|
+
- Comprehensive error handling
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
def __init__(self, model_name: str):
|
|
170
|
+
self.model_name = model_name
|
|
171
|
+
self.client: Optional[AsyncOpenAI] = None
|
|
172
|
+
# Context7 pattern: TTL cache for responses
|
|
173
|
+
self.cache = TTLCache(maxsize=1000, ttl=300) # 5 min cache
|
|
174
|
+
self.rate_limiter = RateLimiter(requests_per_minute=60)
|
|
175
|
+
|
|
176
|
+
async def load(self):
|
|
177
|
+
"""Load model and initialize client"""
|
|
178
|
+
try:
|
|
179
|
+
self.client = AsyncOpenAI(
|
|
180
|
+
api_key=settings.OPENAI_API_KEY,
|
|
181
|
+
max_retries=3,
|
|
182
|
+
timeout=60.0
|
|
183
|
+
)
|
|
184
|
+
logger.info(f"Loaded model: {self.model_name}")
|
|
185
|
+
except Exception as e:
|
|
186
|
+
logger.error(f"Failed to load model: {e}")
|
|
187
|
+
raise
|
|
188
|
+
|
|
189
|
+
async def predict(
|
|
190
|
+
self,
|
|
191
|
+
prompt: str,
|
|
192
|
+
temperature: float = 0.7,
|
|
193
|
+
max_tokens: int = 500,
|
|
194
|
+
use_cache: bool = True
|
|
195
|
+
) -> Dict[str, Any]:
|
|
196
|
+
"""
|
|
197
|
+
Run inference with caching and error handling.
|
|
198
|
+
|
|
199
|
+
Context7 Pattern: Cached async inference with retry
|
|
200
|
+
"""
|
|
201
|
+
# Check cache
|
|
202
|
+
cache_key = f"{prompt}:{temperature}:{max_tokens}"
|
|
203
|
+
if use_cache and cache_key in self.cache:
|
|
204
|
+
logger.info("Cache hit")
|
|
205
|
+
return self.cache[cache_key]
|
|
206
|
+
|
|
207
|
+
# Rate limiting
|
|
208
|
+
await self.rate_limiter.wait_if_needed()
|
|
209
|
+
|
|
210
|
+
# Inference with retry
|
|
211
|
+
for attempt in range(3):
|
|
212
|
+
try:
|
|
213
|
+
response = await self.client.chat.completions.create(
|
|
214
|
+
model=self.model_name,
|
|
215
|
+
messages=[{"role": "user", "content": prompt}],
|
|
216
|
+
temperature=temperature,
|
|
217
|
+
max_tokens=max_tokens
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
result = {
|
|
221
|
+
"text": response.choices[0].message.content,
|
|
222
|
+
"model": self.model_name,
|
|
223
|
+
"usage": {
|
|
224
|
+
"prompt_tokens": response.usage.prompt_tokens,
|
|
225
|
+
"completion_tokens": response.usage.completion_tokens,
|
|
226
|
+
"total_tokens": response.usage.total_tokens
|
|
227
|
+
},
|
|
228
|
+
"timestamp": datetime.utcnow().isoformat()
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
# Cache result
|
|
232
|
+
if use_cache:
|
|
233
|
+
self.cache[cache_key] = result
|
|
234
|
+
|
|
235
|
+
return result
|
|
236
|
+
|
|
237
|
+
except Exception as e:
|
|
238
|
+
logger.error(f"Inference attempt {attempt + 1} failed: {e}")
|
|
239
|
+
if attempt == 2:
|
|
240
|
+
raise
|
|
241
|
+
await asyncio.sleep(2 ** attempt) # Exponential backoff
|
|
242
|
+
|
|
243
|
+
async def batch_predict(
|
|
244
|
+
self,
|
|
245
|
+
prompts: List[str],
|
|
246
|
+
batch_size: int = 5
|
|
247
|
+
) -> List[Dict[str, Any]]:
|
|
248
|
+
"""
|
|
249
|
+
Batch inference with Context7 best practices.
|
|
250
|
+
|
|
251
|
+
Context7 Pattern: Concurrent batch processing
|
|
252
|
+
"""
|
|
253
|
+
results = []
|
|
254
|
+
|
|
255
|
+
for i in range(0, len(prompts), batch_size):
|
|
256
|
+
batch = prompts[i:i + batch_size]
|
|
257
|
+
|
|
258
|
+
# Process batch concurrently
|
|
259
|
+
tasks = [self.predict(prompt) for prompt in batch]
|
|
260
|
+
batch_results = await asyncio.gather(*tasks, return_exceptions=True)
|
|
261
|
+
|
|
262
|
+
for result in batch_results:
|
|
263
|
+
if isinstance(result, Exception):
|
|
264
|
+
logger.error(f"Batch prediction error: {result}")
|
|
265
|
+
results.append({"error": str(result)})
|
|
266
|
+
else:
|
|
267
|
+
results.append(result)
|
|
268
|
+
|
|
269
|
+
# Brief pause between batches
|
|
270
|
+
if i + batch_size < len(prompts):
|
|
271
|
+
await asyncio.sleep(0.5)
|
|
272
|
+
|
|
273
|
+
return results
|
|
274
|
+
|
|
275
|
+
async def cleanup(self):
|
|
276
|
+
"""Cleanup resources"""
|
|
277
|
+
if self.client:
|
|
278
|
+
await self.client.close()
|
|
279
|
+
logger.info("Client closed")
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
5. **Generate API Routes (Context7 Pattern)**
|
|
283
|
+
```python
|
|
284
|
+
# app/api/routes.py - Context7 best practices
|
|
285
|
+
from fastapi import APIRouter, HTTPException, Depends, Request
|
|
286
|
+
from pydantic import BaseModel, Field
|
|
287
|
+
from typing import List, Optional
|
|
288
|
+
import logging
|
|
289
|
+
|
|
290
|
+
from app.core.inference import ModelInference
|
|
291
|
+
|
|
292
|
+
logger = logging.getLogger(__name__)
|
|
293
|
+
router = APIRouter()
|
|
294
|
+
|
|
295
|
+
class PredictionRequest(BaseModel):
|
|
296
|
+
prompt: str = Field(..., min_length=1, max_length=10000)
|
|
297
|
+
temperature: float = Field(default=0.7, ge=0.0, le=2.0)
|
|
298
|
+
max_tokens: int = Field(default=500, ge=1, le=4000)
|
|
299
|
+
use_cache: bool = True
|
|
300
|
+
|
|
301
|
+
class PredictionResponse(BaseModel):
|
|
302
|
+
text: str
|
|
303
|
+
model: str
|
|
304
|
+
usage: dict
|
|
305
|
+
timestamp: str
|
|
306
|
+
|
|
307
|
+
def get_model(request: Request) -> ModelInference:
|
|
308
|
+
"""Dependency to get model from app state"""
|
|
309
|
+
return request.app.state.model
|
|
310
|
+
|
|
311
|
+
@router.post("/predict", response_model=PredictionResponse)
|
|
312
|
+
async def predict(
|
|
313
|
+
request: PredictionRequest,
|
|
314
|
+
model: ModelInference = Depends(get_model)
|
|
315
|
+
):
|
|
316
|
+
"""
|
|
317
|
+
Run inference on a single prompt.
|
|
318
|
+
|
|
319
|
+
Context7 Pattern: Async endpoint with validation
|
|
320
|
+
"""
|
|
321
|
+
try:
|
|
322
|
+
result = await model.predict(
|
|
323
|
+
prompt=request.prompt,
|
|
324
|
+
temperature=request.temperature,
|
|
325
|
+
max_tokens=request.max_tokens,
|
|
326
|
+
use_cache=request.use_cache
|
|
327
|
+
)
|
|
328
|
+
return result
|
|
329
|
+
except Exception as e:
|
|
330
|
+
logger.error(f"Prediction failed: {e}")
|
|
331
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
332
|
+
|
|
333
|
+
@router.post("/batch-predict")
|
|
334
|
+
async def batch_predict(
|
|
335
|
+
prompts: List[str],
|
|
336
|
+
model: ModelInference = Depends(get_model)
|
|
337
|
+
):
|
|
338
|
+
"""
|
|
339
|
+
Run inference on multiple prompts.
|
|
340
|
+
|
|
341
|
+
Context7 Pattern: Batch processing endpoint
|
|
342
|
+
"""
|
|
343
|
+
try:
|
|
344
|
+
results = await model.batch_predict(prompts)
|
|
345
|
+
return {"results": results, "count": len(results)}
|
|
346
|
+
except Exception as e:
|
|
347
|
+
logger.error(f"Batch prediction failed: {e}")
|
|
348
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
6. **Generate Monitoring Configuration**
|
|
352
|
+
```yaml
|
|
353
|
+
# monitoring/prometheus.yml
|
|
354
|
+
global:
|
|
355
|
+
scrape_interval: 15s
|
|
356
|
+
evaluation_interval: 15s
|
|
357
|
+
|
|
358
|
+
scrape_configs:
|
|
359
|
+
- job_name: 'ai-model-api'
|
|
360
|
+
static_configs:
|
|
361
|
+
- targets: ['localhost:8000']
|
|
362
|
+
metrics_path: '/metrics'
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
7. **Generate Dockerfile (Context7 Pattern)**
|
|
366
|
+
```dockerfile
|
|
367
|
+
# deployment/docker/Dockerfile
|
|
368
|
+
FROM python:3.11-slim
|
|
369
|
+
|
|
370
|
+
WORKDIR /app
|
|
371
|
+
|
|
372
|
+
# Install dependencies
|
|
373
|
+
COPY requirements.txt .
|
|
374
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
375
|
+
|
|
376
|
+
# Copy application
|
|
377
|
+
COPY app/ app/
|
|
378
|
+
|
|
379
|
+
# Context7 pattern: Non-root user for security
|
|
380
|
+
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
|
|
381
|
+
USER appuser
|
|
382
|
+
|
|
383
|
+
# Health check
|
|
384
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
|
|
385
|
+
CMD curl -f http://localhost:8000/health || exit 1
|
|
386
|
+
|
|
387
|
+
# Run application
|
|
388
|
+
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
8. **Generate Kubernetes Deployment**
|
|
392
|
+
```yaml
|
|
393
|
+
# deployment/kubernetes/deployment.yaml
|
|
394
|
+
apiVersion: apps/v1
|
|
395
|
+
kind: Deployment
|
|
396
|
+
metadata:
|
|
397
|
+
name: ai-model-deployment
|
|
398
|
+
spec:
|
|
399
|
+
replicas: 3
|
|
400
|
+
selector:
|
|
401
|
+
matchLabels:
|
|
402
|
+
app: ai-model
|
|
403
|
+
template:
|
|
404
|
+
metadata:
|
|
405
|
+
labels:
|
|
406
|
+
app: ai-model
|
|
407
|
+
spec:
|
|
408
|
+
containers:
|
|
409
|
+
- name: ai-model
|
|
410
|
+
image: ai-model:latest
|
|
411
|
+
ports:
|
|
412
|
+
- containerPort: 8000
|
|
413
|
+
env:
|
|
414
|
+
- name: OPENAI_API_KEY
|
|
415
|
+
valueFrom:
|
|
416
|
+
secretKeyRef:
|
|
417
|
+
name: ai-secrets
|
|
418
|
+
key: openai-api-key
|
|
419
|
+
resources:
|
|
420
|
+
requests:
|
|
421
|
+
memory: "512Mi"
|
|
422
|
+
cpu: "500m"
|
|
423
|
+
limits:
|
|
424
|
+
memory: "1Gi"
|
|
425
|
+
cpu: "1000m"
|
|
426
|
+
livenessProbe:
|
|
427
|
+
httpGet:
|
|
428
|
+
path: /health
|
|
429
|
+
port: 8000
|
|
430
|
+
initialDelaySeconds: 30
|
|
431
|
+
periodSeconds: 10
|
|
432
|
+
readinessProbe:
|
|
433
|
+
httpGet:
|
|
434
|
+
path: /health
|
|
435
|
+
port: 8000
|
|
436
|
+
initialDelaySeconds: 10
|
|
437
|
+
periodSeconds: 5
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
## Context7-Verified Best Practices Applied
|
|
441
|
+
|
|
442
|
+
1. **Async Inference** (from `/openai/openai-python`):
|
|
443
|
+
- AsyncOpenAI for non-blocking operations
|
|
444
|
+
- Concurrent batch processing with asyncio.gather()
|
|
445
|
+
- Proper timeout and retry configuration
|
|
446
|
+
|
|
447
|
+
2. **Caching** (from ML production patterns):
|
|
448
|
+
- TTL cache for repeated queries
|
|
449
|
+
- Cache key generation from request parameters
|
|
450
|
+
- Configurable cache expiration
|
|
451
|
+
|
|
452
|
+
3. **Rate Limiting** (from `/openai/openai-python`):
|
|
453
|
+
- Token bucket algorithm
|
|
454
|
+
- Exponential backoff on failures
|
|
455
|
+
- Configurable rate limits
|
|
456
|
+
|
|
457
|
+
4. **Monitoring** (from production ML patterns):
|
|
458
|
+
- Prometheus metrics instrumentation
|
|
459
|
+
- Request/response logging
|
|
460
|
+
- Error tracking and alerting
|
|
461
|
+
|
|
462
|
+
## Testing
|
|
463
|
+
|
|
464
|
+
Generated scaffold includes:
|
|
465
|
+
- Unit tests for inference logic
|
|
466
|
+
- Integration tests for API endpoints
|
|
467
|
+
- Load tests for performance validation
|
|
468
|
+
- End-to-end deployment tests
|
|
469
|
+
|
|
470
|
+
## Production Considerations
|
|
471
|
+
|
|
472
|
+
- Horizontal scaling with Kubernetes
|
|
473
|
+
- Model versioning with MLflow
|
|
474
|
+
- Blue-green deployments
|
|
475
|
+
- Canary releases
|
|
476
|
+
- Cost monitoring and optimization
|
|
477
|
+
|
|
478
|
+
## References
|
|
479
|
+
|
|
480
|
+
- Context7: `/mlflow/mlflow` - Model deployment patterns
|
|
481
|
+
- Context7: `/openai/openai-python` - Production API usage
|