{"adoption": {"forks": 94, "observed_at": "2026-08-28T04:04:27.207031+00:00", "stars": 1344}, "canonical_url": "https://ross.abutalabs.com/products/joysafety", "card": {"archived": false, "artifact_type": "framework", "description": "JoySafety", "domain": ["large-language-models", "security", "artificial-intelligence", "chatbots", "self-hosted"], "enriched": true, "function": ["security", "nlp", "machine-learning", "middleware", "api-framework", "rag"], "health_score": 84, "homepage": null, "language": "Java", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["JoySafety/JoySafety"], "name": "JoySafety/JoySafety", "platform": ["self-hosted", "jvm"], "pushed_at": "2026-05-11T13:04:08+00:00", "repo": "JoySafety/JoySafety", "stars": 1344, "tags": ["llm-safety", "prompt-injection-detection", "content-moderation", "guardrails", "dag-orchestration", "jd", "chinese-nlp", "hot-reload", "docker-compose", "natural-language-processing", "docker", "linux", "web-server"], "topics": [], "urls": [], "use_cases": ["detect prompt injection attacks against LLM applications", "moderate chatbot responses for policy compliance", "guard enterprise AI assistants against data leakage", "block unsafe LLM outputs in production", "orchestrate multiple safety detection models with DAG policies", "add content safety guardrails to RAG pipelines", "self-host an LLM content safety service"], "what_it_is": "JoySafety is an open-source large language model safety framework from JD.com, written in Java, providing prompt injection detection, content moderation, and multi-turn conversation risk identification. It uses a pluggable DAG-based orchestration of detection models (BERT/FastText/Transformer) with hot-updatable policies and supports Docker Compose deployment at production scale.", "when_to_avoid": ["you need a lightweight client-side or embedded guardrail library rather than a deployed service", "your stack cannot run JVM services or Docker", "you need English-only moderation with no Chinese-language focus", "you require a permissive standard open-source license (license is non-standard)"], "when_to_choose": ["you need production-grade, battle-tested LLM safety guardrails with high throughput", "you want hot-swappable detection models and minute-level policy updates", "you deploy Java/JVM services and want Docker Compose-based self-hosting", "you need multi-turn conversation risk detection and red-line knowledge base responses"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/joysafety", "repo": "JoySafety/JoySafety", "role": "main", "score": 47}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.207031+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:42:48.209275+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ce956feb574f6dd627175b29b9a7b62b2f329e5a4a3d9a0a9f1d316fcd188731", "fetched_at": "2026-08-28T04:04:27.207031+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JoySafety/JoySafety"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 81, "longevity": 24, "rhythm": 17}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 343, "days_push": 114, "days_rel": 342, "gap_med": null, "n_releases_24m": 1}, "score": 47, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}