llm-content-filter


Namellm-content-filter JSON
Version 0.2.7 PyPI version JSON
download
home_pagehttps://github.com/jclanas2019/llm_content_filter
SummaryA simple and customizable content filter for LLMs
upload_time2024-08-25 15:05:24
maintainerNone
docs_urlNone
authorJuan Carlos Lanas Ocampo
requires_python>=3.6
licenseNone
keywords llm content filter nlp text moderation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# llm_content_filter

`llm_content_filter` es un paquete de Python flexible y fácil de usar que permite filtrar texto inapropiado para grandes modelos de lenguaje (LLMs). Con soporte para personalizar palabras prohibidas, manejar sinónimos y realizar filtrado contextual, es una herramienta poderosa para moderar contenido generado por LLMs.

## Instalación

Puedes instalar el paquete usando `pip`:

```bash
pip install llm_content_filter
```

## Uso

Aquí tienes un ejemplo de cómo utilizar `llm_content_filter` en un proyecto:

### 1. Filtrado básico con palabras predeterminadas

```python
from llm_content_filter.filter import LLMContentFilter

# Crear una instancia del filtro con las palabras predeterminadas
filter = LLMContentFilter()

# Verificar si un texto es apropiado
text = "This text promotes violence"
if not filter.is_appropriate(text):
    print("Texto inapropiado detectado!")

# Filtrar el texto inapropiado
clean_text = filter.filter_text(text)
print(clean_text)
```

### 2. Usar palabras prohibidas personalizadas

```python
from llm_content_filter.filter import LLMContentFilter

# Crear una instancia del filtro con palabras prohibidas personalizadas
custom_banned_words = ["spam", "scam"]
filter = LLMContentFilter(banned_words=custom_banned_words)

# Filtrar un texto con las palabras personalizadas
text = "This text is a scam"
clean_text = filter.filter_text(text, replacement="[BLOCKED]")
print(clean_text)
```

### 3. Cargar y guardar listas de palabras prohibidas desde un archivo JSON

```python
from llm_content_filter.filter import LLMContentFilter

# Crear una instancia del filtro cargando las palabras prohibidas desde un archivo JSON
filter = LLMContentFilter(banned_words_file="custom_banned_words.json")

# Verificar si un texto es apropiado
text = "This text is offensive"
if not filter.is_appropriate(text):
    print("Texto inapropiado detectado!")

# Guardar las palabras prohibidas actuales en un archivo JSON
filter.save_banned_words_to_file("updated_banned_words.json")
```

### 4. Filtrado avanzado con sinónimos y normalización de texto

```python
from llm_content_filter.filter import LLMContentFilter

# Supongamos que tienes un archivo JSON que incluye sinónimos y otras configuraciones avanzadas
filter = LLMContentFilter(banned_words_file="custom_banned_words_with_synonyms.json")

# Filtrar un texto con acentos y sinónimos
text = "This text contains brutalité, which is a form of violence"
clean_text = filter.filter_text(text)
print(clean_text)  # Salida: "this text contains [REDACTED], which is a form of [REDACTED]"
```

## Características

- **Personalización Total:** Define tus propias listas de palabras prohibidas o carga listas desde archivos JSON.
- **Manejo de Sinónimos:** Detecta y filtra variaciones de palabras prohibidas usando sinónimos.
- **Filtrado Contextual:** Soporte para filtrado avanzado basado en el contexto (próximamente).
- **Normalización de Texto:** Elimina acentos y caracteres especiales para un filtrado más robusto.

## Contribución

