levelapp 0.1.0__py3-none-any.whl → 0.1.2__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.
Potentially problematic release.
This version of levelapp might be problematic. Click here for more details.
- levelapp/aspects/monitor.py +3 -1
- levelapp/clients/__init__.py +0 -1
- levelapp/comparator/scorer.py +0 -2
- levelapp/config/endpoint.py +22 -13
- levelapp/config/endpoint_.py +62 -0
- levelapp/config/prompts.py +22 -0
- levelapp/core/schemas.py +24 -0
- levelapp/core/session.py +97 -59
- levelapp/evaluator/evaluator.py +42 -14
- levelapp/metrics/__init__.py +1 -5
- levelapp/repository/firestore.py +15 -6
- levelapp/simulator/schemas.py +15 -21
- levelapp/simulator/simulator.py +124 -55
- levelapp/simulator/utils.py +40 -78
- levelapp/workflow/__init__.py +3 -2
- levelapp/workflow/base.py +64 -17
- levelapp/workflow/config.py +92 -0
- levelapp/workflow/context.py +62 -0
- levelapp/workflow/factory.py +32 -41
- levelapp/workflow/registration.py +1 -1
- levelapp/workflow/runtime.py +19 -0
- {levelapp-0.1.0.dist-info → levelapp-0.1.2.dist-info}/METADATA +102 -39
- {levelapp-0.1.0.dist-info → levelapp-0.1.2.dist-info}/RECORD +25 -21
- levelapp/workflow/schemas.py +0 -121
- {levelapp-0.1.0.dist-info → levelapp-0.1.2.dist-info}/WHEEL +0 -0
- {levelapp-0.1.0.dist-info → levelapp-0.1.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -2,9 +2,9 @@ levelapp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
2
2
|
levelapp/aspects/__init__.py,sha256=_OaPcjTWBizqcUdDVj5aYue7lG9ytjQGLhPvReriKnU,326
|
|
3
3
|
levelapp/aspects/loader.py,sha256=xWpcWtS25zbVhZ0UnIJEcQA9klajKk10TLK4j1IStH0,9543
|
|
4
4
|
levelapp/aspects/logger.py,sha256=MJ9HphyHYkTE5-ajA_WuMUTM0qQzd0WIP243vF-pj3M,1698
|
|
5
|
-
levelapp/aspects/monitor.py,sha256=
|
|
5
|
+
levelapp/aspects/monitor.py,sha256=KREhG_KH4f7okyheexaeKykwhzzQsFl1USC-k9YPXfQ,22065
|
|
6
6
|
levelapp/aspects/sanitizer.py,sha256=zUqgb76tXJ8UUYtHp0Rz7q9PZjAHpSpHPPFfGTjjQNg,5229
|
|
7
|
-
levelapp/clients/__init__.py,sha256=
|
|
7
|
+
levelapp/clients/__init__.py,sha256=of3Zdkag634COXH_ca4hxXkERT8X44QS0IgfWu2yWqY,4084
|
|
8
8
|
levelapp/clients/anthropic.py,sha256=Bxp-HffcIPLwM9BLcTR7n-D8ZXYVWCmbr2oH33fKV04,4030
|
|
9
9
|
levelapp/clients/ionos.py,sha256=GFkLSeu8epFZV44GbNO3h1fRCKcfxscHMTFY0kPfh3o,4267
|
|
10
10
|
levelapp/clients/mistral.py,sha256=e1NRvP9qN7O2zWAzBbgdQmmUDHQfCRLtVKDJCrh0DNA,3777
|
|
@@ -13,34 +13,38 @@ levelapp/comparator/__init__.py,sha256=ynmc0mrx-JbcCqLH-z4hOVezqGocDbDQGqgbhWy2x
|
|
|
13
13
|
levelapp/comparator/comparator.py,sha256=yk0FWREnWKhIbXlsYpieqPJPqrlWXzyBMjVSznGqKY8,8183
|
|
14
14
|
levelapp/comparator/extractor.py,sha256=vJ9iEoWAtXo2r9r7X72uUQPKW3UZE9Kx3uIjCufEp9k,3910
|
|
15
15
|
levelapp/comparator/schemas.py,sha256=lUAQzEyStidt2ePQgV2zq-An5MLBrVSw6t8fB0FQKJs,1803
|
|
16
|
-
levelapp/comparator/scorer.py,sha256=
|
|
16
|
+
levelapp/comparator/scorer.py,sha256=LBRy8H11rXulSa-k40BcycPcMAHgdUm13qS7ibWHq6I,9032
|
|
17
17
|
levelapp/comparator/utils.py,sha256=Eu48nDrNzFr0lwAJJS0aNhKsAWQ72syTEWYMNYfg764,4331
|
|
18
18
|
levelapp/config/__init__.py,sha256=9oaajE5zW-OVWOszUzMAG6nHDSbLQWa3KT6bVoSvzRA,137
|
|
19
|
-
levelapp/config/endpoint.py,sha256=
|
|
20
|
-
levelapp/config/
|
|
19
|
+
levelapp/config/endpoint.py,sha256=B-uIEKF-0_Y6Vo8MZ8eoCZocRkghijrdpwT3zq0FDLk,7647
|
|
20
|
+
levelapp/config/endpoint_.py,sha256=-abrIYKbFPLxTqNst-zbCI4MpMCmCMe9VZ6O8OwNRiE,1629
|
|
21
|
+
levelapp/config/prompts.py,sha256=NXOKRp5l1VQ9LO0pUojVH6TDJhWyZImsAvZEz2QiD9k,2206
|
|
21
22
|
levelapp/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
23
|
levelapp/core/base.py,sha256=oh4OkKgwGxmw_jgjX6wrBoK0KPc1JvCMZfbZP_mGmIg,12453
|
|
23
|
-
levelapp/core/
|
|
24
|
+
levelapp/core/schemas.py,sha256=E47d93MMOj4eRYZIqUyLBiE5Ye7WgwkOJPOWQ6swRmo,465
|
|
25
|
+
levelapp/core/session.py,sha256=6utDbLdg6DjwHL5dP-4wGe4_f7gFgEukuNNeOnbCbtA,9035
|
|
24
26
|
levelapp/evaluator/__init__.py,sha256=K-P75Q1FXXLCNqH1wyhT9sf4y2R9a1qR5449AXEsY1k,109
|
|
25
|
-
levelapp/evaluator/evaluator.py,sha256=
|
|
26
|
-
levelapp/metrics/__init__.py,sha256=
|
|
27
|
+
levelapp/evaluator/evaluator.py,sha256=JCRgQps9GKlJBDYw9xzVrC2_aGy0GhGAJ0ZkSC_IWWA,10806
|
|
28
|
+
levelapp/metrics/__init__.py,sha256=x8iTaeDezJyQ9-NFe8GGvzwIBhyAJHWSRfBE3JRX-PE,1878
|
|
27
29
|
levelapp/metrics/embedding.py,sha256=wvlT8Q5DjDT6GrAIFtc5aFbA_80hDLUXMP4RbSpSwHE,115
|
|
28
30
|
levelapp/metrics/exact.py,sha256=Kb13nD2OVLrl3iYHaXrxDfrxDuhW0SMVvLAEXPaJtlY,6235
|
|
29
31
|
levelapp/metrics/fuzzy.py,sha256=Rg8ashzMxtQwKO-z_LLzdj2PDIRqL4CBw6PGRf9IBrI,2598
|
|
30
32
|
levelapp/metrics/token.py,sha256=yQi9hxT_fXTGjLiCCemDxQ4Uk2zD-wQYtSnDlI2AuuY,3521
|
|
31
33
|
levelapp/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
34
|
levelapp/repository/__init__.py,sha256=hNmFRZ7kKJN1mMlOHeW9xf0j9Q7gqTXYJ3hMCzk9to4,79
|
|
33
|
-
levelapp/repository/firestore.py,sha256=
|
|
35
|
+
levelapp/repository/firestore.py,sha256=K9JgxsNCelAKtzTDv19c1dHRlitMeRzo7H3caTlKuF8,10369
|
|
34
36
|
levelapp/simulator/__init__.py,sha256=8Dz8g7rbpBZX3WoknVmMVoWm_VT72ZL9BABOF1xFpqs,83
|
|
35
|
-
levelapp/simulator/schemas.py,sha256=
|
|
36
|
-
levelapp/simulator/simulator.py,sha256=
|
|
37
|
-
levelapp/simulator/utils.py,sha256=
|
|
38
|
-
levelapp/workflow/__init__.py,sha256=
|
|
39
|
-
levelapp/workflow/base.py,sha256=
|
|
40
|
-
levelapp/workflow/
|
|
41
|
-
levelapp/workflow/
|
|
42
|
-
levelapp/workflow/
|
|
43
|
-
levelapp
|
|
44
|
-
levelapp
|
|
45
|
-
levelapp-0.1.
|
|
46
|
-
levelapp-0.1.
|
|
37
|
+
levelapp/simulator/schemas.py,sha256=YGprtuRZ4m33WBD35xj1Ib5EbMTdDCOp-wCykf-Iz-4,3700
|
|
38
|
+
levelapp/simulator/simulator.py,sha256=ytgjUE9G8z2oW6rEzSdVkyncPiJcZCLWyvLR0cI5rk8,19895
|
|
39
|
+
levelapp/simulator/utils.py,sha256=d1O4Q4Yl1lAAJWLJDiwNjwt0hD9bGlCan4a2G21E7yw,5930
|
|
40
|
+
levelapp/workflow/__init__.py,sha256=27b2obG7ObhR43yd2uH-R0koRB7-DG8Emnvrq8EjsTA,193
|
|
41
|
+
levelapp/workflow/base.py,sha256=1A_xKSBOmVjfMbRBcNhDK6G17SEjqRIm-XjMw45IPC4,5596
|
|
42
|
+
levelapp/workflow/config.py,sha256=MlHt1PsXD09aukB93fvKTew0D8WD4_jdnO93Nn6b2U0,2923
|
|
43
|
+
levelapp/workflow/context.py,sha256=gjAZXHEdlsXqWY6DbXOfKXNbxQbahRPSnNzyWDqryPU,2559
|
|
44
|
+
levelapp/workflow/factory.py,sha256=z1ttJmI59sU9HgOvPo3ixUJ_oPv838XgehfuOorlTt8,1634
|
|
45
|
+
levelapp/workflow/registration.py,sha256=VHUHjLHXad5kjcKukaEOIf7hBZ09bT3HAzVmIT08aLo,359
|
|
46
|
+
levelapp/workflow/runtime.py,sha256=cFyXNWXSuURKbrMDHdkTcjeItM9wHP-5DPljntwYL5g,686
|
|
47
|
+
levelapp-0.1.2.dist-info/METADATA,sha256=d0ZoS0BTpHpq65Q1KLeqlN12XQiCAyJ-zPP17T22D6o,12446
|
|
48
|
+
levelapp-0.1.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
49
|
+
levelapp-0.1.2.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
levelapp-0.1.2.dist-info/RECORD,,
|
levelapp/workflow/schemas.py
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
from pydantic import BaseModel
|
|
3
|
-
from dataclasses import dataclass
|
|
4
|
-
from typing import List, Dict, Any
|
|
5
|
-
|
|
6
|
-
from levelapp.config.endpoint import EndpointConfig
|
|
7
|
-
from levelapp.core.base import BaseRepository, BaseEvaluator
|
|
8
|
-
from levelapp.aspects import DataLoader
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ExtendedEnum(Enum):
|
|
12
|
-
@classmethod
|
|
13
|
-
def list(cls):
|
|
14
|
-
return [e.value for e in cls]
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class WorkflowType(ExtendedEnum):
|
|
18
|
-
SIMULATOR = "SIMULATOR"
|
|
19
|
-
COMPARATOR = "COMPARATOR"
|
|
20
|
-
ASSESSOR = "ASSESSOR"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class RepositoryType(ExtendedEnum):
|
|
24
|
-
FIRESTORE = "FIRESTORE"
|
|
25
|
-
FILESYSTEM = "FILESYSTEM"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class EvaluatorType(ExtendedEnum):
|
|
29
|
-
JUDGE = "JUDGE"
|
|
30
|
-
REFERENCE = "REFERENCE"
|
|
31
|
-
RAG = "RAG"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class WorkflowConfig:
|
|
35
|
-
"""Configuration for a workflow, loaded from JSON/YAML via DataLoader."""
|
|
36
|
-
|
|
37
|
-
# Class-level constant
|
|
38
|
-
_fields_list: List[str] = [
|
|
39
|
-
"project_name",
|
|
40
|
-
"evaluation_params",
|
|
41
|
-
"workflow",
|
|
42
|
-
"repository",
|
|
43
|
-
"evaluators",
|
|
44
|
-
"reference_data",
|
|
45
|
-
]
|
|
46
|
-
|
|
47
|
-
def __init__(
|
|
48
|
-
self,
|
|
49
|
-
workflow: WorkflowType,
|
|
50
|
-
repository: RepositoryType,
|
|
51
|
-
evaluators: List[EvaluatorType],
|
|
52
|
-
endpoint_config: EndpointConfig,
|
|
53
|
-
inputs: Dict[str, Any],
|
|
54
|
-
):
|
|
55
|
-
self.workflow = workflow
|
|
56
|
-
self.repository = repository
|
|
57
|
-
self.evaluators = evaluators
|
|
58
|
-
self.endpoint_config = endpoint_config
|
|
59
|
-
self.inputs = inputs
|
|
60
|
-
|
|
61
|
-
@classmethod
|
|
62
|
-
def load(cls, path: str | None = None) -> "WorkflowConfig":
|
|
63
|
-
"""Load and validate workflow configuration from a file."""
|
|
64
|
-
loader = DataLoader()
|
|
65
|
-
config_dict = loader.load_raw_data(path=path)
|
|
66
|
-
model_config: BaseModel = loader.create_dynamic_model(data=config_dict, model_name="WorkflowConfiguration")
|
|
67
|
-
|
|
68
|
-
cls._check_fields(model_config)
|
|
69
|
-
cls._check_values(model_config)
|
|
70
|
-
|
|
71
|
-
workflow = WorkflowType(model_config.workflow)
|
|
72
|
-
repository = RepositoryType(model_config.repository)
|
|
73
|
-
|
|
74
|
-
if isinstance(model_config.evaluators, str):
|
|
75
|
-
print(f"evaluators: {model_config.evaluators}")
|
|
76
|
-
evaluators = [EvaluatorType(model_config.evaluators)]
|
|
77
|
-
else:
|
|
78
|
-
evaluators = [EvaluatorType(e) for e in model_config.evaluators]
|
|
79
|
-
|
|
80
|
-
evaluation_params = model_config.evaluation_params.model_dump()
|
|
81
|
-
reference_data_path = getattr(model_config.reference_data, "path", None)
|
|
82
|
-
endpoint_config = EndpointConfig.model_validate(model_config.endpoint_configuration.model_dump())
|
|
83
|
-
|
|
84
|
-
return cls(
|
|
85
|
-
workflow=workflow,
|
|
86
|
-
repository=repository,
|
|
87
|
-
evaluators=evaluators,
|
|
88
|
-
endpoint_config=endpoint_config,
|
|
89
|
-
inputs={'reference_data_path': reference_data_path, 'evaluation_params': evaluation_params},
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
@classmethod
|
|
93
|
-
def _check_fields(cls, config: BaseModel) -> None:
|
|
94
|
-
for field_name in cls._fields_list:
|
|
95
|
-
if field_name not in config.model_fields:
|
|
96
|
-
raise ValueError(f"[WorkflowConfig] Field '{field_name}' missing in configuration")
|
|
97
|
-
|
|
98
|
-
@staticmethod
|
|
99
|
-
def _check_values(config: BaseModel) -> None:
|
|
100
|
-
if config.workflow not in WorkflowType.list():
|
|
101
|
-
raise ValueError(f"[WorkflowConfig] Unsupported workflow type '{config.workflow}'")
|
|
102
|
-
if config.repository not in RepositoryType.list():
|
|
103
|
-
raise ValueError(f"[WorkflowConfig] Unsupported repository type '{config.repository}'")
|
|
104
|
-
|
|
105
|
-
evals = config.evaluators
|
|
106
|
-
if isinstance(evals, str):
|
|
107
|
-
evals = [evals]
|
|
108
|
-
|
|
109
|
-
for e in evals:
|
|
110
|
-
if e not in EvaluatorType.list():
|
|
111
|
-
raise ValueError(f"[WorkflowConfig] Unsupported evaluator type '{config.evaluators}'")
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
@dataclass(frozen=True)
|
|
115
|
-
class WorkflowContext:
|
|
116
|
-
"""Immutable data holder for workflow execution context."""
|
|
117
|
-
config: WorkflowConfig
|
|
118
|
-
repository: BaseRepository
|
|
119
|
-
evaluators: Dict[str, BaseEvaluator]
|
|
120
|
-
endpoint_config: EndpointConfig
|
|
121
|
-
inputs: Dict[str, Any]
|
|
File without changes
|
|
File without changes
|