spanforge 1.0.0__py3-none-any.whl
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.
- spanforge/__init__.py +815 -0
- spanforge/_ansi.py +93 -0
- spanforge/_batch_exporter.py +409 -0
- spanforge/_cli.py +2094 -0
- spanforge/_cli_audit.py +639 -0
- spanforge/_cli_compliance.py +711 -0
- spanforge/_cli_cost.py +243 -0
- spanforge/_cli_ops.py +791 -0
- spanforge/_cli_phase11.py +356 -0
- spanforge/_hooks.py +337 -0
- spanforge/_server.py +1708 -0
- spanforge/_span.py +1036 -0
- spanforge/_store.py +288 -0
- spanforge/_stream.py +664 -0
- spanforge/_trace.py +335 -0
- spanforge/_tracer.py +254 -0
- spanforge/actor.py +141 -0
- spanforge/alerts.py +469 -0
- spanforge/auto.py +464 -0
- spanforge/baseline.py +335 -0
- spanforge/cache.py +635 -0
- spanforge/compliance.py +325 -0
- spanforge/config.py +532 -0
- spanforge/consent.py +228 -0
- spanforge/consumer.py +377 -0
- spanforge/core/__init__.py +5 -0
- spanforge/core/compliance_mapping.py +1254 -0
- spanforge/cost.py +600 -0
- spanforge/debug.py +548 -0
- spanforge/deprecations.py +205 -0
- spanforge/drift.py +482 -0
- spanforge/egress.py +58 -0
- spanforge/eval.py +648 -0
- spanforge/event.py +1064 -0
- spanforge/exceptions.py +240 -0
- spanforge/explain.py +178 -0
- spanforge/export/__init__.py +69 -0
- spanforge/export/append_only.py +337 -0
- spanforge/export/cloud.py +357 -0
- spanforge/export/datadog.py +497 -0
- spanforge/export/grafana.py +320 -0
- spanforge/export/jsonl.py +195 -0
- spanforge/export/openinference.py +158 -0
- spanforge/export/otel_bridge.py +294 -0
- spanforge/export/otlp.py +811 -0
- spanforge/export/otlp_bridge.py +233 -0
- spanforge/export/redis_backend.py +282 -0
- spanforge/export/siem_schema.py +98 -0
- spanforge/export/siem_splunk.py +264 -0
- spanforge/export/siem_syslog.py +212 -0
- spanforge/export/webhook.py +299 -0
- spanforge/exporters/__init__.py +30 -0
- spanforge/exporters/console.py +271 -0
- spanforge/exporters/jsonl.py +144 -0
- spanforge/exporters/sqlite.py +142 -0
- spanforge/gate.py +1150 -0
- spanforge/governance.py +181 -0
- spanforge/hitl.py +295 -0
- spanforge/http.py +187 -0
- spanforge/inspect.py +427 -0
- spanforge/integrations/__init__.py +45 -0
- spanforge/integrations/_pricing.py +280 -0
- spanforge/integrations/anthropic.py +388 -0
- spanforge/integrations/azure_openai.py +133 -0
- spanforge/integrations/bedrock.py +292 -0
- spanforge/integrations/crewai.py +251 -0
- spanforge/integrations/gemini.py +351 -0
- spanforge/integrations/groq.py +442 -0
- spanforge/integrations/langchain.py +349 -0
- spanforge/integrations/langgraph.py +306 -0
- spanforge/integrations/llamaindex.py +373 -0
- spanforge/integrations/ollama.py +287 -0
- spanforge/integrations/openai.py +368 -0
- spanforge/integrations/together.py +483 -0
- spanforge/io.py +214 -0
- spanforge/lint.py +322 -0
- spanforge/metrics.py +417 -0
- spanforge/metrics_export.py +343 -0
- spanforge/migrate.py +402 -0
- spanforge/model_registry.py +278 -0
- spanforge/models.py +389 -0
- spanforge/namespaces/__init__.py +254 -0
- spanforge/namespaces/audit.py +256 -0
- spanforge/namespaces/cache.py +237 -0
- spanforge/namespaces/chain.py +77 -0
- spanforge/namespaces/confidence.py +72 -0
- spanforge/namespaces/consent.py +92 -0
- spanforge/namespaces/cost.py +179 -0
- spanforge/namespaces/decision.py +143 -0
- spanforge/namespaces/diff.py +157 -0
- spanforge/namespaces/drift.py +80 -0
- spanforge/namespaces/eval_.py +251 -0
- spanforge/namespaces/feedback.py +241 -0
- spanforge/namespaces/fence.py +193 -0
- spanforge/namespaces/guard.py +105 -0
- spanforge/namespaces/hitl.py +91 -0
- spanforge/namespaces/latency.py +72 -0
- spanforge/namespaces/prompt.py +190 -0
- spanforge/namespaces/redact.py +173 -0
- spanforge/namespaces/retrieval.py +379 -0
- spanforge/namespaces/runtime_governance.py +494 -0
- spanforge/namespaces/template.py +208 -0
- spanforge/namespaces/tool_call.py +77 -0
- spanforge/namespaces/trace.py +1029 -0
- spanforge/normalizer.py +171 -0
- spanforge/plugins.py +82 -0
- spanforge/presidio_backend.py +349 -0
- spanforge/processor.py +258 -0
- spanforge/prompt_registry.py +418 -0
- spanforge/py.typed +0 -0
- spanforge/redact.py +914 -0
- spanforge/regression.py +192 -0
- spanforge/runtime_policy.py +159 -0
- spanforge/sampling.py +511 -0
- spanforge/schema.py +183 -0
- spanforge/schemas/v1.0/schema.json +170 -0
- spanforge/schemas/v2.0/schema.json +536 -0
- spanforge/sdk/__init__.py +625 -0
- spanforge/sdk/_base.py +584 -0
- spanforge/sdk/_base.pyi +71 -0
- spanforge/sdk/_exceptions.py +1096 -0
- spanforge/sdk/_types.py +2184 -0
- spanforge/sdk/alert.py +1514 -0
- spanforge/sdk/alert.pyi +56 -0
- spanforge/sdk/audit.py +1196 -0
- spanforge/sdk/audit.pyi +67 -0
- spanforge/sdk/cec.py +1215 -0
- spanforge/sdk/cec.pyi +37 -0
- spanforge/sdk/config.py +641 -0
- spanforge/sdk/config.pyi +55 -0
- spanforge/sdk/enterprise.py +714 -0
- spanforge/sdk/enterprise.pyi +79 -0
- spanforge/sdk/explain.py +170 -0
- spanforge/sdk/fallback.py +432 -0
- spanforge/sdk/feedback.py +351 -0
- spanforge/sdk/gate.py +874 -0
- spanforge/sdk/gate.pyi +51 -0
- spanforge/sdk/identity.py +2114 -0
- spanforge/sdk/identity.pyi +47 -0
- spanforge/sdk/lineage.py +175 -0
- spanforge/sdk/observe.py +1065 -0
- spanforge/sdk/observe.pyi +50 -0
- spanforge/sdk/operator.py +338 -0
- spanforge/sdk/pii.py +1473 -0
- spanforge/sdk/pii.pyi +119 -0
- spanforge/sdk/pipelines.py +458 -0
- spanforge/sdk/pipelines.pyi +39 -0
- spanforge/sdk/policy.py +930 -0
- spanforge/sdk/rag.py +594 -0
- spanforge/sdk/rbac.py +280 -0
- spanforge/sdk/registry.py +430 -0
- spanforge/sdk/registry.pyi +46 -0
- spanforge/sdk/scope.py +279 -0
- spanforge/sdk/secrets.py +293 -0
- spanforge/sdk/secrets.pyi +25 -0
- spanforge/sdk/security.py +560 -0
- spanforge/sdk/security.pyi +57 -0
- spanforge/sdk/trust.py +472 -0
- spanforge/sdk/trust.pyi +41 -0
- spanforge/secrets.py +799 -0
- spanforge/signing.py +1179 -0
- spanforge/stats.py +100 -0
- spanforge/stream.py +560 -0
- spanforge/testing.py +378 -0
- spanforge/testing_mocks.py +1052 -0
- spanforge/trace.py +199 -0
- spanforge/types.py +696 -0
- spanforge/ulid.py +300 -0
- spanforge/validate.py +379 -0
- spanforge-1.0.0.dist-info/METADATA +1509 -0
- spanforge-1.0.0.dist-info/RECORD +174 -0
- spanforge-1.0.0.dist-info/WHEEL +4 -0
- spanforge-1.0.0.dist-info/entry_points.txt +5 -0
- spanforge-1.0.0.dist-info/licenses/LICENSE +128 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://llm-toolkit-schema.dev/schemas/v1.0/schema.json",
|
|
4
|
+
"title": "llm-toolkit-schema Event Envelope",
|
|
5
|
+
"description": "Canonical JSON Schema for the llm-toolkit-schema v1.0 Event envelope. Every event emitted by a tool in the LLM Developer Toolkit must validate against this schema.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"event_id",
|
|
10
|
+
"event_type",
|
|
11
|
+
"timestamp",
|
|
12
|
+
"source",
|
|
13
|
+
"payload"
|
|
14
|
+
],
|
|
15
|
+
"additionalProperties": false,
|
|
16
|
+
"properties": {
|
|
17
|
+
"schema_version": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "Schema version. Accepted values: '1.0' and '2.0' (RFC-0001 §15.5).",
|
|
20
|
+
"enum": ["1.0", "2.0"],
|
|
21
|
+
"examples": ["1.0", "2.0"]
|
|
22
|
+
},
|
|
23
|
+
"event_id": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Universally unique ULID identifier for this event. 26-character Crockford Base32 string; first character MUST be in [0-7].",
|
|
26
|
+
"pattern": "^[0-7][0-9A-HJKMNP-TV-Z]{25}$",
|
|
27
|
+
"minLength": 26,
|
|
28
|
+
"maxLength": 26,
|
|
29
|
+
"examples": ["01HZ8G3EPRP1YF2QV70NMBE6J4"]
|
|
30
|
+
},
|
|
31
|
+
"event_type": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Dot-separated namespaced event type, e.g. 'llm.trace.span.completed'.",
|
|
34
|
+
"oneOf": [
|
|
35
|
+
{
|
|
36
|
+
"enum": [
|
|
37
|
+
"llm.trace.span.started",
|
|
38
|
+
"llm.trace.span.completed",
|
|
39
|
+
"llm.trace.span.failed",
|
|
40
|
+
"llm.trace.agent.step",
|
|
41
|
+
"llm.trace.agent.completed",
|
|
42
|
+
"llm.trace.reasoning.step",
|
|
43
|
+
"llm.cost.token.recorded",
|
|
44
|
+
"llm.cost.session.recorded",
|
|
45
|
+
"llm.cost.attributed",
|
|
46
|
+
"llm.cache.hit",
|
|
47
|
+
"llm.cache.miss",
|
|
48
|
+
"llm.cache.evicted",
|
|
49
|
+
"llm.cache.written",
|
|
50
|
+
"llm.eval.score.recorded",
|
|
51
|
+
"llm.eval.regression.detected",
|
|
52
|
+
"llm.eval.scenario.started",
|
|
53
|
+
"llm.eval.scenario.completed",
|
|
54
|
+
"llm.guard.input.blocked",
|
|
55
|
+
"llm.guard.input.passed",
|
|
56
|
+
"llm.guard.output.blocked",
|
|
57
|
+
"llm.guard.output.passed",
|
|
58
|
+
"llm.fence.validated",
|
|
59
|
+
"llm.fence.retry.triggered",
|
|
60
|
+
"llm.fence.max_retries.exceeded",
|
|
61
|
+
"llm.prompt.rendered",
|
|
62
|
+
"llm.prompt.template.loaded",
|
|
63
|
+
"llm.prompt.version.changed",
|
|
64
|
+
"llm.redact.pii.detected",
|
|
65
|
+
"llm.redact.phi.detected",
|
|
66
|
+
"llm.redact.applied",
|
|
67
|
+
"llm.diff.computed",
|
|
68
|
+
"llm.diff.regression.flagged",
|
|
69
|
+
"llm.template.registered",
|
|
70
|
+
"llm.template.variable.bound",
|
|
71
|
+
"llm.template.validation.failed",
|
|
72
|
+
"llm.audit.key.rotated"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"pattern": "^(?!llm\\.)[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+\\.[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"examples": [
|
|
80
|
+
"llm.trace.span.completed",
|
|
81
|
+
"llm.prompt.rendered",
|
|
82
|
+
"llm.cost.token.recorded"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"timestamp": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"description": "UTC ISO-8601 timestamp with microsecond precision (exactly 6 decimal places). Format: YYYY-MM-DDThh:mm:ss.ffffffZ.",
|
|
88
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{6}Z$",
|
|
89
|
+
"examples": ["2024-05-13T12:00:00.000000Z"]
|
|
90
|
+
},
|
|
91
|
+
"source": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "Emitting tool in 'name@semver' format, e.g. 'my-agent@1.0.0'.",
|
|
94
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9._-]*@\\d+\\.\\d+\\.\\d+(?:[.-][a-zA-Z0-9.]+)?$",
|
|
95
|
+
"examples": ["llm-trace@0.3.1", "promptlock@1.0.0", "MyAgent@2.1.0-beta.1"]
|
|
96
|
+
},
|
|
97
|
+
"payload": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"description": "Tool-specific event data. Must contain at least one property.",
|
|
100
|
+
"minProperties": 1
|
|
101
|
+
},
|
|
102
|
+
"trace_id": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"description": "OpenTelemetry trace ID — exactly 32 lowercase hexadecimal characters.",
|
|
105
|
+
"pattern": "^[0-9a-f]{32}$",
|
|
106
|
+
"examples": ["4bf92f3577b34da6a3ce929d0e0e4736"]
|
|
107
|
+
},
|
|
108
|
+
"span_id": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"description": "OpenTelemetry span ID — exactly 16 lowercase hexadecimal characters.",
|
|
111
|
+
"pattern": "^[0-9a-f]{16}$",
|
|
112
|
+
"examples": ["00f067aa0ba902b7"]
|
|
113
|
+
},
|
|
114
|
+
"parent_span_id": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"description": "Parent span ID — exactly 16 lowercase hexadecimal characters.",
|
|
117
|
+
"pattern": "^[0-9a-f]{16}$"
|
|
118
|
+
},
|
|
119
|
+
"org_id": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"description": "Organisation identifier for multi-tenant deployments.",
|
|
122
|
+
"minLength": 1
|
|
123
|
+
},
|
|
124
|
+
"team_id": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"description": "Team identifier.",
|
|
127
|
+
"minLength": 1
|
|
128
|
+
},
|
|
129
|
+
"actor_id": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "User or service-account identifier that triggered the event.",
|
|
132
|
+
"minLength": 1
|
|
133
|
+
},
|
|
134
|
+
"session_id": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"description": "Session identifier grouping a series of related events.",
|
|
137
|
+
"minLength": 1
|
|
138
|
+
},
|
|
139
|
+
"tags": {
|
|
140
|
+
"type": "object",
|
|
141
|
+
"description": "Arbitrary string key→value metadata attached to the event.",
|
|
142
|
+
"maxProperties": 50,
|
|
143
|
+
"propertyNames": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"minLength": 1
|
|
146
|
+
},
|
|
147
|
+
"additionalProperties": {
|
|
148
|
+
"type": "string",
|
|
149
|
+
"minLength": 1
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"checksum": {
|
|
153
|
+
"type": "string",
|
|
154
|
+
"description": "SHA-256 digest of the canonical payload. Format: 'sha256:' + 64 lowercase hex characters. Set by sign().",
|
|
155
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
156
|
+
},
|
|
157
|
+
"signature": {
|
|
158
|
+
"type": "string",
|
|
159
|
+
"description": "HMAC-SHA256 audit chain signature. Format: 'hmac-sha256:' + 64 lowercase hex characters. Set by sign().",
|
|
160
|
+
"pattern": "^hmac-sha256:[0-9a-f]{64}$"
|
|
161
|
+
},
|
|
162
|
+
"prev_id": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"description": "ULID of the previous event in an audit chain. First character MUST be in [0-7].",
|
|
165
|
+
"pattern": "^[0-7][0-9A-HJKMNP-TV-Z]{25}$",
|
|
166
|
+
"minLength": 26,
|
|
167
|
+
"maxLength": 26
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|