claude-autopm 2.8.2 → 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 -637
- package/package.json +2 -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/gemini-api-expert.md +880 -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/agents/langgraph-workflow-expert.md +520 -0
- package/packages/plugin-ai/agents/openai-python-expert.md +1087 -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/README.md +55 -0
- package/packages/plugin-cloud/agents/aws-cloud-architect.md +521 -0
- package/packages/plugin-cloud/agents/azure-cloud-architect.md +436 -0
- package/packages/plugin-cloud/agents/gcp-cloud-architect.md +385 -0
- package/packages/plugin-cloud/agents/gcp-cloud-functions-engineer.md +306 -0
- package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-cloud/agents/kubernetes-orchestrator.md +566 -0
- package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-cloud/agents/terraform-infrastructure-expert.md +454 -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/commands/infra-deploy.md +38 -0
- package/packages/plugin-cloud/commands/k8s-deploy.md +37 -0
- package/packages/plugin-cloud/commands/ssh-security.md +65 -0
- package/packages/plugin-cloud/commands/traefik-setup.md +65 -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/rules/infrastructure-pipeline.md +128 -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/agents/core/agent-manager.md +296 -0
- package/packages/plugin-core/agents/core/code-analyzer.md +131 -0
- package/packages/plugin-core/agents/core/file-analyzer.md +162 -0
- package/packages/plugin-core/agents/core/test-runner.md +200 -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/ai-integration-patterns.md +219 -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/performance-guidelines.md +403 -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/packages/plugin-databases/agents/README.md +50 -0
- package/packages/plugin-databases/agents/bigquery-expert.md +401 -0
- package/packages/plugin-databases/agents/cosmosdb-expert.md +375 -0
- package/packages/plugin-databases/agents/mongodb-expert.md +407 -0
- package/packages/plugin-databases/agents/postgresql-expert.md +329 -0
- package/packages/plugin-databases/agents/redis-expert.md +74 -0
- 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/packages/plugin-devops/agents/README.md +52 -0
- package/packages/plugin-devops/agents/azure-devops-specialist.md +308 -0
- package/packages/plugin-devops/agents/docker-containerization-expert.md +298 -0
- package/packages/plugin-devops/agents/github-operations-specialist.md +335 -0
- package/packages/plugin-devops/agents/mcp-context-manager.md +319 -0
- package/packages/plugin-devops/agents/observability-engineer.md +574 -0
- package/packages/plugin-devops/agents/ssh-operations-expert.md +1093 -0
- package/packages/plugin-devops/agents/traefik-proxy-expert.md +444 -0
- 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/commands/workflow-create.md +42 -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/ci-cd-kubernetes-strategy.md +25 -0
- package/packages/plugin-devops/rules/devops-troubleshooting-playbook.md +450 -0
- package/packages/plugin-devops/rules/docker-first-development.md +404 -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/packages/plugin-frameworks/agents/README.md +64 -0
- package/packages/plugin-frameworks/agents/e2e-test-engineer.md +579 -0
- package/packages/plugin-frameworks/agents/nats-messaging-expert.md +254 -0
- package/packages/plugin-frameworks/agents/react-frontend-engineer.md +393 -0
- package/packages/plugin-frameworks/agents/react-ui-expert.md +226 -0
- package/packages/plugin-frameworks/agents/tailwindcss-expert.md +1021 -0
- package/packages/plugin-frameworks/agents/ux-design-expert.md +244 -0
- package/packages/plugin-frameworks/commands/app-scaffold.md +50 -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/commands/tailwind-system.md +64 -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/rules/ui-development-standards.md +281 -0
- package/packages/plugin-frameworks/rules/ui-framework-rules.md +151 -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/agents/README.md +50 -0
- package/packages/plugin-languages/agents/bash-scripting-expert.md +541 -0
- package/packages/plugin-languages/agents/javascript-frontend-engineer.md +197 -0
- package/packages/plugin-languages/agents/nodejs-backend-engineer.md +226 -0
- package/packages/plugin-languages/agents/python-backend-engineer.md +214 -0
- package/packages/plugin-languages/agents/python-backend-expert.md +289 -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/azure/COMMANDS.md +107 -0
- package/packages/plugin-pm/commands/azure/COMMAND_MAPPING.md +252 -0
- package/packages/plugin-pm/commands/azure/INTEGRATION_FIX.md +103 -0
- package/packages/plugin-pm/commands/azure/README.md +246 -0
- package/packages/plugin-pm/commands/azure/active-work.md +198 -0
- package/packages/plugin-pm/commands/azure/aliases.md +143 -0
- package/packages/plugin-pm/commands/azure/blocked-items.md +287 -0
- package/packages/plugin-pm/commands/azure/clean.md +93 -0
- package/packages/plugin-pm/commands/azure/docs-query.md +48 -0
- package/packages/plugin-pm/commands/azure/feature-decompose.md +380 -0
- package/packages/plugin-pm/commands/azure/feature-list.md +61 -0
- package/packages/plugin-pm/commands/azure/feature-new.md +115 -0
- package/packages/plugin-pm/commands/azure/feature-show.md +205 -0
- package/packages/plugin-pm/commands/azure/feature-start.md +130 -0
- package/packages/plugin-pm/commands/azure/fix-integration-example.md +93 -0
- package/packages/plugin-pm/commands/azure/help.md +150 -0
- package/packages/plugin-pm/commands/azure/import-us.md +269 -0
- package/packages/plugin-pm/commands/azure/init.md +211 -0
- package/packages/plugin-pm/commands/azure/next-task.md +262 -0
- package/packages/plugin-pm/commands/azure/search.md +160 -0
- package/packages/plugin-pm/commands/azure/sprint-status.md +235 -0
- package/packages/plugin-pm/commands/azure/standup.md +260 -0
- package/packages/plugin-pm/commands/azure/sync-all.md +99 -0
- package/packages/plugin-pm/commands/azure/task-analyze.md +186 -0
- package/packages/plugin-pm/commands/azure/task-close.md +329 -0
- package/packages/plugin-pm/commands/azure/task-edit.md +145 -0
- package/packages/plugin-pm/commands/azure/task-list.md +263 -0
- package/packages/plugin-pm/commands/azure/task-new.md +84 -0
- package/packages/plugin-pm/commands/azure/task-reopen.md +79 -0
- package/packages/plugin-pm/commands/azure/task-show.md +126 -0
- package/packages/plugin-pm/commands/azure/task-start.md +301 -0
- package/packages/plugin-pm/commands/azure/task-status.md +65 -0
- package/packages/plugin-pm/commands/azure/task-sync.md +67 -0
- package/packages/plugin-pm/commands/azure/us-edit.md +164 -0
- package/packages/plugin-pm/commands/azure/us-list.md +202 -0
- package/packages/plugin-pm/commands/azure/us-new.md +265 -0
- package/packages/plugin-pm/commands/azure/us-parse.md +253 -0
- package/packages/plugin-pm/commands/azure/us-show.md +188 -0
- package/packages/plugin-pm/commands/azure/us-status.md +320 -0
- package/packages/plugin-pm/commands/azure/validate.md +86 -0
- package/packages/plugin-pm/commands/azure/work-item-sync.md +47 -0
- package/packages/plugin-pm/commands/blocked.md +28 -0
- package/packages/plugin-pm/commands/clean.md +119 -0
- package/packages/plugin-pm/commands/context-create.md +136 -0
- package/packages/plugin-pm/commands/context-prime.md +170 -0
- package/packages/plugin-pm/commands/context-update.md +292 -0
- package/packages/plugin-pm/commands/context.md +28 -0
- package/packages/plugin-pm/commands/epic-close.md +86 -0
- package/packages/plugin-pm/commands/epic-decompose.md +370 -0
- package/packages/plugin-pm/commands/epic-edit.md +83 -0
- package/packages/plugin-pm/commands/epic-list.md +30 -0
- package/packages/plugin-pm/commands/epic-merge.md +222 -0
- package/packages/plugin-pm/commands/epic-oneshot.md +119 -0
- package/packages/plugin-pm/commands/epic-refresh.md +119 -0
- package/packages/plugin-pm/commands/epic-show.md +28 -0
- package/packages/plugin-pm/commands/epic-split.md +120 -0
- package/packages/plugin-pm/commands/epic-start.md +195 -0
- package/packages/plugin-pm/commands/epic-status.md +28 -0
- package/packages/plugin-pm/commands/epic-sync-modular.md +338 -0
- package/packages/plugin-pm/commands/epic-sync-original.md +473 -0
- package/packages/plugin-pm/commands/epic-sync.md +486 -0
- package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
- package/packages/plugin-pm/commands/help.md +28 -0
- package/packages/plugin-pm/commands/import.md +115 -0
- package/packages/plugin-pm/commands/in-progress.md +28 -0
- package/packages/plugin-pm/commands/init.md +28 -0
- package/packages/plugin-pm/commands/issue-analyze.md +202 -0
- package/packages/plugin-pm/commands/issue-close.md +119 -0
- package/packages/plugin-pm/commands/issue-edit.md +93 -0
- package/packages/plugin-pm/commands/issue-reopen.md +87 -0
- package/packages/plugin-pm/commands/issue-show.md +41 -0
- package/packages/plugin-pm/commands/issue-start.md +234 -0
- package/packages/plugin-pm/commands/issue-status.md +95 -0
- package/packages/plugin-pm/commands/issue-sync.md +411 -0
- package/packages/plugin-pm/commands/next.md +28 -0
- package/packages/plugin-pm/commands/prd-edit.md +82 -0
- package/packages/plugin-pm/commands/prd-list.md +28 -0
- package/packages/plugin-pm/commands/prd-new.md +55 -0
- package/packages/plugin-pm/commands/prd-parse.md +42 -0
- package/packages/plugin-pm/commands/prd-status.md +28 -0
- package/packages/plugin-pm/commands/search.md +28 -0
- package/packages/plugin-pm/commands/standup.md +28 -0
- package/packages/plugin-pm/commands/status.md +28 -0
- package/packages/plugin-pm/commands/sync.md +99 -0
- package/packages/plugin-pm/commands/test-reference-update.md +151 -0
- package/packages/plugin-pm/commands/validate.md +28 -0
- package/packages/plugin-pm/commands/what-next.md +28 -0
- package/packages/plugin-pm/package.json +57 -0
- package/packages/plugin-pm/plugin.json +503 -0
- package/packages/plugin-pm/scripts/pm/analytics.js +425 -0
- package/packages/plugin-pm/scripts/pm/blocked.js +164 -0
- package/packages/plugin-pm/scripts/pm/blocked.sh +78 -0
- package/packages/plugin-pm/scripts/pm/clean.js +464 -0
- package/packages/plugin-pm/scripts/pm/context-create.js +216 -0
- package/packages/plugin-pm/scripts/pm/context-prime.js +335 -0
- package/packages/plugin-pm/scripts/pm/context-update.js +344 -0
- package/packages/plugin-pm/scripts/pm/context.js +338 -0
- package/packages/plugin-pm/scripts/pm/epic-close.js +347 -0
- package/packages/plugin-pm/scripts/pm/epic-edit.js +382 -0
- package/packages/plugin-pm/scripts/pm/epic-list.js +273 -0
- package/packages/plugin-pm/scripts/pm/epic-list.sh +109 -0
- package/packages/plugin-pm/scripts/pm/epic-show.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-show.sh +105 -0
- package/packages/plugin-pm/scripts/pm/epic-split.js +522 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.js +183 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.sh +94 -0
- package/packages/plugin-pm/scripts/pm/epic-status.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-status.sh +104 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/README.md +208 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-epic-issue.sh +77 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-task-issues.sh +86 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-epic-file.sh +79 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-references.sh +89 -0
- package/packages/plugin-pm/scripts/pm/epic-sync.sh +137 -0
- package/packages/plugin-pm/scripts/pm/help.js +92 -0
- package/packages/plugin-pm/scripts/pm/help.sh +90 -0
- package/packages/plugin-pm/scripts/pm/in-progress.js +178 -0
- package/packages/plugin-pm/scripts/pm/in-progress.sh +93 -0
- package/packages/plugin-pm/scripts/pm/init.js +321 -0
- package/packages/plugin-pm/scripts/pm/init.sh +178 -0
- package/packages/plugin-pm/scripts/pm/issue-close.js +232 -0
- package/packages/plugin-pm/scripts/pm/issue-edit.js +310 -0
- package/packages/plugin-pm/scripts/pm/issue-show.js +272 -0
- package/packages/plugin-pm/scripts/pm/issue-start.js +181 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/format-comment.sh +468 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/gather-updates.sh +460 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/post-comment.sh +330 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/preflight-validation.sh +348 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/update-frontmatter.sh +387 -0
- package/packages/plugin-pm/scripts/pm/lib/README.md +85 -0
- package/packages/plugin-pm/scripts/pm/lib/epic-discovery.js +119 -0
- package/packages/plugin-pm/scripts/pm/lib/logger.js +78 -0
- package/packages/plugin-pm/scripts/pm/next.js +189 -0
- package/packages/plugin-pm/scripts/pm/next.sh +72 -0
- package/packages/plugin-pm/scripts/pm/optimize.js +407 -0
- package/packages/plugin-pm/scripts/pm/pr-create.js +337 -0
- package/packages/plugin-pm/scripts/pm/pr-list.js +257 -0
- package/packages/plugin-pm/scripts/pm/prd-list.js +242 -0
- package/packages/plugin-pm/scripts/pm/prd-list.sh +103 -0
- package/packages/plugin-pm/scripts/pm/prd-new.js +684 -0
- package/packages/plugin-pm/scripts/pm/prd-parse.js +547 -0
- package/packages/plugin-pm/scripts/pm/prd-status.js +152 -0
- package/packages/plugin-pm/scripts/pm/prd-status.sh +63 -0
- package/packages/plugin-pm/scripts/pm/release.js +460 -0
- package/packages/plugin-pm/scripts/pm/search.js +192 -0
- package/packages/plugin-pm/scripts/pm/search.sh +89 -0
- package/packages/plugin-pm/scripts/pm/standup.js +362 -0
- package/packages/plugin-pm/scripts/pm/standup.sh +95 -0
- package/packages/plugin-pm/scripts/pm/status.js +148 -0
- package/packages/plugin-pm/scripts/pm/status.sh +59 -0
- package/packages/plugin-pm/scripts/pm/sync-batch.js +337 -0
- package/packages/plugin-pm/scripts/pm/sync.js +343 -0
- package/packages/plugin-pm/scripts/pm/template-list.js +141 -0
- package/packages/plugin-pm/scripts/pm/template-new.js +366 -0
- package/packages/plugin-pm/scripts/pm/validate.js +274 -0
- package/packages/plugin-pm/scripts/pm/validate.sh +106 -0
- package/packages/plugin-pm/scripts/pm/what-next.js +660 -0
- package/packages/plugin-testing/README.md +401 -0
- package/packages/plugin-testing/agents/frontend-testing-engineer.md +768 -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
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
# AI Model Standards
|
|
2
|
+
|
|
3
|
+
## Priority: High
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Comprehensive AI model development standards with Context7-verified best practices for model selection, deployment, monitoring, and optimization across OpenAI, HuggingFace, and MLflow frameworks.
|
|
8
|
+
|
|
9
|
+
## Applies To
|
|
10
|
+
- commands
|
|
11
|
+
- agents
|
|
12
|
+
|
|
13
|
+
## Enforces On
|
|
14
|
+
- openai-python-expert
|
|
15
|
+
- gemini-api-expert
|
|
16
|
+
- langgraph-workflow-expert
|
|
17
|
+
|
|
18
|
+
## Context7 Documentation Sources
|
|
19
|
+
|
|
20
|
+
**MANDATORY:** All AI model implementations MUST consult:
|
|
21
|
+
- `/openai/openai-python` (277 snippets, trust 9.1) - OpenAI API best practices
|
|
22
|
+
- `/huggingface/transformers` (2,790 snippets, trust 9.6) - HuggingFace model patterns
|
|
23
|
+
- `/mlflow/mlflow` (3,114 snippets, trust 9.1) - ML experiment tracking and deployment
|
|
24
|
+
|
|
25
|
+
## Standards
|
|
26
|
+
|
|
27
|
+
### 1. Model Selection and Configuration
|
|
28
|
+
|
|
29
|
+
#### ✅ CORRECT: Context7-verified model selection
|
|
30
|
+
```python
|
|
31
|
+
from openai import AsyncOpenAI
|
|
32
|
+
from pydantic import BaseModel, Field
|
|
33
|
+
|
|
34
|
+
class ModelConfig(BaseModel):
|
|
35
|
+
"""Model configuration with Context7 best practices"""
|
|
36
|
+
# Context7: Use latest stable models
|
|
37
|
+
model: str = Field(
|
|
38
|
+
default="gpt-4",
|
|
39
|
+
description="Model name from OpenAI"
|
|
40
|
+
)
|
|
41
|
+
temperature: float = Field(
|
|
42
|
+
default=0.1, # Context7: Low temperature for deterministic responses
|
|
43
|
+
ge=0.0,
|
|
44
|
+
le=2.0
|
|
45
|
+
)
|
|
46
|
+
max_tokens: int = Field(
|
|
47
|
+
default=500,
|
|
48
|
+
ge=1,
|
|
49
|
+
le=4096
|
|
50
|
+
)
|
|
51
|
+
top_p: float = Field(default=1.0, ge=0.0, le=1.0)
|
|
52
|
+
|
|
53
|
+
# Context7 pattern: AsyncOpenAI for production
|
|
54
|
+
client = AsyncOpenAI(
|
|
55
|
+
api_key=api_key,
|
|
56
|
+
max_retries=3, # Context7: Retry failed requests
|
|
57
|
+
timeout=60.0 # Context7: Reasonable timeout
|
|
58
|
+
)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### ❌ INCORRECT: Hardcoded, non-configurable models
|
|
62
|
+
```python
|
|
63
|
+
# DON'T: Hardcoded model without configuration
|
|
64
|
+
client = openai.OpenAI() # Missing async, retries, timeout
|
|
65
|
+
response = openai.ChatCompletion.create(
|
|
66
|
+
model="gpt-3.5", # Outdated model name
|
|
67
|
+
prompt=prompt,
|
|
68
|
+
temperature=1.0 # Too high for production
|
|
69
|
+
)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2. Async Operations and Rate Limiting
|
|
73
|
+
|
|
74
|
+
#### ✅ CORRECT: Async with rate limiting (Context7 pattern)
|
|
75
|
+
```python
|
|
76
|
+
import asyncio
|
|
77
|
+
from datetime import datetime, timedelta
|
|
78
|
+
|
|
79
|
+
class RateLimiter:
|
|
80
|
+
"""Context7 pattern: Token bucket rate limiting"""
|
|
81
|
+
def __init__(self, requests_per_minute: int = 60):
|
|
82
|
+
self.rpm = requests_per_minute
|
|
83
|
+
self.requests = []
|
|
84
|
+
|
|
85
|
+
async def wait_if_needed(self):
|
|
86
|
+
now = datetime.now()
|
|
87
|
+
# Remove requests older than 1 minute
|
|
88
|
+
self.requests = [t for t in self.requests if now - t < timedelta(minutes=1)]
|
|
89
|
+
|
|
90
|
+
if len(self.requests) >= self.rpm:
|
|
91
|
+
oldest = min(self.requests)
|
|
92
|
+
wait_time = 60 - (now - oldest).total_seconds()
|
|
93
|
+
if wait_time > 0:
|
|
94
|
+
await asyncio.sleep(wait_time)
|
|
95
|
+
|
|
96
|
+
self.requests.append(now)
|
|
97
|
+
|
|
98
|
+
# Context7 pattern: Use rate limiter
|
|
99
|
+
rate_limiter = RateLimiter(requests_per_minute=50)
|
|
100
|
+
|
|
101
|
+
async def safe_completion(prompt: str):
|
|
102
|
+
await rate_limiter.wait_if_needed()
|
|
103
|
+
response = await client.chat.completions.create(
|
|
104
|
+
model="gpt-4",
|
|
105
|
+
messages=[{"role": "user", "content": prompt}]
|
|
106
|
+
)
|
|
107
|
+
return response
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
#### ❌ INCORRECT: Blocking calls without rate limiting
|
|
111
|
+
```python
|
|
112
|
+
# DON'T: Synchronous calls in async context
|
|
113
|
+
def completion(prompt):
|
|
114
|
+
# No rate limiting - will hit API limits
|
|
115
|
+
response = openai.ChatCompletion.create(
|
|
116
|
+
model="gpt-4",
|
|
117
|
+
messages=[{"role": "user", "content": prompt}]
|
|
118
|
+
)
|
|
119
|
+
return response.choices[0].message.content
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 3. Error Handling and Retry Logic
|
|
123
|
+
|
|
124
|
+
#### ✅ CORRECT: Exponential backoff with retry (Context7 pattern)
|
|
125
|
+
```python
|
|
126
|
+
async def completion_with_retry(
|
|
127
|
+
prompt: str,
|
|
128
|
+
max_retries: int = 3,
|
|
129
|
+
base_delay: float = 1.0
|
|
130
|
+
) -> str:
|
|
131
|
+
"""Context7 pattern: Exponential backoff retry"""
|
|
132
|
+
for attempt in range(max_retries):
|
|
133
|
+
try:
|
|
134
|
+
response = await client.chat.completions.create(
|
|
135
|
+
model="gpt-4",
|
|
136
|
+
messages=[{"role": "user", "content": prompt}]
|
|
137
|
+
)
|
|
138
|
+
return response.choices[0].message.content
|
|
139
|
+
|
|
140
|
+
except openai.RateLimitError as e:
|
|
141
|
+
if attempt == max_retries - 1:
|
|
142
|
+
raise
|
|
143
|
+
# Exponential backoff
|
|
144
|
+
delay = base_delay * (2 ** attempt)
|
|
145
|
+
logger.warning(f"Rate limit hit, retrying in {delay}s")
|
|
146
|
+
await asyncio.sleep(delay)
|
|
147
|
+
|
|
148
|
+
except openai.APIError as e:
|
|
149
|
+
logger.error(f"API error: {e}")
|
|
150
|
+
if attempt == max_retries - 1:
|
|
151
|
+
raise
|
|
152
|
+
await asyncio.sleep(base_delay * (2 ** attempt))
|
|
153
|
+
|
|
154
|
+
except Exception as e:
|
|
155
|
+
logger.error(f"Unexpected error: {e}")
|
|
156
|
+
raise
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### ❌ INCORRECT: No error handling
|
|
160
|
+
```python
|
|
161
|
+
# DON'T: No error handling or retries
|
|
162
|
+
async def completion(prompt):
|
|
163
|
+
response = await client.chat.completions.create(...)
|
|
164
|
+
return response.choices[0].message.content # Will fail on any error
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 4. Response Caching and Optimization
|
|
168
|
+
|
|
169
|
+
#### ✅ CORRECT: TTL caching for repeated queries (Context7 pattern)
|
|
170
|
+
```python
|
|
171
|
+
from cachetools import TTLCache
|
|
172
|
+
import hashlib
|
|
173
|
+
|
|
174
|
+
class CachedInference:
|
|
175
|
+
"""Context7 pattern: TTL cache for responses"""
|
|
176
|
+
def __init__(self, ttl: int = 300): # 5 min cache
|
|
177
|
+
self.cache = TTLCache(maxsize=1000, ttl=ttl)
|
|
178
|
+
|
|
179
|
+
def _cache_key(self, prompt: str, temperature: float, max_tokens: int) -> str:
|
|
180
|
+
"""Generate cache key from parameters"""
|
|
181
|
+
key_data = f"{prompt}:{temperature}:{max_tokens}"
|
|
182
|
+
return hashlib.md5(key_data.encode()).hexdigest()
|
|
183
|
+
|
|
184
|
+
async def get_completion(
|
|
185
|
+
self,
|
|
186
|
+
prompt: str,
|
|
187
|
+
temperature: float = 0.1,
|
|
188
|
+
max_tokens: int = 500,
|
|
189
|
+
use_cache: bool = True
|
|
190
|
+
) -> str:
|
|
191
|
+
# Check cache
|
|
192
|
+
cache_key = self._cache_key(prompt, temperature, max_tokens)
|
|
193
|
+
if use_cache and cache_key in self.cache:
|
|
194
|
+
logger.info("Cache hit")
|
|
195
|
+
return self.cache[cache_key]
|
|
196
|
+
|
|
197
|
+
# Call API
|
|
198
|
+
response = await client.chat.completions.create(
|
|
199
|
+
model="gpt-4",
|
|
200
|
+
messages=[{"role": "user", "content": prompt}],
|
|
201
|
+
temperature=temperature,
|
|
202
|
+
max_tokens=max_tokens
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
result = response.choices[0].message.content
|
|
206
|
+
|
|
207
|
+
# Store in cache
|
|
208
|
+
if use_cache:
|
|
209
|
+
self.cache[cache_key] = result
|
|
210
|
+
|
|
211
|
+
return result
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
#### ❌ INCORRECT: No caching, repeated API calls
|
|
215
|
+
```python
|
|
216
|
+
# DON'T: No caching for repeated queries
|
|
217
|
+
async def get_completion(prompt):
|
|
218
|
+
# Will call API even for identical prompts
|
|
219
|
+
response = await client.chat.completions.create(...)
|
|
220
|
+
return response.choices[0].message.content
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 5. Monitoring and Metrics
|
|
224
|
+
|
|
225
|
+
#### ✅ CORRECT: Comprehensive metrics tracking (Context7 pattern)
|
|
226
|
+
```python
|
|
227
|
+
from dataclasses import dataclass, field
|
|
228
|
+
from typing import Dict
|
|
229
|
+
import logging
|
|
230
|
+
|
|
231
|
+
@dataclass
|
|
232
|
+
class ModelMetrics:
|
|
233
|
+
"""Context7 pattern: Track model usage metrics"""
|
|
234
|
+
total_requests: int = 0
|
|
235
|
+
successful_requests: int = 0
|
|
236
|
+
failed_requests: int = 0
|
|
237
|
+
total_tokens: int = 0
|
|
238
|
+
total_cost: float = 0.0
|
|
239
|
+
cache_hits: int = 0
|
|
240
|
+
cache_misses: int = 0
|
|
241
|
+
|
|
242
|
+
# Cost per token (as of 2025)
|
|
243
|
+
COST_PER_TOKEN: Dict[str, Dict[str, float]] = field(default_factory=lambda: {
|
|
244
|
+
"gpt-4": {"input": 0.00003, "output": 0.00006},
|
|
245
|
+
"gpt-3.5-turbo": {"input": 0.0000015, "output": 0.000002}
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
def record_request(
|
|
249
|
+
self,
|
|
250
|
+
model: str,
|
|
251
|
+
success: bool,
|
|
252
|
+
prompt_tokens: int,
|
|
253
|
+
completion_tokens: int,
|
|
254
|
+
cache_hit: bool = False
|
|
255
|
+
):
|
|
256
|
+
"""Record request metrics"""
|
|
257
|
+
self.total_requests += 1
|
|
258
|
+
|
|
259
|
+
if success:
|
|
260
|
+
self.successful_requests += 1
|
|
261
|
+
else:
|
|
262
|
+
self.failed_requests += 1
|
|
263
|
+
|
|
264
|
+
if cache_hit:
|
|
265
|
+
self.cache_hits += 1
|
|
266
|
+
else:
|
|
267
|
+
self.cache_misses += 1
|
|
268
|
+
|
|
269
|
+
# Calculate cost
|
|
270
|
+
if model in self.COST_PER_TOKEN:
|
|
271
|
+
cost_info = self.COST_PER_TOKEN[model]
|
|
272
|
+
cost = (
|
|
273
|
+
prompt_tokens * cost_info["input"] +
|
|
274
|
+
completion_tokens * cost_info["output"]
|
|
275
|
+
)
|
|
276
|
+
self.total_cost += cost
|
|
277
|
+
self.total_tokens += prompt_tokens + completion_tokens
|
|
278
|
+
|
|
279
|
+
def get_summary(self) -> Dict:
|
|
280
|
+
"""Get metrics summary"""
|
|
281
|
+
success_rate = (
|
|
282
|
+
self.successful_requests / self.total_requests * 100
|
|
283
|
+
if self.total_requests > 0 else 0
|
|
284
|
+
)
|
|
285
|
+
cache_hit_rate = (
|
|
286
|
+
self.cache_hits / (self.cache_hits + self.cache_misses) * 100
|
|
287
|
+
if (self.cache_hits + self.cache_misses) > 0 else 0
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
return {
|
|
291
|
+
"total_requests": self.total_requests,
|
|
292
|
+
"success_rate": f"{success_rate:.2f}%",
|
|
293
|
+
"cache_hit_rate": f"{cache_hit_rate:.2f}%",
|
|
294
|
+
"total_tokens": self.total_tokens,
|
|
295
|
+
"total_cost": f"${self.total_cost:.4f}"
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
#### ❌ INCORRECT: No monitoring
|
|
300
|
+
```python
|
|
301
|
+
# DON'T: No metrics or monitoring
|
|
302
|
+
async def completion(prompt):
|
|
303
|
+
response = await client.chat.completions.create(...)
|
|
304
|
+
return response.choices[0].message.content
|
|
305
|
+
# No tracking of costs, success rate, or performance
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 6. HuggingFace Model Loading and Inference
|
|
309
|
+
|
|
310
|
+
#### ✅ CORRECT: Optimized model loading (Context7 pattern)
|
|
311
|
+
```python
|
|
312
|
+
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
|
|
313
|
+
import torch
|
|
314
|
+
|
|
315
|
+
class HuggingFaceInference:
|
|
316
|
+
"""Context7 pattern: Optimized HuggingFace model loading"""
|
|
317
|
+
def __init__(self, model_name: str, device: str = "auto"):
|
|
318
|
+
self.model_name = model_name
|
|
319
|
+
self.device = 0 if torch.cuda.is_available() and device == "auto" else -1
|
|
320
|
+
|
|
321
|
+
def load_model(self):
|
|
322
|
+
"""Context7 pattern: Use pipeline API for simplicity"""
|
|
323
|
+
self.pipeline = pipeline(
|
|
324
|
+
"text-classification",
|
|
325
|
+
model=self.model_name,
|
|
326
|
+
device=self.device
|
|
327
|
+
)
|
|
328
|
+
logger.info(f"Loaded model: {self.model_name} on device: {self.device}")
|
|
329
|
+
|
|
330
|
+
async def predict(self, text: str) -> Dict:
|
|
331
|
+
"""Run inference with proper error handling"""
|
|
332
|
+
try:
|
|
333
|
+
result = self.pipeline(text)
|
|
334
|
+
return {
|
|
335
|
+
"label": result[0]["label"],
|
|
336
|
+
"score": result[0]["score"],
|
|
337
|
+
"model": self.model_name
|
|
338
|
+
}
|
|
339
|
+
except Exception as e:
|
|
340
|
+
logger.error(f"Inference failed: {e}")
|
|
341
|
+
raise
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
#### ❌ INCORRECT: Manual tokenization without optimization
|
|
345
|
+
```python
|
|
346
|
+
# DON'T: Manual tokenization and model forward pass
|
|
347
|
+
model = AutoModelForSequenceClassification.from_pretrained(model_name)
|
|
348
|
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
349
|
+
|
|
350
|
+
def predict(text):
|
|
351
|
+
inputs = tokenizer(text, return_tensors="pt") # No device placement
|
|
352
|
+
outputs = model(**inputs) # No error handling
|
|
353
|
+
return outputs.logits
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### 7. MLflow Experiment Tracking
|
|
357
|
+
|
|
358
|
+
#### ✅ CORRECT: Comprehensive MLflow tracking (Context7 pattern)
|
|
359
|
+
```python
|
|
360
|
+
import mlflow
|
|
361
|
+
from mlflow.tracking import MlflowClient
|
|
362
|
+
|
|
363
|
+
class MLflowTracker:
|
|
364
|
+
"""Context7 pattern: MLflow experiment tracking"""
|
|
365
|
+
def __init__(self, experiment_name: str):
|
|
366
|
+
mlflow.set_experiment(experiment_name)
|
|
367
|
+
self.client = MlflowClient()
|
|
368
|
+
|
|
369
|
+
def log_model_run(
|
|
370
|
+
self,
|
|
371
|
+
model_name: str,
|
|
372
|
+
params: Dict,
|
|
373
|
+
metrics: Dict,
|
|
374
|
+
artifacts: Dict = None
|
|
375
|
+
):
|
|
376
|
+
"""Log model run with Context7 best practices"""
|
|
377
|
+
with mlflow.start_run():
|
|
378
|
+
# Log parameters
|
|
379
|
+
mlflow.log_params(params)
|
|
380
|
+
|
|
381
|
+
# Log metrics
|
|
382
|
+
mlflow.log_metrics(metrics)
|
|
383
|
+
|
|
384
|
+
# Log model info
|
|
385
|
+
mlflow.set_tag("model_name", model_name)
|
|
386
|
+
mlflow.set_tag("framework", "openai")
|
|
387
|
+
|
|
388
|
+
# Log artifacts
|
|
389
|
+
if artifacts:
|
|
390
|
+
for name, path in artifacts.items():
|
|
391
|
+
mlflow.log_artifact(path, artifact_path=name)
|
|
392
|
+
|
|
393
|
+
run_id = mlflow.active_run().info.run_id
|
|
394
|
+
logger.info(f"Logged run: {run_id}")
|
|
395
|
+
|
|
396
|
+
return run_id
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
#### ❌ INCORRECT: No experiment tracking
|
|
400
|
+
```python
|
|
401
|
+
# DON'T: No MLflow tracking of experiments
|
|
402
|
+
def run_model(prompt):
|
|
403
|
+
response = client.chat.completions.create(...)
|
|
404
|
+
return response.choices[0].message.content
|
|
405
|
+
# No tracking of parameters, metrics, or results
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
## Enforcement Rules
|
|
409
|
+
|
|
410
|
+
1. **All AI model implementations MUST**:
|
|
411
|
+
- Use AsyncOpenAI or async alternatives
|
|
412
|
+
- Implement rate limiting
|
|
413
|
+
- Include exponential backoff retry logic
|
|
414
|
+
- Track metrics (requests, costs, latency)
|
|
415
|
+
- Use caching for repeated queries
|
|
416
|
+
- Log errors and warnings
|
|
417
|
+
|
|
418
|
+
2. **All production deployments MUST**:
|
|
419
|
+
- Use environment variables for API keys
|
|
420
|
+
- Implement health check endpoints
|
|
421
|
+
- Include monitoring (Prometheus/Datadog)
|
|
422
|
+
- Set up alerting for failures
|
|
423
|
+
- Track costs and usage
|
|
424
|
+
|
|
425
|
+
3. **All model configurations MUST**:
|
|
426
|
+
- Use Pydantic for validation
|
|
427
|
+
- Include reasonable defaults
|
|
428
|
+
- Document all parameters
|
|
429
|
+
- Support environment-based config
|
|
430
|
+
|
|
431
|
+
## Testing Requirements
|
|
432
|
+
|
|
433
|
+
1. **Unit Tests**: Test inference logic with mocked APIs
|
|
434
|
+
2. **Integration Tests**: Test with real API endpoints (in staging)
|
|
435
|
+
3. **Load Tests**: Validate performance under load
|
|
436
|
+
4. **Cost Tests**: Ensure cost tracking is accurate
|
|
437
|
+
|
|
438
|
+
## Security Requirements
|
|
439
|
+
|
|
440
|
+
1. **API Keys**: Never hardcode, use environment variables or secret managers
|
|
441
|
+
2. **Input Validation**: Validate all user inputs with Pydantic
|
|
442
|
+
3. **Output Sanitization**: Remove sensitive information from responses
|
|
443
|
+
4. **Rate Limiting**: Protect against abuse and runaway costs
|
|
444
|
+
|
|
445
|
+
## References
|
|
446
|
+
|
|
447
|
+
- Context7: `/openai/openai-python` - Production API patterns
|
|
448
|
+
- Context7: `/huggingface/transformers` - Model loading and inference
|
|
449
|
+
- Context7: `/mlflow/mlflow` - Experiment tracking
|