// engine/llm-security/mlops-requirements.ts — SPEC-045
// MLOps and model governance requirements for LLM projects with fine-tuning or own embeddings.
/**
 * Generate model governance criteria for projects with fine-tuning.
 */
function buildModelGovernanceCriteria() {
    return [
        '- [ ] Los modelos en producción tienen versión semántica y están registrados en el model registry con metadatos de entrenamiento (arquitectura, dataset, fecha de corte, métricas de evaluación)',
        '- [ ] Se monitorea drift de distribución entre datos de entrenamiento y distribución en producción con alertas automatizadas cuando el drift supera el threshold definido',
        '- [ ] Los datasets de entrenamiento tienen provenance documentada — fuente, fecha de corte, licencia de uso, mecanismo de consentimiento',
    ];
}
/**
 * Generate privacy criteria for projects with own embeddings (GDPR right to erasure).
 */
function buildEmbeddingsPrivacyCriteria() {
    return [
        '- [ ] Los vectores de embedding derivados de datos de usuario se eliminan del vectorstore cuando el usuario ejerce el derecho de supresión (GDPR Art. 17) — no solo los documentos originales sino todos los vectores derivados de ellos',
        '- [ ] El modelo de embedding usado está documentado en el spec — un cambio de modelo invalida todos los vectores existentes y requiere re-indexación completa',
    ];
}
/**
 * Generate MLOps section for HU.md for projects with fine-tuning or own embeddings.
 */
export function generateMlopsHuSection(detection) {
    if (!detection.isLlmProject) {
        return [];
    }
    const lines = [];
    if (detection.hasFineTuning) {
        lines.push('', '## MLOps & Model Governance', '');
        lines.push(...buildModelGovernanceCriteria());
    }
    if (detection.hasEmbeddingsOwn) {
        if (lines.length === 0) {
            lines.push('', '## Embeddings Privacy (GDPR)', '');
        }
        else {
            lines.push('', '### Embeddings Privacy (GDPR)', '');
        }
        lines.push(...buildEmbeddingsPrivacyCriteria());
    }
    if (lines.length > 0) {
        lines.push('');
    }
    return lines;
}
/**
 * Generate MLOps tooling recommendations per maturity level.
 * Used by suggest_tooling.
 */
export function generateMlopsToolingLines(detection) {
    if (!detection.isLlmProject || (!detection.hasFineTuning && !detection.hasRAG)) {
        return [];
    }
    const lines = ['', '## MLOps & LLMOps Stack', ''];
    if (detection.hasFineTuning) {
        lines.push('### MLOps por Nivel de Madurez', '');
        lines.push('**Inicio:** MLflow (open-source, self-hosted, experiment tracking + model registry)');
        lines.push('- Docs: https://mlflow.org');
        lines.push('');
        lines.push('**Escala:** Weights & Biases (experiment tracking con UI avanzada) + BentoML (model serving)');
        lines.push('- Docs: https://wandb.ai | https://bentoml.com');
        lines.push('');
        lines.push('**Enterprise:** Vertex AI Pipelines (GCP) o Azure ML Pipelines');
        lines.push('- Docs: https://cloud.google.com/vertex-ai | https://azure.microsoft.com/ml');
        lines.push('');
    }
    if (detection.hasRAG || detection.provider) {
        lines.push('### LLMOps (Tracing & Observability)', '');
        lines.push('**Langfuse** (tracing open-source, self-hosteable) — recomendado para inicio');
        lines.push('- Docs: https://langfuse.com');
        lines.push('');
        lines.push('**LangSmith** (hosted, integrado con LangChain) — si ya usas LangChain framework');
        lines.push('- Docs: https://smith.langchain.com');
        lines.push('');
    }
    return lines;
}
//# sourceMappingURL=mlops-requirements.js.map