FAQ

Do I need pyAgrum?

No. It is a genuine optional dependency: every probability the package reports is also computable by exact enumeration in NumPy alone.

network.p_fail(engine="exact")

The two engines are cross-checked against each other precisely so that the NumPy one can be trusted:

network.cross_check()    # {'agree': 1.0, 'compared': 1.0, …}

pyAgrum scales further — exact enumeration refuses above 24 basic events per tree — so install it for large systems.

module 'HIP_HOPS_LLM' has no attribute '__version__'

You have a directory named like the module sitting next to your notebook — typically because you cloned the repository as HIP_HOPS_LLM and the notebook’s working directory precedes site-packages on sys.path. Python finds the directory first and imports it as an empty namespace package, so the import succeeds and the module has nothing in it.

Clone into a name nothing imports:

!git clone --depth=1 https://github.com/koo-ec/HIP_HOPS_LLM.git hiphopsllm-repo
%pip install -q -e "hiphopsllm-repo[bayes,graph]"

To confirm the diagnosis:

import hiphopsllm
print(hiphopsllm.__file__)      # should be under site-packages or src/, not ./

Do I need LangGraph?

Only to analyse a live compiled graph. The extractor also accepts mermaid text and specification dicts, which is how every example in these docs runs without it.

bn.show() produced a matplotlib figure, not pyAgrum. Why?

Graphviz’s dot binary is not on your PATH; the caption says so. See Installation. Nothing is wrong, and the numbers are identical.

The common-cause group was not detected

The extractor reads model ids from node source text and, when you pass globals_ns=globals(), from the live objects. A model reached through a wrapper it cannot see through will be missed. Declare it:

AgenticReliabilityStudy(graph, resource_overrides={
    "drafter": {"llm": "gpt-4o-2024-11-20"},
    "critic":  {"llm": "gpt-4o-2024-11-20"},
})

Always check study.system.common_cause_groups() before trusting a redundancy claim. An undetected shared snapshot turns a single point of failure into an apparently redundant architecture — the most consequential extraction error there is.

Why is my P(H2) so high?

Most likely because it is uncalibrated. Placeholder probabilities are deliberately pessimistic engineering judgement, and study.summary() prints NOT CALIBRATED in capitals when they are in force. Measure, then look again.

If it is calibrated and still high, read the cut sets. Order-1 cut sets dominate, and in agentic architectures they are usually a shared model snapshot or an aggregator that can fail on its own.

Can I use it without any outcome data?

Yes, and it is worth doing on day one. study.analyse() gives cut sets, single points of failure, common-cause groups and an FMEA from the architecture alone. Those findings are structural, cost nothing, and are often the ones worth acting on first.

What does an interval like [0.17, 0.29] actually mean?

That the probability the hazard occurs on one request drawn from the stated operational profile lies in that range, given the observed data and HIP-LLM’s admissible hyperparameter set. It is wide because a few hundred items do not pin it down. See Imprecise probability for what you may and may not conclude from one.

Two architectures have overlapping envelopes. Which is better?

This much data cannot tell you. Overlapping envelopes establish that the comparison is unresolved, not that the architectures are equivalent. Collect more data, choose a tighter bound (bound="expected"), or compare them structurally — cut-set orders and single points of failure are a real comparison that needs no data at all.

Why does calibration change the numbers but not the cut sets?

Because they are different things. Cut sets are a property of the Boolean structure, which measurement does not touch; probabilities are a property of the leaves, which is all measurement changes. A test asserts exactly this.

Can I calibrate latency or omission events?

Yes, but not with a correctness benchmark — it says nothing about them, so they are deliberately left on placeholders and reported as such. Measure them separately and calibrate against the relevant class:

from hiphopsllm import EvidenceCalibrator, FClass

latency = EvidenceCalibrator(profile=profile, classes=(FClass.LATE,))
latency.apply(study.failure_model, latency.fit_many(within_budget_by_agent))

My aggregator is a majority vote, not an AND

Override the gate:

study.bayesnet("H2", gate_overrides={"G7": ("KOFN", 2)})

Or fit it from data — see Tutorial 6.

Exact enumeration refused

More than 24 basic events in one tree. Use engine="pyagrum". If pyAgrum is also too slow, the tree is large enough that the cut sets are the right tool.

A component was left uncalibrated

study.calibration.uncalibrated_components lists them, and unmatched_evidence lists measurements that reached no component. Components are matched to measurements by shared name tokens; where that is unsafe, say so explicitly:

study.observe(outcomes, profile=profile, component_map={"pass_2": "verifier"})

How do I cite this?

Cite the HIP-LLM paper and this repository; CITATION.cff has both.