levelapp 0.1.2__tar.gz → 0.1.3__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 levelapp might be problematic. Click here for more details.

Files changed (85) hide show
  1. {levelapp-0.1.2 → levelapp-0.1.3}/PKG-INFO +5 -3
  2. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/aspects/monitor.py +3 -2
  3. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/simulator/simulator.py +3 -3
  4. {levelapp-0.1.2 → levelapp-0.1.3}/pyproject.toml +67 -65
  5. {levelapp-0.1.2 → levelapp-0.1.3}/src/level_app/main_session.py +1 -1
  6. {levelapp-0.1.2 → levelapp-0.1.3}/.gitignore +0 -0
  7. {levelapp-0.1.2 → levelapp-0.1.3}/.python-version +0 -0
  8. {levelapp-0.1.2 → levelapp-0.1.3}/LICENSE +0 -0
  9. {levelapp-0.1.2 → levelapp-0.1.3}/MANIFEST.in +0 -0
  10. {levelapp-0.1.2 → levelapp-0.1.3}/Makefile +0 -0
  11. {levelapp-0.1.2 → levelapp-0.1.3}/README.md +0 -0
  12. {levelapp-0.1.2 → levelapp-0.1.3}/docs/media/simulator-module-diagram.PNG +0 -0
  13. {levelapp-0.1.2 → levelapp-0.1.3}/docs/media/simulator-sequence-diagram.png +0 -0
  14. {levelapp-0.1.2 → levelapp-0.1.3}/examples/README.md +0 -0
  15. {levelapp-0.1.2 → levelapp-0.1.3}/examples/conversation_script.json +0 -0
  16. {levelapp-0.1.2 → levelapp-0.1.3}/examples/example_chatbot.py +0 -0
  17. {levelapp-0.1.2 → levelapp-0.1.3}/examples/example_evaluation.py +0 -0
  18. {levelapp-0.1.2 → levelapp-0.1.3}/examples/workflow_configuration.yaml +0 -0
  19. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/__init__.py +0 -0
  20. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/aspects/__init__.py +0 -0
  21. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/aspects/loader.py +0 -0
  22. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/aspects/logger.py +0 -0
  23. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/aspects/sanitizer.py +0 -0
  24. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/clients/__init__.py +0 -0
  25. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/clients/anthropic.py +0 -0
  26. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/clients/ionos.py +0 -0
  27. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/clients/mistral.py +0 -0
  28. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/clients/openai.py +0 -0
  29. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/comparator/__init__.py +0 -0
  30. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/comparator/comparator.py +0 -0
  31. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/comparator/extractor.py +0 -0
  32. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/comparator/schemas.py +0 -0
  33. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/comparator/scorer.py +0 -0
  34. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/comparator/utils.py +0 -0
  35. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/config/__init__.py +0 -0
  36. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/config/endpoint.py +0 -0
  37. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/config/endpoint_.py +0 -0
  38. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/config/prompts.py +0 -0
  39. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/core/__init__.py +0 -0
  40. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/core/base.py +0 -0
  41. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/core/schemas.py +0 -0
  42. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/core/session.py +0 -0
  43. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/evaluator/__init__.py +0 -0
  44. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/evaluator/evaluator.py +0 -0
  45. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/metrics/__init__.py +0 -0
  46. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/metrics/embedding.py +0 -0
  47. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/metrics/exact.py +0 -0
  48. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/metrics/fuzzy.py +0 -0
  49. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/metrics/token.py +0 -0
  50. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/plugins/__init__.py +0 -0
  51. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/repository/__init__.py +0 -0
  52. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/repository/firestore.py +0 -0
  53. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/simulator/__init__.py +0 -0
  54. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/simulator/schemas.py +0 -0
  55. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/simulator/utils.py +0 -0
  56. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/workflow/__init__.py +0 -0
  57. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/workflow/base.py +0 -0
  58. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/workflow/config.py +0 -0
  59. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/workflow/context.py +0 -0
  60. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/workflow/factory.py +0 -0
  61. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/workflow/registration.py +0 -0
  62. {levelapp-0.1.2 → levelapp-0.1.3}/levelapp/workflow/runtime.py +0 -0
  63. {levelapp-0.1.2 → levelapp-0.1.3}/make.bat +0 -0
  64. {levelapp-0.1.2 → levelapp-0.1.3}/project_structure.txt +0 -0
  65. {levelapp-0.1.2 → levelapp-0.1.3}/src/data/conversation_example_1.json +0 -0
  66. {levelapp-0.1.2 → levelapp-0.1.3}/src/data/endpoint_configuration.yaml +0 -0
  67. {levelapp-0.1.2 → levelapp-0.1.3}/src/data/evaluation_results.json +0 -0
  68. {levelapp-0.1.2 → levelapp-0.1.3}/src/data/payload_example_1.yaml +0 -0
  69. {levelapp-0.1.2 → levelapp-0.1.3}/src/data/payload_example_2.yaml +0 -0
  70. {levelapp-0.1.2 → levelapp-0.1.3}/src/data/workflow_config.yaml +0 -0
  71. {levelapp-0.1.2 → levelapp-0.1.3}/src/data/workflow_config_2.json +0 -0
  72. {levelapp-0.1.2 → levelapp-0.1.3}/src/level_app/__init__.py +0 -0
  73. {levelapp-0.1.2 → levelapp-0.1.3}/src/level_app/main.py +0 -0
  74. {levelapp-0.1.2 → levelapp-0.1.3}/src/level_app/main_monitoring.py +0 -0
  75. {levelapp-0.1.2 → levelapp-0.1.3}/src/level_app/main_simulator.py +0 -0
  76. {levelapp-0.1.2 → levelapp-0.1.3}/tests/__init__.py +0 -0
  77. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_anthropic.py +0 -0
  78. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_comparator.py +0 -0
  79. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_ionos.py +0 -0
  80. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_mistral.py +0 -0
  81. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_monitoring.py +0 -0
  82. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_openai.py +0 -0
  83. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_session.py +0 -0
  84. {levelapp-0.1.2 → levelapp-0.1.3}/tests/test_simulator.py +0 -0
  85. {levelapp-0.1.2 → levelapp-0.1.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: levelapp
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: LevelApp is an evaluation framework for AI/LLM-based software application. [Powered by Norma]
5
5
  Project-URL: Homepage, https://github.com/levelapp-org
6
6
  Project-URL: Repository, https://github.com/levelapp-org/levelapp-framework
@@ -33,10 +33,12 @@ Requires-Dist: rapidfuzz>=3.13.0
33
33
  Requires-Dist: requests>=2.32.4
34
34
  Requires-Dist: tenacity>=9.1.2
35
35
  Provides-Extra: dev
36
- Requires-Dist: arrow>=1.3.0; extra == 'dev'
36
+ Requires-Dist: google-api-core>=2.25.1; extra == 'dev'
37
+ Requires-Dist: google-auth>=2.40.3; extra == 'dev'
38
+ Requires-Dist: google-cloud-firestore>=2.21.0; extra == 'dev'
37
39
  Requires-Dist: httpx>=0.28.1; extra == 'dev'
40
+ Requires-Dist: humanize>=4.13.0; extra == 'dev'
38
41
  Requires-Dist: numpy>=2.3.2; extra == 'dev'
39
- Requires-Dist: openai>=1.99.9; extra == 'dev'
40
42
  Requires-Dist: pandas-stubs==2.3.0.250703; extra == 'dev'
41
43
  Requires-Dist: pandas>=2.3.1; extra == 'dev'
42
44
  Requires-Dist: pydantic>=2.11.7; extra == 'dev'
@@ -422,7 +422,8 @@ class FunctionMonitor:
422
422
  maxsize: int | None = 128,
423
423
  enable_timing: bool = True,
424
424
  track_memory: bool = True,
425
- collectors: List[Type[MetricsCollector]] | None = None
425
+ collectors: List[Type[MetricsCollector]] | None = None,
426
+ verbose: bool = False
426
427
  ) -> Callable[[Callable[P, T]], Callable[P, T]]:
