ai-pipeline-core 0.1.13__py3-none-any.whl → 0.2.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.
- ai_pipeline_core/__init__.py +25 -14
- ai_pipeline_core/documents/__init__.py +2 -1
- ai_pipeline_core/documents/document.py +317 -49
- ai_pipeline_core/documents/document_list.py +136 -33
- ai_pipeline_core/documents/flow_document.py +8 -29
- ai_pipeline_core/documents/task_document.py +6 -27
- ai_pipeline_core/documents/temporary_document.py +6 -27
- ai_pipeline_core/documents/utils.py +64 -1
- ai_pipeline_core/flow/config.py +174 -5
- ai_pipeline_core/flow/options.py +2 -2
- ai_pipeline_core/llm/__init__.py +6 -1
- ai_pipeline_core/llm/ai_messages.py +14 -7
- ai_pipeline_core/llm/client.py +143 -55
- ai_pipeline_core/llm/model_options.py +20 -5
- ai_pipeline_core/llm/model_response.py +77 -29
- ai_pipeline_core/llm/model_types.py +38 -40
- ai_pipeline_core/logging/__init__.py +0 -2
- ai_pipeline_core/logging/logging_config.py +0 -6
- ai_pipeline_core/logging/logging_mixin.py +2 -10
- ai_pipeline_core/pipeline.py +68 -65
- ai_pipeline_core/prefect.py +12 -3
- ai_pipeline_core/prompt_manager.py +6 -7
- ai_pipeline_core/settings.py +13 -5
- ai_pipeline_core/simple_runner/__init__.py +1 -11
- ai_pipeline_core/simple_runner/cli.py +13 -12
- ai_pipeline_core/simple_runner/simple_runner.py +34 -172
- ai_pipeline_core/storage/__init__.py +8 -0
- ai_pipeline_core/storage/storage.py +628 -0
- ai_pipeline_core/tracing.py +110 -26
- {ai_pipeline_core-0.1.13.dist-info → ai_pipeline_core-0.2.0.dist-info}/METADATA +60 -23
- ai_pipeline_core-0.2.0.dist-info/RECORD +38 -0
- ai_pipeline_core-0.1.13.dist-info/RECORD +0 -36
- {ai_pipeline_core-0.1.13.dist-info → ai_pipeline_core-0.2.0.dist-info}/WHEEL +0 -0
- {ai_pipeline_core-0.1.13.dist-info → ai_pipeline_core-0.2.0.dist-info}/licenses/LICENSE +0 -0
ai_pipeline_core/__init__.py
CHANGED
|
@@ -7,7 +7,7 @@ It combines document processing, LLM integration, and workflow orchestration int
|
|
|
7
7
|
system designed for production use.
|
|
8
8
|
|
|
9
9
|
The framework enforces best practices through strong typing (Pydantic), automatic retries,
|
|
10
|
-
cost tracking
|
|
10
|
+
and cost tracking. All I/O operations are async for maximum throughput.
|
|
11
11
|
|
|
12
12
|
**CRITICAL IMPORT RULE**:
|
|
13
13
|
Always import from the top-level package:
|
|
@@ -18,12 +18,12 @@ cost tracking, and distributed tracing. All I/O operations are async for maximum
|
|
|
18
18
|
from ai_pipeline_core.llm import generate # NO!
|
|
19
19
|
from ai_pipeline_core.documents import FlowDocument # NO!
|
|
20
20
|
|
|
21
|
-
FRAMEWORK RULES (
|
|
22
|
-
1. Decorators: Use @
|
|
21
|
+
FRAMEWORK RULES (Use by default, unless instructed otherwise):
|
|
22
|
+
1. Decorators: Use @pipeline_task WITHOUT parameters, @pipeline_flow WITH config
|
|
23
23
|
2. Logging: Use get_pipeline_logger(__name__) - NEVER print() or logging module
|
|
24
24
|
3. LLM calls: Use AIMessages or str. Wrap Documents in AIMessages; do not call .text yourself
|
|
25
|
-
4. Options:
|
|
26
|
-
5. Documents: Create with just name and content - skip description
|
|
25
|
+
4. Options: DO NOT use options parameter - omit it entirely (defaults are optimal)
|
|
26
|
+
5. Documents: Create with just name and content - skip description unless needed
|
|
27
27
|
6. FlowConfig: OUTPUT_DOCUMENT_TYPE must differ from all INPUT_DOCUMENT_TYPES
|
|
28
28
|
7. Initialization: PromptManager and logger at module scope, not in functions
|
|
29
29
|
8. DocumentList: Use default constructor - no validation flags needed
|
|
@@ -36,18 +36,22 @@ Core Capabilities:
|
|
|
36
36
|
- **LLM Integration**: Unified interface to any model via LiteLLM with caching
|
|
37
37
|
- **Structured Output**: Type-safe generation with Pydantic model validation
|
|
38
38
|
- **Workflow Orchestration**: Prefect-based flows and tasks with retries
|
|
39
|
-
- **Observability**:
|
|
39
|
+
- **Observability**: Built-in monitoring and debugging capabilities
|
|
40
40
|
- **Local Development**: Simple runner for testing without infrastructure
|
|
41
41
|
|
|
42
42
|
Quick Start:
|
|
43
43
|
>>> from ai_pipeline_core import (
|
|
44
|
-
... pipeline_flow, FlowDocument, DocumentList, FlowOptions, llm, AIMessages
|
|
44
|
+
... pipeline_flow, FlowDocument, DocumentList, FlowOptions, FlowConfig, llm, AIMessages
|
|
45
45
|
... )
|
|
46
46
|
>>>
|
|
47
47
|
>>> class OutputDoc(FlowDocument):
|
|
48
48
|
... '''Analysis result document.'''
|
|
49
49
|
>>>
|
|
50
|
-
>>>
|
|
50
|
+
>>> class MyFlowConfig(FlowConfig):
|
|
51
|
+
... INPUT_DOCUMENT_TYPES = []
|
|
52
|
+
... OUTPUT_DOCUMENT_TYPE = OutputDoc
|
|
53
|
+
>>>
|
|
54
|
+
>>> @pipeline_flow(config=MyFlowConfig)
|
|
51
55
|
>>> async def analyze_flow(
|
|
52
56
|
... project_name: str,
|
|
53
57
|
... documents: DocumentList,
|
|
@@ -55,7 +59,7 @@ Quick Start:
|
|
|
55
59
|
... ) -> DocumentList:
|
|
56
60
|
... # Messages accept AIMessages or str. Wrap documents: AIMessages([doc])
|
|
57
61
|
... response = await llm.generate(
|
|
58
|
-
...
|
|
62
|
+
... "gpt-5",
|
|
59
63
|
... messages=AIMessages([documents[0]])
|
|
60
64
|
... )
|
|
61
65
|
... result = OutputDoc.create(
|
|
@@ -76,8 +80,6 @@ Optional Environment Variables:
|
|
|
76
80
|
- PREFECT_API_KEY: Prefect API authentication key
|
|
77
81
|
- LMNR_PROJECT_API_KEY: Laminar (LMNR) API key for tracing
|
|
78
82
|
- LMNR_DEBUG: Set to "true" to enable debug-level traces
|
|
79
|
-
- LMNR_SESSION_ID: Default session ID for traces
|
|
80
|
-
- LMNR_USER_ID: Default user ID for traces
|
|
81
83
|
"""
|
|
82
84
|
|
|
83
85
|
from . import llm
|
|
@@ -88,6 +90,7 @@ from .documents import (
|
|
|
88
90
|
TaskDocument,
|
|
89
91
|
TemporaryDocument,
|
|
90
92
|
canonical_name_key,
|
|
93
|
+
is_document_sha256,
|
|
91
94
|
sanitize_url,
|
|
92
95
|
)
|
|
93
96
|
from .flow import FlowConfig, FlowOptions
|
|
@@ -98,6 +101,8 @@ from .llm import (
|
|
|
98
101
|
ModelOptions,
|
|
99
102
|
ModelResponse,
|
|
100
103
|
StructuredModelResponse,
|
|
104
|
+
generate,
|
|
105
|
+
generate_structured,
|
|
101
106
|
)
|
|
102
107
|
from .logging import (
|
|
103
108
|
LoggerMixin,
|
|
@@ -111,9 +116,9 @@ from .pipeline import pipeline_flow, pipeline_task
|
|
|
111
116
|
from .prefect import disable_run_logger, prefect_test_harness
|
|
112
117
|
from .prompt_manager import PromptManager
|
|
113
118
|
from .settings import Settings
|
|
114
|
-
from .tracing import TraceInfo, TraceLevel, trace
|
|
119
|
+
from .tracing import TraceInfo, TraceLevel, set_trace_cost, trace
|
|
115
120
|
|
|
116
|
-
__version__ = "0.
|
|
121
|
+
__version__ = "0.2.0"
|
|
117
122
|
|
|
118
123
|
__all__ = [
|
|
119
124
|
# Config/Settings
|
|
@@ -132,6 +137,7 @@ __all__ = [
|
|
|
132
137
|
"TaskDocument",
|
|
133
138
|
"TemporaryDocument",
|
|
134
139
|
"canonical_name_key",
|
|
140
|
+
"is_document_sha256",
|
|
135
141
|
"sanitize_url",
|
|
136
142
|
# Flow/Task
|
|
137
143
|
"FlowConfig",
|
|
@@ -143,7 +149,9 @@ __all__ = [
|
|
|
143
149
|
"prefect_test_harness",
|
|
144
150
|
"disable_run_logger",
|
|
145
151
|
# LLM
|
|
146
|
-
"llm",
|
|
152
|
+
"llm", # for backward compatibility
|
|
153
|
+
"generate",
|
|
154
|
+
"generate_structured",
|
|
147
155
|
"ModelName",
|
|
148
156
|
"ModelOptions",
|
|
149
157
|
"ModelResponse",
|
|
@@ -154,6 +162,9 @@ __all__ = [
|
|
|
154
162
|
"trace",
|
|
155
163
|
"TraceLevel",
|
|
156
164
|
"TraceInfo",
|
|
165
|
+
"set_trace_cost",
|
|
157
166
|
# Utils
|
|
158
167
|
"PromptManager",
|
|
168
|
+
"generate",
|
|
169
|
+
"generate_structured",
|
|
159
170
|
]
|
|
@@ -12,7 +12,7 @@ from .document_list import DocumentList
|
|
|
12
12
|
from .flow_document import FlowDocument
|
|
13
13
|
from .task_document import TaskDocument
|
|
14
14
|
from .temporary_document import TemporaryDocument
|
|
15
|
-
from .utils import canonical_name_key, sanitize_url
|
|
15
|
+
from .utils import canonical_name_key, is_document_sha256, sanitize_url
|
|
16
16
|
|
|
17
17
|
__all__ = [
|
|
18
18
|
"Document",
|
|
@@ -21,5 +21,6 @@ __all__ = [
|
|
|
21
21
|
"TaskDocument",
|
|
22
22
|
"TemporaryDocument",
|
|
23
23
|
"canonical_name_key",
|
|
24
|
+
"is_document_sha256",
|
|
24
25
|
"sanitize_url",
|
|
25
26
|
]
|