Skip to main content

Blip Flow Analysis

Blip Flow Analysis provides a solution for chatbot constructors to identify problems in flow structure that can be originated from bad structuring or poor organization.

Installation

Use pip to install:

pip install blip_flowanalysis

Usage

Missing Trackings analysis

Using the MissingTrackigns analyser:

import blip_flowanalysis as bfa

# Replace __chatbot_as_json__ parameter by your json bot.
bot_flow = bfa.Flow(__chatbot_as_json__)
analyser = bfa.MissingTrackings(minimum=1)

# Return `True` if amount of Trackings is above minimum, `False` otherwise.
print(analyser.analyse(bot_flow)) 

Process HTTP Return Validation analysis

Using the ProcessHTTPReturnValidation analyser:

# import json
import blip_flowanalysis as bfa

bot_json = str("Your chatbot json here.")
# bot_json = json.load("or your chatbot json file here")

bot_flow = bfa.Flow(bot_json)
http_analyser = bfa.ProcessHTTPReturnValidation()

# Report with "summary" and "details" with long scripts detections.
report = http_analyser.analyse(bot_flow)

print(report)

Output is like:

{
    "summary": {
        "process HTTP actions": n_process_http,
        "process HTTP actions regular": n_regular,
        "process HTTP actions missing status": n_missing_status,
        "process HTTP actions missing body": n_missing_body,
        "process HTTP actions improper declared body": n_improper_declared_body,
        "process HTTP actions any used body before status": n_any_used_body_before_status,
        "states count": n_states,
        "states with irregular process HTTP action": n_irregular_states
    },
    "details": [
        {
            "state id": state_id,  # State ID on bot flow.
            "state name": state_name,  # State name on bot flow.
            "io action": io_action,  # Any of inputActions and outputActions.
            "action number": action_number,  # Action position on actions list.
            "http method": http_method,  # Examples: GET, PUT, POST, ...
            "status variable": status_variable,  # Variable with response status value
            "body variable": body_variable,  # Variable with response body value
            "all paths used status": true/false,  # Check if all paths after process HTTP used status
            "all paths used body": true/false,  # Check if all paths after process HTTP used body
            "declared status": true/false,  # Check if status variable was declared
            "declared body": true/false,  # Check if body variable was declared
            "must use body": true/false,  # Check if HTTP method requires use body
            "must not declare body": true/false,  # Check if HTTP method requires not use body
            "paths with missing status": [  # Empty if "all paths used status" is true
                {
                    "path": [
                        {"id": state_id, "name": state_name},  # States on this path
                        ...
                    ],
                    "status use": {}  # On "paths with miss status" it is empty
                    "body use": {
                        "state": {"id": state_id, "name": state_name},  # State with first body use
                        "stage on state": stage,  # inputActions, outputs or outputActions
                        "index on stage": index  # Index on stage with first body use
                    }
                },
                ...
            ],
            "paths with missing body": [
                {
                    "path": [
                        {"id": state_id, "name": state_name},  # States on this path
                        ...
                    ],
                    "status use": {
                        "state": {"id": state_id, "name": state_name},  # State with first status use
                        "stage on state": stage,  # inputActions, outputs or outputActions
                        "index on stage": index  # Index on stage with first status use
                    }
                    "body use": {}  # On "paths with miss body" it is empty
                },
                ...
            ],
            "paths with body before status": [
                {
                    "path": [
                        {"id": state_id, "name": state_name},  # States on this path
                        ...
                    ],
                    "status use": {
                        "state": {"id": state_id, "name": state_name},  # State with first status use
                        "stage on state": stage,  # inputActions, outputs or outputActions
                        "index on stage": index  # Index on stage with first status use
                    }
                    "body use": {
                        "state": {"id": state_id, "name": state_name},  # State with first body use
                        "stage on state": stage,  # inputActions, outputs or outputActions
                        "index on stage": index  # Index on stage with first body use
                    }
                },
                ...
            ],
            "causes": causes  # Explain why this process HTTP return validation is irregular.
        },
        ...
    ]
}