Las contribuciones son bienvenidas. Por favor, abre un issue o un pull request en [GitHub](https://github.com/jclanas2019/llm_content_filter).

## Licencia

Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo [LICENSE](LICENSE) para más detalles.

## Contacto

Para cualquier consulta o sugerencia, puedes contactarme en `juancarlos.lanas.ocampo@gmail.com`.

## Ejemplo json 
```json
{
    "banned_words": [
        "violence",
        "hate",
        "discrimination",
        "abuse",
        "offensive"
    ],
    "synonyms": {
        "violence": ["aggression", "brutality", "cruelty"],
        "hate": ["detest", "loathe", "abhor"],
        "discrimination": ["prejudice", "bias", "inequality"],
        "abuse": ["mistreatment", "misuse", "exploitation"],
        "offensive": ["insulting", "derogatory", "rude"]
    },
    "severity_levels": {
        "violence": 5,
        "hate": 4,
        "discrimination": 4,
        "abuse": 5,
        "offensive": 3
    },
    "replacement_words": {
        "default": "[REDACTED]",
        "violence": "[VIOLENCE]",
        "hate": "[HATE]",
        "discrimination": "[DISCRIMINATION]",
        "abuse": "[ABUSE]",
        "offensive": "[OFFENSIVE]"
    },
    "contextual_filtering": {
        "enabled": true,
        "context_threshold": 0.8
    }
}
```
# Uso con langchain y OpenAI
## Paso 1: Configuración de LangChain y OpenAI
### Primero, asegúrate de tener los paquetes necesarios instalados:

```bash
pip install langchain openai
```

## Paso 2: Implementación del Filtro Personalizado con LangChain
### Aquí te muestro cómo puedes adaptar tu filtro personalizado para que funcione dentro de un pipeline de LangChain:

```python
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from llm_content_filter.filter import LLMContentFilter

# Configurar OpenAI LLM
llm = OpenAI(temperature=0.7, openai_api_key="your-openai-api-key")

# Crear un template de prompt para LangChain
prompt_template = PromptTemplate(
    input_variables=["input_text"],
    template="Please generate a detailed response to the following input: {input_text}"
)

# Crear una cadena que usa el LLM con el prompt
chain = LLMChain(llm=llm, prompt=prompt_template)

# Crear una instancia del filtro cargando las palabras prohibidas desde un archivo JSON
filter = LLMContentFilter(banned_words_file="custom_banned_words.json")

# Ejemplo de texto para procesar
input_text = "This text is offensive"

# Generar texto usando LangChain y OpenAI
generated_text = chain.run(input_text)

# Verificar si el texto generado es apropiado
if not filter.is_appropriate(generated_text):
    print("Texto inapropiado detectado!")
    # Opcionalmente, puedes filtrar el texto antes de guardarlo o procesarlo
    filtered_text = filter.filter_text(generated_text)
    print("Texto filtrado:", filtered_text)
else:
    print("Texto generado:", generated_text)

# Guardar las palabras prohibidas actuales en un archivo JSON
filter.save_banned_words_to_file("updated_banned_words.json")
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/jclanas2019/llm_content_filter",
    "name": "llm-content-filter",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "LLM content filter NLP text moderation",
    "author": "Juan Carlos Lanas Ocampo",
    "author_email": "juancarlos.lanas.ocampo@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/ca/7f/199cb954398c839c9947baac0d1e8352f76d1579062fd6f7d5cfaef644bf/llm_content_filter-0.2.7.tar.gz",
    "platform": null,
    "description": "\r\n# llm_content_filter\r\n\r\n`llm_content_filter` es un paquete de Python flexible y f\u00e1cil de usar que permite filtrar texto inapropiado para grandes modelos de lenguaje (LLMs). Con soporte para personalizar palabras prohibidas, manejar sin\u00f3nimos y realizar filtrado contextual, es una herramienta poderosa para moderar contenido generado por LLMs.\r\n\r\n## Instalaci\u00f3n\r\n\r\nPuedes instalar el paquete usando `pip`:\r\n\r\n```bash\r\npip install llm_content_filter\r\n```\r\n\r\n## Uso\r\n\r\nAqu\u00ed tienes un ejemplo de c\u00f3mo utilizar `llm_content_filter` en un proyecto:\r\n\r\n### 1. Filtrado b\u00e1sico con palabras predeterminadas\r\n\r\n```python\r\nfrom llm_content_filter.filter import LLMContentFilter\r\n\r\n# Crear una instancia del filtro con las palabras predeterminadas\r\nfilter = LLMContentFilter()\r\n\r\n# Verificar si un texto es apropiado\r\ntext = \"This text promotes violence\"\r\nif not filter.is_appropriate(text):\r\n    print(\"Texto inapropiado detectado!\")\r\n\r\n# Filtrar el texto inapropiado\r\nclean_text = filter.filter_text(text)\r\nprint(clean_text)\r\n```\r\n\r\n### 2. Usar palabras prohibidas personalizadas\r\n\r\n```python\r\nfrom llm_content_filter.filter import LLMContentFilter\r\n\r\n# Crear una instancia del filtro con palabras prohibidas personalizadas\r\ncustom_banned_words = [\"spam\", \"scam\"]\r\nfilter = LLMContentFilter(banned_words=custom_banned_words)\r\n\r\n# Filtrar un texto con las palabras personalizadas\r\ntext = \"This text is a scam\"\r\nclean_text = filter.filter_text(text, replacement=\"[BLOCKED]\")\r\nprint(clean_text)\r\n```\r\n\r\n### 3. Cargar y guardar listas de palabras prohibidas desde un archivo JSON\r\n\r\n```python\r\nfrom llm_content_filter.filter import LLMContentFilter\r\n\r\n# Crear una instancia del filtro cargando las palabras prohibidas desde un archivo JSON\r\nfilter = LLMContentFilter(banned_words_file=\"custom_banned_words.json\")\r\n\r\n# Verificar si un texto es apropiado\r\ntext = \"This text is offensive\"\r\nif not filter.is_appropriate(text):\r\n    print(\"Texto inapropiado detectado!\")\r\n\r\n# Guardar las palabras prohibidas actuales en un archivo JSON\r\nfilter.save_banned_words_to_file(\"updated_banned_words.json\")\r\n```\r\n\r\n### 4. Filtrado avanzado con sin\u00f3nimos y normalizaci\u00f3n de texto\r\n\r\n```python\r\nfrom llm_content_filter.filter import LLMContentFilter\r\n\r\n# Supongamos que tienes un archivo JSON que incluye sin\u00f3nimos y otras configuraciones avanzadas\r\nfilter = LLMContentFilter(banned_words_file=\"custom_banned_words_with_synonyms.json\")\r\n\r\n# Filtrar un texto con acentos y sin\u00f3nimos\r\ntext = \"This text contains brutalit\u00e9, which is a form of violence\"\r\nclean_text = filter.filter_text(text)\r\nprint(clean_text)  # Salida: \"this text contains [REDACTED], which is a form of [REDACTED]\"\r\n```\r\n\r\n## Caracter\u00edsticas\r\n\r\n- **Personalizaci\u00f3n Total:** Define tus propias listas de palabras prohibidas o carga listas desde archivos JSON.\r\n- **Manejo de Sin\u00f3nimos:** Detecta y filtra variaciones de palabras prohibidas usando sin\u00f3nimos.\r\n- **Filtrado Contextual:** Soporte para filtrado avanzado basado en el contexto (pr\u00f3ximamente).\r\n- **Normalizaci\u00f3n de Texto:** Elimina acentos y caracteres especiales para un filtrado m\u00e1s robusto.\r\n\r\n## Contribuci\u00f3n\r\n\r\nLas contribuciones son bienvenidas. Por favor, abre un issue o un pull request en [GitHub](https://github.com/jclanas2019/llm_content_filter).\r\n\r\n## Licencia\r\n\r\nEste proyecto est\u00e1 licenciado bajo la Licencia MIT. Consulta el archivo [LICENSE](LICENSE) para m\u00e1s detalles.\r\n\r\n## Contacto\r\n\r\nPara cualquier consulta o sugerencia, puedes contactarme en `juancarlos.lanas.ocampo@gmail.com`.\r\n\r\n## Ejemplo json \r\n```json\r\n{\r\n    \"banned_words\": [\r\n        \"violence\",\r\n        \"hate\",\r\n        \"discrimination\",\r\n        \"abuse\",\r\n        \"offensive\"\r\n    ],\r\n    \"synonyms\": {\r\n        \"violence\": [\"aggression\", \"brutality\", \"cruelty\"],\r\n        \"hate\": [\"detest\", \"loathe\", \"abhor\"],\r\n        \"discrimination\": [\"prejudice\", \"bias\", \"inequality\"],\r\n        \"abuse\": [\"mistreatment\", \"misuse\", \"exploitation\"],\r\n        \"offensive\": [\"insulting\", \"derogatory\", \"rude\"]\r\n    },\r\n    \"severity_levels\": {\r\n        \"violence\": 5,\r\n        \"hate\": 4,\r\n        \"discrimination\": 4,\r\n        \"abuse\": 5,\r\n        \"offensive\": 3\r\n    },\r\n    \"replacement_words\": {\r\n        \"default\": \"[REDACTED]\",\r\n        \"violence\": \"[VIOLENCE]\",\r\n        \"hate\": \"[HATE]\",\r\n        \"discrimination\": \"[DISCRIMINATION]\",\r\n        \"abuse\": \"[ABUSE]\",\r\n        \"offensive\": \"[OFFENSIVE]\"\r\n    },\r\n    \"contextual_filtering\": {\r\n        \"enabled\": true,\r\n        \"context_threshold\": 0.8\r\n    }\r\n}\r\n```\r\n# Uso con langchain y OpenAI\r\n## Paso 1: Configuraci\u00f3n de LangChain y OpenAI\r\n### Primero, aseg\u00farate de tener los paquetes necesarios instalados:\r\n\r\n```bash\r\npip install langchain openai\r\n```\r\n\r\n## Paso 2: Implementaci\u00f3n del Filtro Personalizado con LangChain\r\n### Aqu\u00ed te muestro c\u00f3mo puedes adaptar tu filtro personalizado para que funcione dentro de un pipeline de LangChain:\r\n\r\n```python\r\nfrom langchain.llms import OpenAI\r\nfrom langchain.chains import LLMChain\r\nfrom langchain.prompts import PromptTemplate\r\nfrom llm_content_filter.filter import LLMContentFilter\r\n\r\n# Configurar OpenAI LLM\r\nllm = OpenAI(temperature=0.7, openai_api_key=\"your-openai-api-key\")\r\n\r\n# Crear un template de prompt para LangChain\r\nprompt_template = PromptTemplate(\r\n    input_variables=[\"input_text\"],\r\n    template=\"Please generate a detailed response to the following input: {input_text}\"\r\n)\r\n\r\n# Crear una cadena que usa el LLM con el prompt\r\nchain = LLMChain(llm=llm, prompt=prompt_template)\r\n\r\n# Crear una instancia del filtro cargando las palabras prohibidas desde un archivo JSON\r\nfilter = LLMContentFilter(banned_words_file=\"custom_banned_words.json\")\r\n\r\n# Ejemplo de texto para procesar\r\ninput_text = \"This text is offensive\"\r\n\r\n# Generar texto usando LangChain y OpenAI\r\ngenerated_text = chain.run(input_text)\r\n\r\n# Verificar si el texto generado es apropiado\r\nif not filter.is_appropriate(generated_text):\r\n    print(\"Texto inapropiado detectado!\")\r\n    # Opcionalmente, puedes filtrar el texto antes de guardarlo o procesarlo\r\n    filtered_text = filter.filter_text(generated_text)\r\n    print(\"Texto filtrado:\", filtered_text)\r\nelse:\r\n    print(\"Texto generado:\", generated_text)\r\n\r\n# Guardar las palabras prohibidas actuales en un archivo JSON\r\nfilter.save_banned_words_to_file(\"updated_banned_words.json\")\r\n```\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A simple and customizable content filter for LLMs",
    "version": "0.2.7",
    "project_urls": {
        "Bug Reports": "https://github.com/jclanas2019/llm_content_filter/issues",
        "Homepage": "https://github.com/jclanas2019/llm_content_filter",
        "Source": "https://github.com/jclanas2019/llm_content_filter/"
    },
    "split_keywords": [
        "llm",
        "content",
        "filter",
        "nlp",
        "text",
        "moderation"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "397c9484df2ea3ea86a7affd5d5b665b7178b73a6e439e61b1ed38472b1e1481",
                "md5": "345c682edbad0c03eeec183b3dc2bff5",
                "sha256": "2a8e19b664b505fe122f5a8a0cafe28c829d2a90a1642aaa2ef5bf0c917641b1"
            },
            "downloads": -1,
            "filename": "llm_content_filter-0.2.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "345c682edbad0c03eeec183b3dc2bff5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 6440,
            "upload_time": "2024-08-25T15:05:22",
            "upload_time_iso_8601": "2024-08-25T15:05:22.231551Z",
            "url": "https://files.pythonhosted.org/packages/39/7c/9484df2ea3ea86a7affd5d5b665b7178b73a6e439e61b1ed38472b1e1481/llm_content_filter-0.2.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ca7f199cb954398c839c9947baac0d1e8352f76d1579062fd6f7d5cfaef644bf",
                "md5": "92c82792045d8ca15b8656df61659c1e",
                "sha256": "60fc259096a6656aacdf0070dc067bd6be5e9766a2bfce27c1a54dc9ca0d7083"
            },
            "downloads": -1,
            "filename": "llm_content_filter-0.2.7.tar.gz",
            "has_sig": false,
            "md5_digest": "92c82792045d8ca15b8656df61659c1e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 6157,
            "upload_time": "2024-08-25T15:05:24",
            "upload_time_iso_8601": "2024-08-25T15:05:24.719898Z",
            "url": "https://files.pythonhosted.org/packages/ca/7f/199cb954398c839c9947baac0d1e8352f76d1579062fd6f7d5cfaef644bf/llm_content_filter-0.2.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-25 15:05:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jclanas2019",
    "github_project": "llm_content_filter",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "llm-content-filter"
}
        
Elapsed time: 0.29641s