traceiq 0.3.2__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {traceiq-0.3.2 → traceiq-0.3.4}/.gitignore +4 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/LICENSE +1 -1
- {traceiq-0.3.2 → traceiq-0.3.4}/MATH.md +41 -0
- traceiq-0.3.4/PKG-INFO +356 -0
- traceiq-0.3.4/README.md +307 -0
- traceiq-0.3.4/docs/THEORY.md +317 -0
- traceiq-0.3.4/docs/architecture.md +98 -0
- traceiq-0.3.4/docs/configuration.md +131 -0
- traceiq-0.3.4/docs/integration.md +350 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/docs/metrics.md +16 -0
- traceiq-0.3.4/experiments/README.md +229 -0
- traceiq-0.3.4/experiments/data/tasks_math.jsonl +50 -0
- traceiq-0.3.4/experiments/mcp_demo_client.py +174 -0
- traceiq-0.3.4/experiments/mcp_server_traceiq.py +217 -0
- traceiq-0.3.4/experiments/plot_all.py +877 -0
- traceiq-0.3.4/experiments/run_comparison.py +486 -0
- traceiq-0.3.4/experiments/run_exp1_wrong_hint.py +216 -0
- traceiq-0.3.4/experiments/run_exp2_propagation.py +293 -0
- traceiq-0.3.4/experiments/run_exp3_mitigation.py +333 -0
- traceiq-0.3.4/experiments/run_metric_properties.py +631 -0
- traceiq-0.3.4/experiments/run_stats_analysis.py +546 -0
- traceiq-0.3.4/experiments/stats.py +526 -0
- traceiq-0.3.4/experiments/utils.py +386 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/pyproject.toml +1 -1
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/__init__.py +24 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/cli.py +226 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/graph.py +167 -12
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/metrics.py +67 -3
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/models.py +50 -1
- traceiq-0.3.4/src/traceiq/policy.py +383 -0
- traceiq-0.3.4/src/traceiq/report.py +446 -0
- traceiq-0.3.4/src/traceiq/risk.py +346 -0
- traceiq-0.3.4/src/traceiq/robust_stats.py +105 -0
- traceiq-0.3.4/src/traceiq/schema.py +185 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/scoring.py +23 -9
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/tracker.py +178 -16
- traceiq-0.3.4/src/traceiq/validity.py +180 -0
- traceiq-0.3.4/src/traceiq/weights.py +203 -0
- traceiq-0.3.4/tests/test_calibration.py +169 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_metrics.py +100 -4
- traceiq-0.3.4/tests/test_policy.py +395 -0
- traceiq-0.3.4/tests/test_risk.py +259 -0
- traceiq-0.3.4/tests/test_schema.py +248 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_scoring.py +149 -0
- traceiq-0.3.4/tests/test_validity.py +234 -0
- traceiq-0.3.4/tests/test_weights.py +208 -0
- traceiq-0.3.2/PKG-INFO +0 -661
- traceiq-0.3.2/README.md +0 -612
- {traceiq-0.3.2 → traceiq-0.3.4}/.github/workflows/ci.yml +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/.github/workflows/publish-testpypi.yml +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/.github/workflows/publish.yml +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/.pre-commit-config.yaml +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/CHANGELOG.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/CLAUDE.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/CONTRIBUTING.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/SECURITY.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/docs/api/index.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/docs/cli.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/docs/examples.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/docs/index.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/docs/installation.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/docs/quickstart.md +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/examples/output/.gitkeep +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/examples/simulate_infection.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/examples/smoke.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/examples/test_real_agents.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/mkdocs.yml +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/notebooks/demo.ipynb +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/research/__init__.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/research/ablation_study.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/research/sensitivity_analysis.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/research/synthetic_simulation.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/ruff.toml +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/capabilities.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/embeddings.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/export.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/plotting.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/storage/__init__.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/storage/base.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/storage/memory.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/src/traceiq/storage/sqlite.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/conftest.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_canonical_metrics.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_capabilities.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_export.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_plotting.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_pypi_safety.py +0 -0
- {traceiq-0.3.2 → traceiq-0.3.4}/tests/test_storage_sqlite.py +0 -0
|
@@ -88,6 +88,47 @@ $$\text{drift}_\text{cosine} = 1 - \frac{s_j(t^+) \cdot s_j(t^-)}{\|s_j(t^+)\| \
|
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
91
|
+
## Counterfactual Influence
|
|
92
|
+
|
|
93
|
+
### Formal Definition
|
|
94
|
+
|
|
95
|
+
The **counterfactual influence** of agent $i$ on agent $j$ at time $t$ is formally defined as:
|
|
96
|
+
|
|
97
|
+
$$I_{\text{CF}}(i \to j, t) = D(S_j(t^+), S_j^{\emptyset}(t^+))$$
|
|
98
|
+
|
|
99
|
+
where:
|
|
100
|
+
- $S_j(t^+)$ is agent $j$'s state after receiving message $M_i$ from agent $i$
|
|
101
|
+
- $S_j^{\emptyset}(t^+)$ is the **counterfactual** state agent $j$ would have had without receiving $M_i$
|
|
102
|
+
- $D(\cdot, \cdot)$ is a distance metric (L2 norm)
|
|
103
|
+
|
|
104
|
+
**Interpretation**: Counterfactual influence measures the difference between what happened and what *would have happened* without the interaction.
|
|
105
|
+
|
|
106
|
+
### Observable Approximation
|
|
107
|
+
|
|
108
|
+
Computing $S_j^{\emptyset}(t^+)$ requires running the agent without the message, which is expensive and often impractical. TraceIQ uses an **observable approximation**:
|
|
109
|
+
|
|
110
|
+
$$\hat{I}(i \to j, t) = D(S_j(t^+), S_j(t^-))$$
|
|
111
|
+
|
|
112
|
+
where $S_j(t^-)$ is agent $j$'s state immediately before receiving $M_i$.
|
|
113
|
+
|
|
114
|
+
### Justification
|
|
115
|
+
|
|
116
|
+
Under the **local stability assumption** (in the absence of external input, agent behavior is locally stable over short time intervals):
|
|
117
|
+
|
|
118
|
+
$$S_j^{\emptyset}(t^+) \approx S_j(t^-)$$
|
|
119
|
+
|
|
120
|
+
This approximation measures the actual state change, attributing it to the interaction. The error in this approximation is bounded by the agent's baseline variance.
|
|
121
|
+
|
|
122
|
+
### Relationship to IQx
|
|
123
|
+
|
|
124
|
+
The Influence Quotient (IQx) normalizes the observable influence by baseline:
|
|
125
|
+
|
|
126
|
+
$$\text{IQx}(i \to j, t) = \frac{\hat{I}(i \to j, t)}{B_j + \varepsilon} = \frac{D(S_j(t^+), S_j(t^-))}{B_j + \varepsilon}$$
|
|
127
|
+
|
|
128
|
+
This connects the theoretical counterfactual definition to the practical IQx metric.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
91
132
|
## Influence Quotient (IQx)
|
|
92
133
|
|
|
93
134
|
The Influence Quotient normalizes drift by receiver baseline:
|
traceiq-0.3.4/PKG-INFO
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: traceiq
|
|
3
|
+
Version: 0.3.4
|
|
4
|
+
Summary: Measure AI-to-AI influence in multi-agent systems
|
|
5
|
+
Project-URL: Homepage, https://github.com/Anarv2104/TraceIQ
|
|
6
|
+
Project-URL: Documentation, https://github.com/Anarv2104/TraceIQ#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/Anarv2104/TraceIQ
|
|
8
|
+
Author: TraceIQ Contributors
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agents,ai,embeddings,ieee,influence,research,security,tracking
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Security
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Requires-Dist: click>=8.0
|
|
24
|
+
Requires-Dist: networkx>=3.0
|
|
25
|
+
Requires-Dist: numpy>=1.24
|
|
26
|
+
Requires-Dist: pydantic>=2.0
|
|
27
|
+
Requires-Dist: rich>=13.0
|
|
28
|
+
Provides-Extra: all
|
|
29
|
+
Requires-Dist: matplotlib>=3.7; extra == 'all'
|
|
30
|
+
Requires-Dist: pandas>=2.0; extra == 'all'
|
|
31
|
+
Requires-Dist: scipy>=1.10; extra == 'all'
|
|
32
|
+
Requires-Dist: sentence-transformers>=2.2; extra == 'all'
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
36
|
+
Provides-Extra: docs
|
|
37
|
+
Requires-Dist: mkdocs-material>=9.0; extra == 'docs'
|
|
38
|
+
Requires-Dist: mkdocs>=1.5; extra == 'docs'
|
|
39
|
+
Provides-Extra: embedding
|
|
40
|
+
Requires-Dist: sentence-transformers>=2.2; extra == 'embedding'
|
|
41
|
+
Provides-Extra: plot
|
|
42
|
+
Requires-Dist: matplotlib>=3.7; extra == 'plot'
|
|
43
|
+
Provides-Extra: research
|
|
44
|
+
Requires-Dist: jupyterlab>=4.0; extra == 'research'
|
|
45
|
+
Requires-Dist: matplotlib>=3.7; extra == 'research'
|
|
46
|
+
Requires-Dist: pandas>=2.0; extra == 'research'
|
|
47
|
+
Requires-Dist: scipy>=1.10; extra == 'research'
|
|
48
|
+
Description-Content-Type: text/markdown
|
|
49
|
+
|
|
50
|
+
# TraceIQ
|
|
51
|
+
|
|
52
|
+
**Measure AI-to-AI Influence in Multi-Agent Systems**
|
|
53
|
+
|
|
54
|
+
[](https://pypi.org/project/traceiq/)
|
|
55
|
+
[](https://pypi.org/project/traceiq/)
|
|
56
|
+
[](https://pypi.org/project/traceiq/)
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## What It Is
|
|
61
|
+
|
|
62
|
+
- Tracks and quantifies how AI agents influence each other in multi-agent systems
|
|
63
|
+
- Uses semantic embeddings to measure state changes between interactions
|
|
64
|
+
- Provides network-level analysis of influence propagation
|
|
65
|
+
- Includes anomaly detection for unusual influence patterns
|
|
66
|
+
- Supports research with IEEE-standard metrics (IQx, RWI, Z-score)
|
|
67
|
+
|
|
68
|
+
## What It Does NOT Measure
|
|
69
|
+
|
|
70
|
+
- **Causal attribution**: TraceIQ detects correlation, not causation
|
|
71
|
+
- **Intent**: Cannot determine if influence is intentional or benign
|
|
72
|
+
- **Content analysis**: Does not parse meaning, only embedding similarity
|
|
73
|
+
- **Internal state**: Measures observable outputs, not agent cognition
|
|
74
|
+
|
|
75
|
+
## Research Context
|
|
76
|
+
|
|
77
|
+
TraceIQ is developed as part of research on AI-to-AI influence and multi-agent coordination. The metrics are grounded in a formal mathematical framework documented in [MATH.md](MATH.md) and [docs/THEORY.md](docs/THEORY.md).
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Quickstart
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
from traceiq import InfluenceTracker
|
|
85
|
+
|
|
86
|
+
# Create tracker (use_mock_embedder=True for testing without sentence-transformers)
|
|
87
|
+
tracker = InfluenceTracker(use_mock_embedder=True)
|
|
88
|
+
|
|
89
|
+
# Track an interaction
|
|
90
|
+
result = tracker.track_event(
|
|
91
|
+
sender_id="agent_a",
|
|
92
|
+
receiver_id="agent_b",
|
|
93
|
+
sender_content="We should all switch to renewable energy!",
|
|
94
|
+
receiver_content="You make a good point. Renewables are the future.",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Access metrics
|
|
98
|
+
print(f"State Drift: {result['drift_l2_state']}")
|
|
99
|
+
print(f"IQx: {result['IQx']}")
|
|
100
|
+
print(f"Alert: {result['alert']}")
|
|
101
|
+
print(f"Risk Level: {result['risk_level']}")
|
|
102
|
+
|
|
103
|
+
tracker.close()
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Installation
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Core installation
|
|
110
|
+
pip install traceiq
|
|
111
|
+
|
|
112
|
+
# With plotting support (matplotlib)
|
|
113
|
+
pip install "traceiq[plot]"
|
|
114
|
+
|
|
115
|
+
# With real embeddings (sentence-transformers)
|
|
116
|
+
pip install "traceiq[embedding]"
|
|
117
|
+
|
|
118
|
+
# Everything included
|
|
119
|
+
pip install "traceiq[all]"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Development Installation
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
git clone https://github.com/Anarv2104/TraceIQ.git
|
|
126
|
+
cd TraceIQ
|
|
127
|
+
pip install -e ".[all,dev]"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Metrics Overview
|
|
133
|
+
|
|
134
|
+
| Metric | What It Captures |
|
|
135
|
+
|--------|------------------|
|
|
136
|
+
| **State Drift** | How much a receiver's output changed after an interaction |
|
|
137
|
+
| **Influence Quotient (IQx)** | Normalized influence relative to baseline responsiveness |
|
|
138
|
+
| **Propagation Risk (PR)** | Network-level instability (spectral radius > 1.0 = amplification) |
|
|
139
|
+
| **Risk-Weighted Influence (RWI)** | IQx adjusted for sender's attack surface |
|
|
140
|
+
| **Z-score** | Anomaly detection (values > threshold trigger alerts) |
|
|
141
|
+
|
|
142
|
+
For detailed metric documentation, see [docs/metrics.md](docs/metrics.md).
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Basic Usage
|
|
147
|
+
|
|
148
|
+
### Track Multiple Interactions
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
interactions = [
|
|
152
|
+
{
|
|
153
|
+
"sender_id": "agent_a",
|
|
154
|
+
"receiver_id": "agent_b",
|
|
155
|
+
"sender_content": "AI will transform healthcare completely.",
|
|
156
|
+
"receiver_content": "Yes, medical AI is very promising.",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"sender_id": "agent_b",
|
|
160
|
+
"receiver_id": "agent_c",
|
|
161
|
+
"sender_content": "Healthcare AI needs careful regulation.",
|
|
162
|
+
"receiver_content": "Agreed, we need safety standards.",
|
|
163
|
+
},
|
|
164
|
+
]
|
|
165
|
+
|
|
166
|
+
results = tracker.bulk_track(interactions)
|
|
167
|
+
|
|
168
|
+
for r in results:
|
|
169
|
+
print(f"{r['sender_id']} -> {r['receiver_id']}: IQx={r['IQx']}")
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Generate Summary Report
|
|
173
|
+
|
|
174
|
+
```python
|
|
175
|
+
summary = tracker.summary(top_n=5)
|
|
176
|
+
|
|
177
|
+
print(f"Total Events: {summary.total_events}")
|
|
178
|
+
print(f"Top Influencers: {summary.top_influencers}")
|
|
179
|
+
print(f"Most Susceptible: {summary.top_susceptible}")
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Export Data
|
|
183
|
+
|
|
184
|
+
```python
|
|
185
|
+
tracker.export_csv("influence_data.csv")
|
|
186
|
+
tracker.export_jsonl("influence_data.jsonl")
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Monitor Anomalies
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
# Get propagation risk
|
|
193
|
+
pr = tracker.get_propagation_risk()
|
|
194
|
+
if pr > 1.0:
|
|
195
|
+
print(f"Warning: PR={pr:.2f} - influence may amplify")
|
|
196
|
+
|
|
197
|
+
# Get anomaly alerts (only valid metrics, not cold-start)
|
|
198
|
+
alerts = tracker.get_alerts()
|
|
199
|
+
for alert in alerts:
|
|
200
|
+
print(f"Alert: Z={alert.Z_score:.2f}")
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## CLI Usage
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Initialize a database
|
|
209
|
+
traceiq init --db analysis.db
|
|
210
|
+
|
|
211
|
+
# Ingest interactions from JSONL file
|
|
212
|
+
traceiq ingest interactions.jsonl --db analysis.db
|
|
213
|
+
|
|
214
|
+
# View summary report
|
|
215
|
+
traceiq summary --db analysis.db
|
|
216
|
+
|
|
217
|
+
# Export data
|
|
218
|
+
traceiq export --db analysis.db -o results.csv --format csv
|
|
219
|
+
|
|
220
|
+
# Generate plots
|
|
221
|
+
traceiq plot heatmap --db analysis.db -o heatmap.png
|
|
222
|
+
traceiq plot network --db analysis.db -o network.png
|
|
223
|
+
|
|
224
|
+
# IEEE Metrics Commands
|
|
225
|
+
traceiq propagation-risk --db analysis.db
|
|
226
|
+
traceiq alerts --db analysis.db --threshold 2.0
|
|
227
|
+
traceiq risky-agents --db analysis.db --top-n 10
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
For full CLI reference, see [docs/cli.md](docs/cli.md).
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Visualizations
|
|
235
|
+
|
|
236
|
+
```python
|
|
237
|
+
from traceiq.plotting import (
|
|
238
|
+
plot_influence_heatmap,
|
|
239
|
+
plot_top_influencers,
|
|
240
|
+
plot_influence_network,
|
|
241
|
+
plot_drift_over_time,
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
# Influence heatmap
|
|
245
|
+
plot_influence_heatmap(tracker.graph, output_path="heatmap.png")
|
|
246
|
+
|
|
247
|
+
# Top influencers bar chart
|
|
248
|
+
plot_top_influencers(tracker.graph, n=10, output_path="influencers.png")
|
|
249
|
+
|
|
250
|
+
# Network visualization
|
|
251
|
+
plot_influence_network(tracker.graph, output_path="network.png")
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Research Testbed
|
|
257
|
+
|
|
258
|
+
TraceIQ includes reproducible experiments for studying AI-to-AI influence:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
pip install -e ".[research]"
|
|
262
|
+
|
|
263
|
+
# Run experiments
|
|
264
|
+
python experiments/run_exp1_wrong_hint.py # Wrong hint infection
|
|
265
|
+
python experiments/run_exp2_propagation.py # Multi-hop propagation
|
|
266
|
+
python experiments/run_exp3_mitigation.py # Mitigation policy
|
|
267
|
+
|
|
268
|
+
# Generate plots
|
|
269
|
+
python experiments/plot_all.py
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
See [experiments/README.md](experiments/README.md) for details.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Documentation
|
|
277
|
+
|
|
278
|
+
| Document | Description |
|
|
279
|
+
|----------|-------------|
|
|
280
|
+
| [docs/quickstart.md](docs/quickstart.md) | Getting started guide |
|
|
281
|
+
| [docs/metrics.md](docs/metrics.md) | Detailed metric documentation |
|
|
282
|
+
| [docs/configuration.md](docs/configuration.md) | Configuration reference |
|
|
283
|
+
| [docs/architecture.md](docs/architecture.md) | System architecture |
|
|
284
|
+
| [docs/integration.md](docs/integration.md) | Integration patterns |
|
|
285
|
+
| [docs/cli.md](docs/cli.md) | CLI reference |
|
|
286
|
+
| [docs/THEORY.md](docs/THEORY.md) | Mathematical foundations |
|
|
287
|
+
| [MATH.md](MATH.md) | IEEE metric formulas |
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Dependencies
|
|
292
|
+
|
|
293
|
+
**Core:**
|
|
294
|
+
- pydantic >= 2.0
|
|
295
|
+
- numpy >= 1.24
|
|
296
|
+
- networkx >= 3.0
|
|
297
|
+
- click >= 8.0
|
|
298
|
+
- rich >= 13.0
|
|
299
|
+
|
|
300
|
+
**Optional:**
|
|
301
|
+
- sentence-transformers >= 2.2 (`[embedding]`)
|
|
302
|
+
- matplotlib >= 3.7 (`[plot]`)
|
|
303
|
+
- pandas >= 2.0, scipy >= 1.10 (`[research]`)
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Development
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
# Install dev dependencies
|
|
311
|
+
pip install -e ".[all,dev]"
|
|
312
|
+
|
|
313
|
+
# Run linter
|
|
314
|
+
ruff check src/ tests/
|
|
315
|
+
|
|
316
|
+
# Run tests
|
|
317
|
+
pytest -v
|
|
318
|
+
|
|
319
|
+
# Build documentation
|
|
320
|
+
pip install mkdocs mkdocs-material
|
|
321
|
+
mkdocs serve
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## License
|
|
327
|
+
|
|
328
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
329
|
+
|
|
330
|
+
## Contributing
|
|
331
|
+
|
|
332
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
333
|
+
|
|
334
|
+
1. Fork the repository
|
|
335
|
+
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
336
|
+
3. Run tests (`pytest`)
|
|
337
|
+
4. Run linter (`ruff check src/ tests/`)
|
|
338
|
+
5. Commit your changes
|
|
339
|
+
6. Push to the branch
|
|
340
|
+
7. Open a Pull Request
|
|
341
|
+
|
|
342
|
+
## Citation
|
|
343
|
+
|
|
344
|
+
If you use TraceIQ in your research, please cite:
|
|
345
|
+
|
|
346
|
+
```bibtex
|
|
347
|
+
@software{traceiq,
|
|
348
|
+
title = {TraceIQ: Measure AI-to-AI Influence in Multi-Agent Systems},
|
|
349
|
+
year = {2024},
|
|
350
|
+
url = {https://github.com/Anarv2104/TraceIQ}
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
*Built for AI safety researchers and multi-agent system developers*
|