forgesight 0.1.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.
- forgesight/__init__.py +41 -0
- forgesight/py.typed +0 -0
- forgesight/testing/__init__.py +27 -0
- forgesight/testing/conformance.py +17 -0
- forgesight-0.1.0.dist-info/METADATA +139 -0
- forgesight-0.1.0.dist-info/RECORD +7 -0
- forgesight-0.1.0.dist-info/WHEEL +4 -0
forgesight/__init__.py
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""ForgeSight — the batteries-included facade.
|
|
2
|
+
|
|
3
|
+
``import forgesight`` gives you ``configure()``, the ``telemetry`` instrumentation
|
|
4
|
+
facade, and the ``@instrument`` decorator. Backends are added by installing their
|
|
5
|
+
package (``forgesight-otel`` etc.) — never a code change here.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from forgesight_core import (
|
|
11
|
+
ConsoleExporter,
|
|
12
|
+
InMemoryExporter,
|
|
13
|
+
Telemetry,
|
|
14
|
+
configure,
|
|
15
|
+
current_run_scope,
|
|
16
|
+
get_runtime,
|
|
17
|
+
instrument,
|
|
18
|
+
register,
|
|
19
|
+
telemetry,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
__version__ = "0.1.0"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def current_run() -> object | None:
|
|
26
|
+
"""The active run scope, or ``None`` outside any run (alias of ``telemetry.current_run``)."""
|
|
27
|
+
return current_run_scope()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
"ConsoleExporter",
|
|
32
|
+
"InMemoryExporter",
|
|
33
|
+
"Telemetry",
|
|
34
|
+
"__version__",
|
|
35
|
+
"configure",
|
|
36
|
+
"current_run",
|
|
37
|
+
"get_runtime",
|
|
38
|
+
"instrument",
|
|
39
|
+
"register",
|
|
40
|
+
"telemetry",
|
|
41
|
+
]
|
forgesight/py.typed
ADDED
|
File without changes
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""ForgeSight testing surface — re-exported from ``forgesight_core.testing``."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from forgesight_core.testing import (
|
|
6
|
+
InMemoryExporter,
|
|
7
|
+
SpanData,
|
|
8
|
+
assert_span_tree,
|
|
9
|
+
build_spans,
|
|
10
|
+
find_span,
|
|
11
|
+
find_spans,
|
|
12
|
+
llm_call_factory,
|
|
13
|
+
token_usage_factory,
|
|
14
|
+
tool_call_factory,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"InMemoryExporter",
|
|
19
|
+
"SpanData",
|
|
20
|
+
"assert_span_tree",
|
|
21
|
+
"build_spans",
|
|
22
|
+
"find_span",
|
|
23
|
+
"find_spans",
|
|
24
|
+
"llm_call_factory",
|
|
25
|
+
"token_usage_factory",
|
|
26
|
+
"tool_call_factory",
|
|
27
|
+
]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Per-SPI conformance suites — re-exported from ``forgesight_core.testing.conformance``."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from forgesight_core.testing.conformance import (
|
|
6
|
+
run_event_listener_conformance,
|
|
7
|
+
run_exporter_conformance,
|
|
8
|
+
run_interceptor_conformance,
|
|
9
|
+
run_pricing_conformance,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"run_event_listener_conformance",
|
|
14
|
+
"run_exporter_conformance",
|
|
15
|
+
"run_interceptor_conformance",
|
|
16
|
+
"run_pricing_conformance",
|
|
17
|
+
]
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: forgesight
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Vendor-neutral, OpenTelemetry-first telemetry for AI agents: traces, cost, budgets, and a tamper-evident audit trail — ship to any backend, no agent-code changes.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Scaffoldic/forgesight
|
|
6
|
+
Project-URL: Repository, https://github.com/Scaffoldic/forgesight
|
|
7
|
+
Project-URL: Issues, https://github.com/Scaffoldic/forgesight/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/Scaffoldic/forgesight/blob/main/docs/releases/v0.1.md
|
|
9
|
+
Author: kjoshi
|
|
10
|
+
License-Expression: Apache-2.0
|
|
11
|
+
Keywords: agent-observability,ai-agents,audit,cost,finops,genai,governance,llm,llm-observability,observability,opentelemetry,otel,telemetry,tracing
|
|
12
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Classifier: Topic :: System :: Monitoring
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Requires-Dist: forgesight-core
|
|
25
|
+
Provides-Extra: adapters-crewai
|
|
26
|
+
Requires-Dist: forgesight-adapters-crewai[crewai]~=0.1.0; extra == 'adapters-crewai'
|
|
27
|
+
Provides-Extra: adapters-langgraph
|
|
28
|
+
Requires-Dist: forgesight-adapters-langgraph~=0.1.0; extra == 'adapters-langgraph'
|
|
29
|
+
Provides-Extra: all
|
|
30
|
+
Requires-Dist: forgesight-adapters-langgraph~=0.1.0; extra == 'all'
|
|
31
|
+
Requires-Dist: forgesight-audit~=0.1.0; extra == 'all'
|
|
32
|
+
Requires-Dist: forgesight-clickhouse~=0.1.0; extra == 'all'
|
|
33
|
+
Requires-Dist: forgesight-datadog~=0.1.0; extra == 'all'
|
|
34
|
+
Requires-Dist: forgesight-eval~=0.1.0; extra == 'all'
|
|
35
|
+
Requires-Dist: forgesight-fastapi~=0.1.0; extra == 'all'
|
|
36
|
+
Requires-Dist: forgesight-github~=0.1.0; extra == 'all'
|
|
37
|
+
Requires-Dist: forgesight-governance~=0.1.0; extra == 'all'
|
|
38
|
+
Requires-Dist: forgesight-langfuse~=0.1.0; extra == 'all'
|
|
39
|
+
Requires-Dist: forgesight-mcp~=0.1.0; extra == 'all'
|
|
40
|
+
Requires-Dist: forgesight-otel~=0.1.0; extra == 'all'
|
|
41
|
+
Requires-Dist: forgesight-prometheus~=0.1.0; extra == 'all'
|
|
42
|
+
Requires-Dist: forgesight-registry~=0.1.0; extra == 'all'
|
|
43
|
+
Provides-Extra: audit
|
|
44
|
+
Requires-Dist: forgesight-audit~=0.1.0; extra == 'audit'
|
|
45
|
+
Provides-Extra: clickhouse
|
|
46
|
+
Requires-Dist: forgesight-clickhouse~=0.1.0; extra == 'clickhouse'
|
|
47
|
+
Provides-Extra: datadog
|
|
48
|
+
Requires-Dist: forgesight-datadog~=0.1.0; extra == 'datadog'
|
|
49
|
+
Provides-Extra: eval
|
|
50
|
+
Requires-Dist: forgesight-eval~=0.1.0; extra == 'eval'
|
|
51
|
+
Provides-Extra: fastapi
|
|
52
|
+
Requires-Dist: forgesight-fastapi~=0.1.0; extra == 'fastapi'
|
|
53
|
+
Provides-Extra: github
|
|
54
|
+
Requires-Dist: forgesight-github~=0.1.0; extra == 'github'
|
|
55
|
+
Provides-Extra: governance
|
|
56
|
+
Requires-Dist: forgesight-governance~=0.1.0; extra == 'governance'
|
|
57
|
+
Provides-Extra: langfuse
|
|
58
|
+
Requires-Dist: forgesight-langfuse~=0.1.0; extra == 'langfuse'
|
|
59
|
+
Provides-Extra: mcp
|
|
60
|
+
Requires-Dist: forgesight-mcp~=0.1.0; extra == 'mcp'
|
|
61
|
+
Provides-Extra: otel
|
|
62
|
+
Requires-Dist: forgesight-otel~=0.1.0; extra == 'otel'
|
|
63
|
+
Provides-Extra: prometheus
|
|
64
|
+
Requires-Dist: forgesight-prometheus~=0.1.0; extra == 'prometheus'
|
|
65
|
+
Provides-Extra: registry
|
|
66
|
+
Requires-Dist: forgesight-registry~=0.1.0; extra == 'registry'
|
|
67
|
+
Description-Content-Type: text/markdown
|
|
68
|
+
|
|
69
|
+
# ForgeSight
|
|
70
|
+
|
|
71
|
+
**Instrument any AI agent in a few lines — then ship traces, cost, metrics, evals, budgets,
|
|
72
|
+
and a tamper-evident audit trail to any backend by changing one line of config.
|
|
73
|
+
OpenTelemetry-first. Vendor-neutral. Never an agent-code change.**
|
|
74
|
+
|
|
75
|
+
[](https://github.com/Scaffoldic/forgesight/blob/main/LICENSE)
|
|
76
|
+
[](https://pypi.org/project/forgesight/)
|
|
77
|
+
|
|
78
|
+
▶️ **[See the 30-second demo](https://github.com/Scaffoldic/forgesight#forgesight)** — instrument
|
|
79
|
+
an agent and watch the trace, cost, and a verified tamper-evident audit trail appear.
|
|
80
|
+
|
|
81
|
+
`forgesight` is the batteries-included facade — the package most people install.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install "forgesight[otel]"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import forgesight
|
|
89
|
+
from forgesight import telemetry
|
|
90
|
+
|
|
91
|
+
forgesight.configure(exporters=["otel"]) # pick a backend by name — that's it
|
|
92
|
+
|
|
93
|
+
with telemetry.agent_run("pr-reviewer", version="2.1.0", metadata={"team": "platform"}) as run:
|
|
94
|
+
with run.llm_call("anthropic", "claude-sonnet-4-5") as call:
|
|
95
|
+
resp = await client.messages.create(...)
|
|
96
|
+
call.record_usage(input=resp.usage.input_tokens, output=resp.usage.output_tokens)
|
|
97
|
+
with run.tool_call("github_get_diff"):
|
|
98
|
+
diff = gh.get_diff(pr)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Cost, token usage, trace nesting, metrics, and multi-backend fan-out come for free. Swap
|
|
102
|
+
`otel` → `langfuse`, `datadog`, `clickhouse`, `prometheus` — the agent code never moves.
|
|
103
|
+
|
|
104
|
+
## What you get
|
|
105
|
+
|
|
106
|
+
- **🔌 Vendor-neutral.** The core depends on *no* backend or model-provider SDK. Backends are
|
|
107
|
+
packages you install and select by config.
|
|
108
|
+
- **📐 OpenTelemetry-first.** GenAI semantic conventions, so any OTLP backend works with no
|
|
109
|
+
dedicated package.
|
|
110
|
+
- **💰 Cost built in.** Token usage → USD via a pluggable pricing table — the same number
|
|
111
|
+
everywhere — plus live attribution by team and pre-call budget projection.
|
|
112
|
+
- **🚦 Non-blocking & fault-isolated.** Export runs on a background worker; a backend outage
|
|
113
|
+
never breaks a run.
|
|
114
|
+
- **🔒 Secure by default.** Content capture is opt-in; redaction runs before export.
|
|
115
|
+
- **🧾 Accountability.** A tamper-evident, hash-chained **audit trail** with a compliance
|
|
116
|
+
query/export surface.
|
|
117
|
+
|
|
118
|
+
## Install backends & integrations as extras
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
pip install "forgesight[otel]" # one backend (OTLP → any OTel platform)
|
|
122
|
+
pip install "forgesight[otel,langfuse,datadog]" # several
|
|
123
|
+
pip install "forgesight[all]" # everything except the heavy CrewAI tree
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Extras: `otel` · `prometheus` · `langfuse` · `clickhouse` · `datadog` · `mcp` · `fastapi` ·
|
|
127
|
+
`github` · `governance` · `eval` · `registry` · `audit` · `adapters-langgraph` ·
|
|
128
|
+
`adapters-crewai`. Installing a package *enables* a backend; config *selects* it.
|
|
129
|
+
|
|
130
|
+
## Docs
|
|
131
|
+
|
|
132
|
+
- **[README & guides](https://github.com/Scaffoldic/forgesight)** — full docs, playbooks, runbooks
|
|
133
|
+
- **[Quick start](https://github.com/Scaffoldic/forgesight/blob/main/docs/playbooks/01-install.md)** ·
|
|
134
|
+
**[Run locally with Docker](https://github.com/Scaffoldic/forgesight/blob/main/docs/playbooks/03-run-locally-with-docker.md)** ·
|
|
135
|
+
**[Examples](https://github.com/Scaffoldic/forgesight/tree/main/examples)**
|
|
136
|
+
|
|
137
|
+
## License
|
|
138
|
+
|
|
139
|
+
[Apache-2.0](https://github.com/Scaffoldic/forgesight/blob/main/LICENSE)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
forgesight/__init__.py,sha256=8l6ODKgmRndc6Ue58-mnY0NyDEWablJxHPp7du3zS7Q,906
|
|
2
|
+
forgesight/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
forgesight/testing/__init__.py,sha256=-Lb9pDx587FaI8utzsq1_RpYLsx4pEft6prEY2Go_SM,545
|
|
4
|
+
forgesight/testing/conformance.py,sha256=H-AC6gQ_A7Johvr58JwBapM5afQMwIcdw85idI3L69Q,463
|
|
5
|
+
forgesight-0.1.0.dist-info/METADATA,sha256=ehp1DEREox5uc6mJj9DyzFQdRXrlNewuEuxGPdiGgNo,6805
|
|
6
|
+
forgesight-0.1.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
7
|
+
forgesight-0.1.0.dist-info/RECORD,,
|