427
428
  """
428
429
  Decorator factory for monitoring functions.
@@ -456,7 +457,7 @@ class FunctionMonitor:
456
457
  )
457
458
 
458
459
  with self._lock:
459
- if name in self._monitored_procedures:
460
+ if name in self._monitored_procedures and verbose:
460
461
  raise ValueError(f"Function '{name}' is already registered.")
461
462
 
462
463
  self._monitored_procedures[name] = monitored_func
@@ -396,7 +396,7 @@ class ConversationSimulator(BaseProcess):
396
396
  evaluation_results=evaluation_results,
397
397
  )
398
398
  else:
399
- logger.info(f"[{_LOG}] Judge evaluation skipped (no evaluator or no providers).")
399
+ logger.info(f"{_LOG} Judge evaluation skipped (no evaluator or no providers).")
400
400
 
401
401
  if metadata_evaluator and reference_metadata:
402
402
  self._metadata_evaluation(
@@ -406,7 +406,7 @@ class ConversationSimulator(BaseProcess):
406
406
  evaluation_results=evaluation_results,
407
407
  )
408
408
  else:
409
- logger.info(f"[{_LOG}] Metadata evaluation skipped (no evaluator or no reference metadata).")
409
+ logger.info(f"{_LOG} Metadata evaluation skipped (no evaluator or no reference metadata).")
410
410
 
411
411
  evaluation_results.guardrail_flag = 1 if generated_guardrail == reference_guardrail else 0
412
412
 
@@ -480,7 +480,7 @@ class ConversationSimulator(BaseProcess):
480
480
  reference_data=reference_metadata,
481
481
  )
482
482
  except Exception as e:
483
- logger.error(f"[{_LOG}] Metadata evaluation failed:\n{e}", exc_info=e)
483
+ logger.error(f"{_LOG} Metadata evaluation failed:\n{e}", exc_info=e)
484
484
 
485
485
  @staticmethod
486
486
  def store_evaluation_results(
@@ -1,65 +1,67 @@
1
- [project]
2
- name = "levelapp"
3
- version = "0.1.2"
4
- description = "LevelApp is an evaluation framework for AI/LLM-based software application. [Powered by Norma]"
5
- readme = "README.md"
6
- authors = [
7
- { name = "Mohamed Sofiene KADRI", email = "ms.kadri.dev@gmail.com" }
8
- ]
9
- licence = { file = "LICENCE" }
10
- requires-python = ">=3.12"
11
- keywords = ["ai", "llm", "evaluation", "framework", "testing"]
12
- classifiers = [
13
- "Development Status :: 3 - Alpha",
14
- "Intended Audience :: Developers",
15
- "License :: OSI Approved :: MIT License",
16
- "Programming Language :: Python :: 3",
17
- "Programming Language :: Python :: 3.12",
18
- "Topic :: Software Development :: Testing",
19
- "Topic :: Scientific/Engineering :: Artificial Intelligence",
20
- ]
21
-
22
- dependencies = [
23
- "google-api-core>=2.25.1",
24
- "google-auth>=2.40.3",
25
- "google-cloud-firestore>=2.21.0",
26
- "httpx>=0.28.1",
27
- "humanize>=4.13.0",
28
- "numpy>=2.3.2",
29
- "pandas>=2.3.1",
30
- "pandas-stubs==2.3.0.250703",
31
- "pydantic>=2.11.7",
32
- "python-dotenv>=1.1.1",
33
- "pyyaml>=6.0.2",
34
- "rapid>=0.0.3",
35
- "rapidfuzz>=3.13.0",
36
- "requests>=2.32.4",
37
- "tenacity>=9.1.2",
38
- ]
39
-
40
- [project.urls]
41
- Homepage = "https://github.com/levelapp-org"
42
- Repository = "https://github.com/levelapp-org/levelapp-framework"
43
- Documentation = "https://levelapp.readthedocs.io"
44
- Issues = "https://github.com/levelapp-org/levelapp-framework/issues"
45
-
46
- [build-system]
47
- requires = ["hatchling"]
48
- build-backend = "hatchling.build"
49
-
50
- [project.optional-dependencies]
51
- dev = [
52
- "arrow>=1.3.0",
53
- "httpx>=0.28.1",
54
- "numpy>=2.3.2",
55
- "openai>=1.99.9",
56
- "pandas>=2.3.1",
57
- "pandas-stubs==2.3.0.250703",
58
- "pydantic>=2.11.7",
59
- "python-dotenv>=1.1.1",
60
- "pyyaml>=6.0.2",
61
- "rapid>=0.0.3",
62
- "rapidfuzz>=3.13.0",
63
- "requests>=2.32.4",
64
- "tenacity>=9.1.2",
65
- ]
1
+ [project]
2
+ name = "levelapp"
3
+ version = "0.1.3"
4
+ description = "LevelApp is an evaluation framework for AI/LLM-based software application. [Powered by Norma]"
5
+ readme = "README.md"
6
+ authors = [
7
+ { name = "Mohamed Sofiene KADRI", email = "ms.kadri.dev@gmail.com" }
8
+ ]
9
+ licence = { file = "LICENCE" }
10
+ requires-python = ">=3.12"
11
+ keywords = ["ai", "llm", "evaluation", "framework", "testing"]
12
+ classifiers = [
13
+ "Development Status :: 3 - Alpha",
14
+ "Intended Audience :: Developers",
15
+ "License :: OSI Approved :: MIT License",
16
+ "Programming Language :: Python :: 3",
17
+ "Programming Language :: Python :: 3.12",
18
+ "Topic :: Software Development :: Testing",
19
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
20
+ ]
21
+
22
+ dependencies = [
23
+ "google-api-core>=2.25.1",
24
+ "google-auth>=2.40.3",
25
+ "google-cloud-firestore>=2.21.0",
26
+ "httpx>=0.28.1",
27
+ "humanize>=4.13.0",
28
+ "numpy>=2.3.2",
29
+ "pandas>=2.3.1",
30
+ "pandas-stubs==2.3.0.250703",
31
+ "pydantic>=2.11.7",
32
+ "python-dotenv>=1.1.1",
33
+ "pyyaml>=6.0.2",
34
+ "rapid>=0.0.3",
35
+ "rapidfuzz>=3.13.0",
36
+ "requests>=2.32.4",
37
+ "tenacity>=9.1.2",
38
+ ]
39
+
40
+ [project.urls]
41
+ Homepage = "https://github.com/levelapp-org"
42
+ Repository = "https://github.com/levelapp-org/levelapp-framework"
43
+ Documentation = "https://levelapp.readthedocs.io"
44
+ Issues = "https://github.com/levelapp-org/levelapp-framework/issues"
45
+
46
+ [build-system]
47
+ requires = ["hatchling"]
48
+ build-backend = "hatchling.build"
49
+
50
+ [project.optional-dependencies]
51
+ dev = [
52
+ "google-api-core>=2.25.1",
53
+ "google-auth>=2.40.3",
54
+ "google-cloud-firestore>=2.21.0",
55
+ "httpx>=0.28.1",
56
+ "humanize>=4.13.0",
57
+ "numpy>=2.3.2",
58
+ "pandas>=2.3.1",
59
+ "pandas-stubs==2.3.0.250703",
60
+ "pydantic>=2.11.7",
61
+ "python-dotenv>=1.1.1",
62
+ "pyyaml>=6.0.2",
63
+ "rapid>=0.0.3",
64
+ "rapidfuzz>=3.13.0",
65
+ "requests>=2.32.4",
66
+ "tenacity>=9.1.2",
67
+ ]
@@ -37,7 +37,7 @@ if __name__ == "__main__":
37
37
 
38
38
  config = WorkflowConfig.load(path="../data/workflow_config.yaml")
39
39
 
40
- evaluation_session = EvaluationSession(session_name="test-session", workflow_config=config, enable_monitoring=False)
40
+ evaluation_session = EvaluationSession(session_name="test-session", workflow_config=config, enable_monitoring=True)
41
41
 
42
42
  with evaluation_session as session:
43
43
  session.run()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes