monocle-apptrace 0.0.1__tar.gz → 0.1.1__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.
Potentially problematic release.
This version of monocle-apptrace might be problematic. Click here for more details.
- monocle_apptrace-0.1.1/CHANGELOG.md +17 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/Monocle_User_Guide.md +18 -6
- monocle_apptrace-0.1.1/PKG-INFO +111 -0
- monocle_apptrace-0.1.1/Pipfile.lock +340 -0
- monocle_apptrace-0.1.1/README.md +76 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/pyproject.toml +3 -2
- monocle_apptrace-0.1.1/src/monocle_apptrace/README.md +101 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/__init__.py +0 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/constants.py +22 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/exporters/file_exporter.py +63 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/haystack/__init__.py +9 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/src/monocle_apptrace/haystack/wrap_node.py +1 -1
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/src/monocle_apptrace/haystack/wrap_openai.py +1 -9
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/src/monocle_apptrace/haystack/wrap_pipeline.py +22 -9
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/src/monocle_apptrace/instrumentor.py +29 -32
- monocle_apptrace-0.1.1/src/monocle_apptrace/langchain/__init__.py +6 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/llamaindex/__init__.py +15 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/README.md +47 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/entities/README.md +54 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/entities/entity_types.json +157 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/entities/entity_types.py +51 -0
- monocle_apptrace-0.0.1/src/monocle_apptrace/haystack/__init__.py → monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/maps/haystack_methods.json +11 -14
- monocle_apptrace-0.0.1/src/monocle_apptrace/langchain/__init__.py → monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/maps/lang_chain_methods.json +32 -21
- monocle_apptrace-0.0.1/src/monocle_apptrace/llamaindex/__init__.py → monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/maps/llama_index_methods.json +22 -23
- monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/spans/README.md +121 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/spans/span_example.json +140 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/metamodel/spans/span_format.json +55 -0
- monocle_apptrace-0.1.1/src/monocle_apptrace/utils.py +93 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/src/monocle_apptrace/wrap_common.py +143 -46
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/src/monocle_apptrace/wrapper.py +3 -3
- monocle_apptrace-0.1.1/storage/default__vector_store.json +1 -0
- monocle_apptrace-0.1.1/storage/docstore.json +1 -0
- monocle_apptrace-0.1.1/storage/index_store.json +1 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/tox.ini +1 -0
- monocle_apptrace-0.0.1/PKG-INFO +0 -76
- monocle_apptrace-0.0.1/README.md +0 -42
- monocle_apptrace-0.0.1/src/monocle_apptrace/README.md +0 -77
- monocle_apptrace-0.0.1/src/monocle_apptrace/__init__.py +0 -2
- monocle_apptrace-0.0.1/src/monocle_apptrace/utils.py +0 -53
- monocle_apptrace-0.0.1/storage/default__vector_store.json +0 -1
- monocle_apptrace-0.0.1/storage/docstore.json +0 -1
- monocle_apptrace-0.0.1/storage/index_store.json +0 -1
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/.gitignore +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/CODEOWNERS.md +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/CODE_OF_CONDUCT.md +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/CONTRIBUTING.md +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/COPYRIGHT.template +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/LICENSE +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/MAINTAINER.md +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/Monocle_committer_guide.md +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/Monocle_contributor_guide.md +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/NOTICE +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/SECURITY.md +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/storage/graph_store.json +0 -0
- {monocle_apptrace-0.0.1 → monocle_apptrace-0.1.1}/storage/image__vector_store.json +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## 0.1.0 (Aug 27, 2024)
|
|
2
|
+
|
|
3
|
+
- Fixed LlamaIndex tracing bugs ([#32](https://github.com/monocle2ai/monocle/pull/32))
|
|
4
|
+
- Added support to add AWS cloud infra attributes ([#29](https://github.com/monocle2ai/monocle/pull/29))
|
|
5
|
+
- Added support to add Azure cloud infra attributes ([#23](https://github.com/monocle2ai/monocle/pull/23))
|
|
6
|
+
- Added support for adding provider name in LLM span in traces ([#22](https://github.com/monocle2ai/monocle/pull/22))
|
|
7
|
+
- Added a default file span exporter ([#21](https://github.com/monocle2ai/monocle/pull/21))
|
|
8
|
+
- Moved input and output context and prompts from attributes to events ([#15](https://github.com/monocle2ai/monocle/pull/15))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## 0.0.1 (Jul 17, 2024)
|
|
16
|
+
|
|
17
|
+
- First monocle release
|
|
@@ -37,8 +37,7 @@ from langchain_openai import OpenAI
|
|
|
37
37
|
from langchain.prompts import PromptTemplate
|
|
38
38
|
|
|
39
39
|
# Call the setup Monocle telemetry method
|
|
40
|
-
setup_monocle_telemetry(workflow_name = "simple_math_app"
|
|
41
|
-
span_processors=[BatchSpanProcessor(ConsoleSpanExporter())])
|
|
40
|
+
setup_monocle_telemetry(workflow_name = "simple_math_app")
|
|
42
41
|
|
|
43
42
|
llm = OpenAI()
|
|
44
43
|
prompt = PromptTemplate.from_template("1 + {number} = ")
|
|
@@ -51,6 +50,19 @@ chain = LLMChain(llm=llm, prompt=prompt)
|
|
|
51
50
|
chain.invoke({"number":2}, {"callbacks":[handler]})
|
|
52
51
|
|
|
53
52
|
```
|
|
53
|
+
|
|
54
|
+
### Accessing monocle trace
|
|
55
|
+
By default monocle generate traces in a json file created in the local directory where the application is running. The file name by default is monocle_trace_{workflow_name}\_{trace_id}\_{timestamp}.json where the trace_id is a unique number generated by monocle for every trace. Please refere to [Trace span json](Monocle_User_Guide.md#trace-span-json). The file path and format can be changed by setting those properties as argement to ```setup_monocle_telemetry()```. For example,
|
|
56
|
+
```
|
|
57
|
+
setup_monocle_telemetry(workflow_name = "simple_math_app",
|
|
58
|
+
span_processors=[BatchSpanProcessor(FileSpanExporter(
|
|
59
|
+
out_path = "/tmp",
|
|
60
|
+
file_prefix = "map_app_prod_trace_",
|
|
61
|
+
time_format = "%Y-%m-%d"))
|
|
62
|
+
])
|
|
63
|
+
```
|
|
64
|
+
To print the trace on the console, use ```ConsoleSpanExporter()``` instead of ```FileSpanExporter()```
|
|
65
|
+
|
|
54
66
|
### Leveraging Monocle's extensibility to handle customization
|
|
55
67
|
When the out of box features from app frameworks are not sufficent, the app developers have to add custom code. For example, if you are extending a LLM class in LlamaIndex to use a model hosted in NVIDIA Triton. This new class is not know to Monocle. You can specify this new class method part of Monocle enabling API and it will be able to trace it.
|
|
56
68
|
|
|
@@ -83,13 +95,13 @@ setup_monocle_telemetry(
|
|
|
83
95
|
wrapper_methods=[
|
|
84
96
|
WrapperMethod(
|
|
85
97
|
package="langchain.schema.runnable",
|
|
86
|
-
|
|
98
|
+
object_name="RunnableParallel",
|
|
87
99
|
method="invoke",
|
|
88
100
|
span_name="langchain.workflow",
|
|
89
101
|
wrapper=task_wrapper),
|
|
90
102
|
WrapperMethod(
|
|
91
103
|
package="langchain.schema.runnable",
|
|
92
|
-
|
|
104
|
+
object_name="RunnableParallel",
|
|
93
105
|
method="ainvoke",
|
|
94
106
|
span_name="langchain.workflow",
|
|
95
107
|
wrapper=atask_wrapper)
|
|
@@ -110,7 +122,7 @@ Monocle generates spans which adhere to [Tracing API | OpenTelemetry](https://op
|
|
|
110
122
|
| Span JSON | Description |
|
|
111
123
|
| ------------- | ------------- |
|
|
112
124
|
| {||
|
|
113
|
-
| "```name```": "langchain.workflow",|span name and is configurable in [__init.py__](src/monocle_apptrace/langchain/__init__.py) or in ```
|
|
125
|
+
| "```name```": "langchain.workflow",|span name and is configurable in [__init.py__](src/monocle_apptrace/langchain/__init__.py) or in ```setup_monocle_telemetry(...)```|
|
|
114
126
|
| "```context```": {|this gets autogenerated|
|
|
115
127
|
|   "```trace_id```": "0xe5269f0e534efa098b240f974220d6b7",||
|
|
116
128
|
|   "```span_id```": "0x30b13075eca52f44",||
|
|
@@ -124,7 +136,7 @@ Monocle generates spans which adhere to [Tracing API | OpenTelemetry](https://op
|
|
|
124
136
|
|  "```status_code```": "UNSET"| status of span to OK or ERROR. Default is UNSET|
|
|
125
137
|
|  },||
|
|
126
138
|
|"```attributes```": {||
|
|
127
|
-
|  "workflow_name": "ml_rag_app",|defines the name of the service being set in ```
|
|
139
|
+
|  "workflow_name": "ml_rag_app",|defines the name of the service being set in ```setup_monocle_telemetry(...)``` during initialization of instrumentation|
|
|
128
140
|
|  "workflow_type": "workflow.langchain"|type of framework that generated this span|
|
|
129
141
|
|  },||
|
|
130
142
|
|"```events```": [|captures the log records|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: monocle_apptrace
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: package with monocle genAI tracing
|
|
5
|
+
Project-URL: Homepage, https://github.com/monocle2ai/monocle
|
|
6
|
+
Project-URL: Issues, https://github.com/monocle2ai/monocle/issues
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
License-File: NOTICE
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Requires-Python: >=3.8
|
|
13
|
+
Requires-Dist: opentelemetry-api>=1.21.0
|
|
14
|
+
Requires-Dist: opentelemetry-instrumentation
|
|
15
|
+
Requires-Dist: opentelemetry-sdk>=1.21.0
|
|
16
|
+
Requires-Dist: requests
|
|
17
|
+
Requires-Dist: wrapt>=1.14.0
|
|
18
|
+
Provides-Extra: dev
|
|
19
|
+
Requires-Dist: datasets==2.20.0; extra == 'dev'
|
|
20
|
+
Requires-Dist: faiss-cpu==1.8.0; extra == 'dev'
|
|
21
|
+
Requires-Dist: instructorembedding==1.0.1; extra == 'dev'
|
|
22
|
+
Requires-Dist: langchain-chroma==0.1.1; extra == 'dev'
|
|
23
|
+
Requires-Dist: langchain-community==0.2.5; extra == 'dev'
|
|
24
|
+
Requires-Dist: langchain-openai==0.1.8; extra == 'dev'
|
|
25
|
+
Requires-Dist: langchain==0.2.5; extra == 'dev'
|
|
26
|
+
Requires-Dist: llama-index-embeddings-huggingface==0.2.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: llama-index-vector-stores-chroma==0.1.9; extra == 'dev'
|
|
28
|
+
Requires-Dist: llama-index==0.10.30; extra == 'dev'
|
|
29
|
+
Requires-Dist: numpy==1.26.4; extra == 'dev'
|
|
30
|
+
Requires-Dist: parameterized==0.9.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: pytest==8.0.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: sentence-transformers==2.6.1; extra == 'dev'
|
|
33
|
+
Requires-Dist: types-requests==2.31.0.20240106; extra == 'dev'
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# Monocle for tracing GenAI app code
|
|
37
|
+
|
|
38
|
+
**Monocle** helps developers and platform engineers building or managing GenAI apps monitor these in prod by making it easy to instrument their code to capture traces that are compliant with open-source cloud-native observability ecosystem.
|
|
39
|
+
|
|
40
|
+
**Monocle** is a community-driven OSS framework for tracing GenAI app code governed as a [Linux Foundation AI & Data project](https://lfaidata.foundation/projects/monocle/).
|
|
41
|
+
|
|
42
|
+
## Why Monocle
|
|
43
|
+
|
|
44
|
+
Monocle is built for:
|
|
45
|
+
- **app developers** to trace their app code in any environment without lots of custom code decoration
|
|
46
|
+
- **platform engineers** to instrument apps in prod through wrapping instead of asking app devs to recode
|
|
47
|
+
- **GenAI component providers** to add observability features to their products
|
|
48
|
+
- **enterprises** to consume traces from GenAI apps in their existing open-source observability stack
|
|
49
|
+
|
|
50
|
+
Benefits:
|
|
51
|
+
- Monocle provides an implementation + package, not just a spec
|
|
52
|
+
- No expertise in OpenTelemetry spec required
|
|
53
|
+
- No bespoke implementation of that spec required
|
|
54
|
+
- No last-mile GenAI domain specific code required to instrument your app
|
|
55
|
+
- Monocle provides consistency
|
|
56
|
+
- Connect traces across app code executions, model inference or data retrievals
|
|
57
|
+
- No cleansing of telemetry data across GenAI component providers required
|
|
58
|
+
- Works the same in personal lab dev or org cloud prod environments
|
|
59
|
+
- Send traces to location that fits your scale, budget and observability stack
|
|
60
|
+
- Monocle is fully open source and community driven
|
|
61
|
+
- No vendor lock-in
|
|
62
|
+
- Implementation is transparent
|
|
63
|
+
- You can freely use or customize it to fit your needs
|
|
64
|
+
|
|
65
|
+
## What Monocle provides
|
|
66
|
+
|
|
67
|
+
- Easy to [use](#use-monocle) code instrumentation
|
|
68
|
+
- OpenTelemetry compatible format for [spans](src/monocle_apptrace/metamodel/spans/span_format.json).
|
|
69
|
+
- Community-curated and extensible [metamodel](src/monocle_apptrace/metamodel/README.md) for consisent tracing of GenAI components.
|
|
70
|
+
- Export to local and cloud storage
|
|
71
|
+
|
|
72
|
+
## Use Monocle
|
|
73
|
+
|
|
74
|
+
- Get the Monocle package
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
pip install monocle_apptrace
|
|
78
|
+
```
|
|
79
|
+
- Instrument your app code
|
|
80
|
+
- Import the Monocle package
|
|
81
|
+
```
|
|
82
|
+
from monocle_apptrace.instrumentor import setup_monocle_telemetry
|
|
83
|
+
```
|
|
84
|
+
- Setup instrumentation in your ```main()``` function
|
|
85
|
+
```
|
|
86
|
+
setup_monocle_telemetry(workflow_name="your-app-name")
|
|
87
|
+
```
|
|
88
|
+
- (Optionally) Modify config to alter where traces are sent
|
|
89
|
+
|
|
90
|
+
See [Monocle user guide](Monocle_User_Guide.md) for more details.
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
## Roadmap
|
|
94
|
+
|
|
95
|
+
Goal of Monocle is to support tracing for apps written in *any language* with *any LLM orchestration or agentic framework* and built using models, vectors, agents or other components served up by *any cloud or model inference provider*.
|
|
96
|
+
|
|
97
|
+
Current version supports:
|
|
98
|
+
- Language: (🟢) Python , (🔜) [Typescript](https://github.com/monocle2ai/monocle-typescript)
|
|
99
|
+
- LLM-frameworks: (🟢) Langchain, (🟢) Llamaindex, (🟢) Haystack, (🔜) Flask
|
|
100
|
+
- LLM inference providers: (🟢) OpenAI, (🟢) Azure OpenAI, (🟢) Nvidia Triton, (🔜) AWS Bedrock, (🔜) Google Vertex, (🔜) Azure ML, (🔜) Hugging Face
|
|
101
|
+
- Vector stores: (🟢) FAISS, (🔜) OpenSearch, (🔜) Milvus
|
|
102
|
+
- Exporter: (🟢) stdout, (🟢) file, (🔜) Azure Blob Storage, (🔜) AWS S3, (🔜) Google Cloud Storage
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
## Get involved
|
|
106
|
+
### Provide feedback
|
|
107
|
+
- Submit issues and enhancements requests via Github issues
|
|
108
|
+
|
|
109
|
+
### Contribute
|
|
110
|
+
- Monocle is community based open source project. We welcome your contributions. Please refer to the CONTRIBUTING and CODE_OF_CONDUCT for guidelines. The [contributor's guide](CONTRIBUTING.md) provides technical details of the project.
|
|
111
|
+
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"hash": {
|
|
4
|
+
"sha256": "9983d54227e10d51c4fefdd824534aeacdc6455588151ad04f7853775e91daab"
|
|
5
|
+
},
|
|
6
|
+
"pipfile-spec": 6,
|
|
7
|
+
"requires": {
|
|
8
|
+
"python_version": "3.11"
|
|
9
|
+
},
|
|
10
|
+
"sources": [
|
|
11
|
+
{
|
|
12
|
+
"name": "pypi",
|
|
13
|
+
"url": "https://pypi.org/simple",
|
|
14
|
+
"verify_ssl": true
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"default": {
|
|
19
|
+
"backports.tarfile": {
|
|
20
|
+
"hashes": [
|
|
21
|
+
"sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34",
|
|
22
|
+
"sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"
|
|
23
|
+
],
|
|
24
|
+
"markers": "python_version < '3.12'",
|
|
25
|
+
"version": "==1.2.0"
|
|
26
|
+
},
|
|
27
|
+
"build": {
|
|
28
|
+
"hashes": [
|
|
29
|
+
"sha256:526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d",
|
|
30
|
+
"sha256:75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4"
|
|
31
|
+
],
|
|
32
|
+
"index": "pypi",
|
|
33
|
+
"markers": "python_version >= '3.8'",
|
|
34
|
+
"version": "==1.2.1"
|
|
35
|
+
},
|
|
36
|
+
"certifi": {
|
|
37
|
+
"hashes": [
|
|
38
|
+
"sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8",
|
|
39
|
+
"sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"
|
|
40
|
+
],
|
|
41
|
+
"markers": "python_version >= '3.6'",
|
|
42
|
+
"version": "==2024.8.30"
|
|
43
|
+
},
|
|
44
|
+
"charset-normalizer": {
|
|
45
|
+
"hashes": [
|
|
46
|
+
"sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027",
|
|
47
|
+
"sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087",
|
|
48
|
+
"sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786",
|
|
49
|
+
"sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8",
|
|
50
|
+
"sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09",
|
|
51
|
+
"sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185",
|
|
52
|
+
"sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574",
|
|
53
|
+
"sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e",
|
|
54
|
+
"sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519",
|
|
55
|
+
"sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898",
|
|
56
|
+
"sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269",
|
|
57
|
+
"sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3",
|
|
58
|
+
"sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f",
|
|
59
|
+
"sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6",
|
|
60
|
+
"sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8",
|
|
61
|
+
"sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a",
|
|
62
|
+
"sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73",
|
|
63
|
+
"sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc",
|
|
64
|
+
"sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714",
|
|
65
|
+
"sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2",
|
|
66
|
+
"sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc",
|
|
67
|
+
"sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce",
|
|
68
|
+
"sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d",
|
|
69
|
+
"sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e",
|
|
70
|
+
"sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6",
|
|
71
|
+
"sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269",
|
|
72
|
+
"sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96",
|
|
73
|
+
"sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d",
|
|
74
|
+
"sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a",
|
|
75
|
+
"sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4",
|
|
76
|
+
"sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77",
|
|
77
|
+
"sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d",
|
|
78
|
+
"sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0",
|
|
79
|
+
"sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed",
|
|
80
|
+
"sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068",
|
|
81
|
+
"sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac",
|
|
82
|
+
"sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25",
|
|
83
|
+
"sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8",
|
|
84
|
+
"sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab",
|
|
85
|
+
"sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26",
|
|
86
|
+
"sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2",
|
|
87
|
+
"sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db",
|
|
88
|
+
"sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f",
|
|
89
|
+
"sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5",
|
|
90
|
+
"sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99",
|
|
91
|
+
"sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c",
|
|
92
|
+
"sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d",
|
|
93
|
+
"sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811",
|
|
94
|
+
"sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa",
|
|
95
|
+
"sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a",
|
|
96
|
+
"sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03",
|
|
97
|
+
"sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b",
|
|
98
|
+
"sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04",
|
|
99
|
+
"sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c",
|
|
100
|
+
"sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001",
|
|
101
|
+
"sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458",
|
|
102
|
+
"sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389",
|
|
103
|
+
"sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99",
|
|
104
|
+
"sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985",
|
|
105
|
+
"sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537",
|
|
106
|
+
"sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238",
|
|
107
|
+
"sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f",
|
|
108
|
+
"sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d",
|
|
109
|
+
"sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796",
|
|
110
|
+
"sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a",
|
|
111
|
+
"sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143",
|
|
112
|
+
"sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8",
|
|
113
|
+
"sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c",
|
|
114
|
+
"sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5",
|
|
115
|
+
"sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5",
|
|
116
|
+
"sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711",
|
|
117
|
+
"sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4",
|
|
118
|
+
"sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6",
|
|
119
|
+
"sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c",
|
|
120
|
+
"sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7",
|
|
121
|
+
"sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4",
|
|
122
|
+
"sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b",
|
|
123
|
+
"sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae",
|
|
124
|
+
"sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12",
|
|
125
|
+
"sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c",
|
|
126
|
+
"sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae",
|
|
127
|
+
"sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8",
|
|
128
|
+
"sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887",
|
|
129
|
+
"sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b",
|
|
130
|
+
"sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4",
|
|
131
|
+
"sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f",
|
|
132
|
+
"sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5",
|
|
133
|
+
"sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33",
|
|
134
|
+
"sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519",
|
|
135
|
+
"sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"
|
|
136
|
+
],
|
|
137
|
+
"markers": "python_full_version >= '3.7.0'",
|
|
138
|
+
"version": "==3.3.2"
|
|
139
|
+
},
|
|
140
|
+
"docutils": {
|
|
141
|
+
"hashes": [
|
|
142
|
+
"sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f",
|
|
143
|
+
"sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"
|
|
144
|
+
],
|
|
145
|
+
"markers": "python_version >= '3.9'",
|
|
146
|
+
"version": "==0.21.2"
|
|
147
|
+
},
|
|
148
|
+
"idna": {
|
|
149
|
+
"hashes": [
|
|
150
|
+
"sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac",
|
|
151
|
+
"sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"
|
|
152
|
+
],
|
|
153
|
+
"markers": "python_version >= '3.6'",
|
|
154
|
+
"version": "==3.8"
|
|
155
|
+
},
|
|
156
|
+
"importlib-metadata": {
|
|
157
|
+
"hashes": [
|
|
158
|
+
"sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1",
|
|
159
|
+
"sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"
|
|
160
|
+
],
|
|
161
|
+
"markers": "python_version >= '3.8'",
|
|
162
|
+
"version": "==8.4.0"
|
|
163
|
+
},
|
|
164
|
+
"jaraco.classes": {
|
|
165
|
+
"hashes": [
|
|
166
|
+
"sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd",
|
|
167
|
+
"sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"
|
|
168
|
+
],
|
|
169
|
+
"markers": "python_version >= '3.8'",
|
|
170
|
+
"version": "==3.4.0"
|
|
171
|
+
},
|
|
172
|
+
"jaraco.context": {
|
|
173
|
+
"hashes": [
|
|
174
|
+
"sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3",
|
|
175
|
+
"sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"
|
|
176
|
+
],
|
|
177
|
+
"markers": "python_version >= '3.8'",
|
|
178
|
+
"version": "==6.0.1"
|
|
179
|
+
},
|
|
180
|
+
"jaraco.functools": {
|
|
181
|
+
"hashes": [
|
|
182
|
+
"sha256:3460c74cd0d32bf82b9576bbb3527c4364d5b27a21f5158a62aed6c4b42e23f5",
|
|
183
|
+
"sha256:c9d16a3ed4ccb5a889ad8e0b7a343401ee5b2a71cee6ed192d3f68bc351e94e3"
|
|
184
|
+
],
|
|
185
|
+
"markers": "python_version >= '3.8'",
|
|
186
|
+
"version": "==4.0.2"
|
|
187
|
+
},
|
|
188
|
+
"keyring": {
|
|
189
|
+
"hashes": [
|
|
190
|
+
"sha256:8d85a1ea5d6db8515b59e1c5d1d1678b03cf7fc8b8dcfb1651e8c4a524eb42ef",
|
|
191
|
+
"sha256:8d963da00ccdf06e356acd9bf3b743208878751032d8599c6cc89eb51310ffae"
|
|
192
|
+
],
|
|
193
|
+
"markers": "python_version >= '3.8'",
|
|
194
|
+
"version": "==25.3.0"
|
|
195
|
+
},
|
|
196
|
+
"markdown-it-py": {
|
|
197
|
+
"hashes": [
|
|
198
|
+
"sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1",
|
|
199
|
+
"sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"
|
|
200
|
+
],
|
|
201
|
+
"markers": "python_version >= '3.8'",
|
|
202
|
+
"version": "==3.0.0"
|
|
203
|
+
},
|
|
204
|
+
"mdurl": {
|
|
205
|
+
"hashes": [
|
|
206
|
+
"sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8",
|
|
207
|
+
"sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"
|
|
208
|
+
],
|
|
209
|
+
"markers": "python_version >= '3.7'",
|
|
210
|
+
"version": "==0.1.2"
|
|
211
|
+
},
|
|
212
|
+
"more-itertools": {
|
|
213
|
+
"hashes": [
|
|
214
|
+
"sha256:0f7d9f83a0a8dcfa8a2694a770590d98a67ea943e3d9f5298309a484758c4e27",
|
|
215
|
+
"sha256:fe0e63c4ab068eac62410ab05cccca2dc71ec44ba8ef29916a0090df061cf923"
|
|
216
|
+
],
|
|
217
|
+
"markers": "python_version >= '3.8'",
|
|
218
|
+
"version": "==10.4.0"
|
|
219
|
+
},
|
|
220
|
+
"nh3": {
|
|
221
|
+
"hashes": [
|
|
222
|
+
"sha256:0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164",
|
|
223
|
+
"sha256:14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86",
|
|
224
|
+
"sha256:19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b",
|
|
225
|
+
"sha256:34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad",
|
|
226
|
+
"sha256:36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204",
|
|
227
|
+
"sha256:3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a",
|
|
228
|
+
"sha256:42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200",
|
|
229
|
+
"sha256:5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189",
|
|
230
|
+
"sha256:6955369e4d9f48f41e3f238a9e60f9410645db7e07435e62c6a9ea6135a4907f",
|
|
231
|
+
"sha256:7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811",
|
|
232
|
+
"sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844",
|
|
233
|
+
"sha256:94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4",
|
|
234
|
+
"sha256:a7f1b5b2c15866f2db413a3649a8fe4fd7b428ae58be2c0f6bca5eefd53ca2be",
|
|
235
|
+
"sha256:c8b3a1cebcba9b3669ed1a84cc65bf005728d2f0bc1ed2a6594a992e817f3a50",
|
|
236
|
+
"sha256:de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307",
|
|
237
|
+
"sha256:f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe"
|
|
238
|
+
],
|
|
239
|
+
"version": "==0.2.18"
|
|
240
|
+
},
|
|
241
|
+
"packaging": {
|
|
242
|
+
"hashes": [
|
|
243
|
+
"sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002",
|
|
244
|
+
"sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
|
|
245
|
+
],
|
|
246
|
+
"markers": "python_version >= '3.8'",
|
|
247
|
+
"version": "==24.1"
|
|
248
|
+
},
|
|
249
|
+
"pkginfo": {
|
|
250
|
+
"hashes": [
|
|
251
|
+
"sha256:5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297",
|
|
252
|
+
"sha256:889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097"
|
|
253
|
+
],
|
|
254
|
+
"markers": "python_version >= '3.6'",
|
|
255
|
+
"version": "==1.10.0"
|
|
256
|
+
},
|
|
257
|
+
"pygments": {
|
|
258
|
+
"hashes": [
|
|
259
|
+
"sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199",
|
|
260
|
+
"sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"
|
|
261
|
+
],
|
|
262
|
+
"markers": "python_version >= '3.8'",
|
|
263
|
+
"version": "==2.18.0"
|
|
264
|
+
},
|
|
265
|
+
"pyproject-hooks": {
|
|
266
|
+
"hashes": [
|
|
267
|
+
"sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965",
|
|
268
|
+
"sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2"
|
|
269
|
+
],
|
|
270
|
+
"markers": "python_version >= '3.7'",
|
|
271
|
+
"version": "==1.1.0"
|
|
272
|
+
},
|
|
273
|
+
"readme-renderer": {
|
|
274
|
+
"hashes": [
|
|
275
|
+
"sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151",
|
|
276
|
+
"sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1"
|
|
277
|
+
],
|
|
278
|
+
"markers": "python_version >= '3.9'",
|
|
279
|
+
"version": "==44.0"
|
|
280
|
+
},
|
|
281
|
+
"requests": {
|
|
282
|
+
"hashes": [
|
|
283
|
+
"sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760",
|
|
284
|
+
"sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"
|
|
285
|
+
],
|
|
286
|
+
"markers": "python_version >= '3.8'",
|
|
287
|
+
"version": "==2.32.3"
|
|
288
|
+
},
|
|
289
|
+
"requests-toolbelt": {
|
|
290
|
+
"hashes": [
|
|
291
|
+
"sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6",
|
|
292
|
+
"sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"
|
|
293
|
+
],
|
|
294
|
+
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
|
295
|
+
"version": "==1.0.0"
|
|
296
|
+
},
|
|
297
|
+
"rfc3986": {
|
|
298
|
+
"hashes": [
|
|
299
|
+
"sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd",
|
|
300
|
+
"sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"
|
|
301
|
+
],
|
|
302
|
+
"markers": "python_version >= '3.7'",
|
|
303
|
+
"version": "==2.0.0"
|
|
304
|
+
},
|
|
305
|
+
"rich": {
|
|
306
|
+
"hashes": [
|
|
307
|
+
"sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc",
|
|
308
|
+
"sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"
|
|
309
|
+
],
|
|
310
|
+
"markers": "python_full_version >= '3.7.0'",
|
|
311
|
+
"version": "==13.8.0"
|
|
312
|
+
},
|
|
313
|
+
"twine": {
|
|
314
|
+
"hashes": [
|
|
315
|
+
"sha256:215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997",
|
|
316
|
+
"sha256:9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db"
|
|
317
|
+
],
|
|
318
|
+
"index": "pypi",
|
|
319
|
+
"markers": "python_version >= '3.8'",
|
|
320
|
+
"version": "==5.1.1"
|
|
321
|
+
},
|
|
322
|
+
"urllib3": {
|
|
323
|
+
"hashes": [
|
|
324
|
+
"sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
|
|
325
|
+
"sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"
|
|
326
|
+
],
|
|
327
|
+
"markers": "python_version >= '3.8'",
|
|
328
|
+
"version": "==2.2.2"
|
|
329
|
+
},
|
|
330
|
+
"zipp": {
|
|
331
|
+
"hashes": [
|
|
332
|
+
"sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064",
|
|
333
|
+
"sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"
|
|
334
|
+
],
|
|
335
|
+
"markers": "python_version >= '3.8'",
|
|
336
|
+
"version": "==3.20.1"
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
"develop": {}
|
|
340
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Monocle for tracing GenAI app code
|
|
2
|
+
|
|
3
|
+
**Monocle** helps developers and platform engineers building or managing GenAI apps monitor these in prod by making it easy to instrument their code to capture traces that are compliant with open-source cloud-native observability ecosystem.
|
|
4
|
+
|
|
5
|
+
**Monocle** is a community-driven OSS framework for tracing GenAI app code governed as a [Linux Foundation AI & Data project](https://lfaidata.foundation/projects/monocle/).
|
|
6
|
+
|
|
7
|
+
## Why Monocle
|
|
8
|
+
|
|
9
|
+
Monocle is built for:
|
|
10
|
+
- **app developers** to trace their app code in any environment without lots of custom code decoration
|
|
11
|
+
- **platform engineers** to instrument apps in prod through wrapping instead of asking app devs to recode
|
|
12
|
+
- **GenAI component providers** to add observability features to their products
|
|
13
|
+
- **enterprises** to consume traces from GenAI apps in their existing open-source observability stack
|
|
14
|
+
|
|
15
|
+
Benefits:
|
|
16
|
+
- Monocle provides an implementation + package, not just a spec
|
|
17
|
+
- No expertise in OpenTelemetry spec required
|
|
18
|
+
- No bespoke implementation of that spec required
|
|
19
|
+
- No last-mile GenAI domain specific code required to instrument your app
|
|
20
|
+
- Monocle provides consistency
|
|
21
|
+
- Connect traces across app code executions, model inference or data retrievals
|
|
22
|
+
- No cleansing of telemetry data across GenAI component providers required
|
|
23
|
+
- Works the same in personal lab dev or org cloud prod environments
|
|
24
|
+
- Send traces to location that fits your scale, budget and observability stack
|
|
25
|
+
- Monocle is fully open source and community driven
|
|
26
|
+
- No vendor lock-in
|
|
27
|
+
- Implementation is transparent
|
|
28
|
+
- You can freely use or customize it to fit your needs
|
|
29
|
+
|
|
30
|
+
## What Monocle provides
|
|
31
|
+
|
|
32
|
+
- Easy to [use](#use-monocle) code instrumentation
|
|
33
|
+
- OpenTelemetry compatible format for [spans](src/monocle_apptrace/metamodel/spans/span_format.json).
|
|
34
|
+
- Community-curated and extensible [metamodel](src/monocle_apptrace/metamodel/README.md) for consisent tracing of GenAI components.
|
|
35
|
+
- Export to local and cloud storage
|
|
36
|
+
|
|
37
|
+
## Use Monocle
|
|
38
|
+
|
|
39
|
+
- Get the Monocle package
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
pip install monocle_apptrace
|
|
43
|
+
```
|
|
44
|
+
- Instrument your app code
|
|
45
|
+
- Import the Monocle package
|
|
46
|
+
```
|
|
47
|
+
from monocle_apptrace.instrumentor import setup_monocle_telemetry
|
|
48
|
+
```
|
|
49
|
+
- Setup instrumentation in your ```main()``` function
|
|
50
|
+
```
|
|
51
|
+
setup_monocle_telemetry(workflow_name="your-app-name")
|
|
52
|
+
```
|
|
53
|
+
- (Optionally) Modify config to alter where traces are sent
|
|
54
|
+
|
|
55
|
+
See [Monocle user guide](Monocle_User_Guide.md) for more details.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Roadmap
|
|
59
|
+
|
|
60
|
+
Goal of Monocle is to support tracing for apps written in *any language* with *any LLM orchestration or agentic framework* and built using models, vectors, agents or other components served up by *any cloud or model inference provider*.
|
|
61
|
+
|
|
62
|
+
Current version supports:
|
|
63
|
+
- Language: (🟢) Python , (🔜) [Typescript](https://github.com/monocle2ai/monocle-typescript)
|
|
64
|
+
- LLM-frameworks: (🟢) Langchain, (🟢) Llamaindex, (🟢) Haystack, (🔜) Flask
|
|
65
|
+
- LLM inference providers: (🟢) OpenAI, (🟢) Azure OpenAI, (🟢) Nvidia Triton, (🔜) AWS Bedrock, (🔜) Google Vertex, (🔜) Azure ML, (🔜) Hugging Face
|
|
66
|
+
- Vector stores: (🟢) FAISS, (🔜) OpenSearch, (🔜) Milvus
|
|
67
|
+
- Exporter: (🟢) stdout, (🟢) file, (🔜) Azure Blob Storage, (🔜) AWS S3, (🔜) Google Cloud Storage
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
## Get involved
|
|
71
|
+
### Provide feedback
|
|
72
|
+
- Submit issues and enhancements requests via Github issues
|
|
73
|
+
|
|
74
|
+
### Contribute
|
|
75
|
+
- Monocle is community based open source project. We welcome your contributions. Please refer to the CONTRIBUTING and CODE_OF_CONDUCT for guidelines. The [contributor's guide](CONTRIBUTING.md) provides technical details of the project.
|
|
76
|
+
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "monocle_apptrace"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.1.1"
|
|
8
8
|
authors = []
|
|
9
9
|
description = "package with monocle genAI tracing"
|
|
10
10
|
readme = "README.md"
|
|
@@ -42,7 +42,8 @@ dev = [
|
|
|
42
42
|
'pytest==8.0.0',
|
|
43
43
|
'llama-index==0.10.30',
|
|
44
44
|
'llama-index-embeddings-huggingface==0.2.0',
|
|
45
|
-
'llama-index-vector-stores-chroma==0.1.9'
|
|
45
|
+
'llama-index-vector-stores-chroma==0.1.9',
|
|
46
|
+
'parameterized==0.9.0'
|
|
46
47
|
]
|
|
47
48
|
|
|
48
49
|
[project.urls]
|