Long Scripts analysis

Using the LongScript analyser:

# import json
import blip_flowanalysis as bfa

bot_json = str("Your chatbot json here.")
# bot_json = json.load("or your chatbot json file here")

bot_flow = bfa.Flow(bot_json)
ls_analyser = bfa.LongScript()

# Report with "summary" and "details" with long scripts detections.
report = ls_analyser.analyse(bot_flow)

print(report)

Output is like:

{
    "summary": {
        "scripts count": n_scripts,
        "scripts too long": n_long_scripts,
        "states count": n_states,
        "states with too long scripts": n_irregular_states
    },
    "details": [
        {
            "state id": state_id,  # State ID on bot flow.
            "state name": state_name,  # State name on bot flow.
            "io action": io_action,  # Any of inputActions and outputActions.
            "action number": action_number,  # Action position on actions list.
            "script": script,  # Script.
            "chars": length,  # Code characters quantity.
            "lines": lines,  # Not blank code lines quantity.
            "functions": functions,  # Top level functions quantity.
            "commands": commands,  # Commands quantity.
            "lines by commands": lines_by_commands,  # Lines commands ratio.
            "causes": cause  # Explain why this script was detected.
        },
        ...
    ]
}

Duplicated Paths analysis

Using the DuplicatedPaths analyser:

# import json
import blip_flowanalysis as bfa

bot_json = str("Your chatbot json here.")
# bot_json = json.load("or your chatbot json file here")

bot_flow = bfa.Flow(bot_json)
dp_analyser = bfa.DuplicatedPaths()

# Report with "summary" and "details" with long scripts detections.
report = dp_analyser.analyse(bot_flow)

print(report)

Output is like:

{
    "summary": {
        "pairs of duplicated paths": n_duplicated_paths,
        "states count": n_states,
        "states on duplicated paths": n_irregular_states
    },
    "details": [
        {
            "levels quantity": n_levels,  # Quantity of levels on path
            "states quantity": n_states_on_path,  # Quantity of states on path
            "root 0": {"id": state_id, "name": state_name},  # State as root on path 0
            "root 1": {"id": state_id, "name": state_name},  # State as root on path 1
            "path 0": {  # Path 0
                "level 0": [  # First level on path 0
                    {"id": state_id, "name": state_name},  # States on level 0 on path 0
                    ...  # Other states
                ],
                ...  # Other levels
            },
            "path 1": {  # Path 1
                "level 0": [  # First level on path 1
                    {"id": state_id, "name": state_name},  # States on level 0 on path 1
                    ...  # Other states
                ],
                ...  # Other levels
            },
        },
        ...
    ]
}

Author

Take Data&Analytics Research

License

MIT License

Metadata

Release files for blip-flowanalysis 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for blip-flowanalysis 0.6.1
File Size Uploaded Provenance
blip_flowanalysis-0.6.1.tar.gz 31.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for blip-flowanalysis 0.6.1
File Interpreter ABI Platform
blip_flowanalysis-0.6.1-py3-none-any.whl Python 3 none any Details

Total release size: 76.3 kB

Release files / blip_flowanalysis-0.6.1.tar.gz

Download URL blip_flowanalysis-0.6.1.tar.gz
Size 31.3 kB
Tags Source
SHA-256 checksum
How to use checksums
78512345c9889d2fb8811c9884b9f2dca489c98ce4817315c71826da97946960
BLAKE2b-256 checksum
How to use checksums
fdd6d510043aca5d40a68969f4f17d7b5b80353d17bb9a75b8188bf8c0d9d49e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.7.7

Release files / blip_flowanalysis-0.6.1-py3-none-any.whl

Download URL blip_flowanalysis-0.6.1-py3-none-any.whl
Size 45.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
28f7f99f0625528b0c8f7ed4725cefb68cf48c0c908e36d93ea20323361ec66f
BLAKE2b-256 checksum
How to use checksums
90ecd1ec257398220869939038ec440d5b5ccc4300d7eb4ad2ead593f789eac7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.7.7

Security for blip-flowanalysis 0.6.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page