judgeval 0.0.10__tar.gz → 0.0.12__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.
Files changed (163) hide show
  1. {judgeval-0.0.10 → judgeval-0.0.12}/PKG-INFO +5 -4
  2. {judgeval-0.0.10 → judgeval-0.0.12}/Pipfile +4 -3
  3. {judgeval-0.0.10 → judgeval-0.0.12}/Pipfile.lock +1268 -585
  4. judgeval-0.0.12/README.md +3 -0
  5. judgeval-0.0.12/docs/api_reference/judgment_client.mdx +61 -0
  6. judgeval-0.0.12/docs/api_reference/trace.mdx +74 -0
  7. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/judges.mdx +1 -1
  8. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/custom_scorers.mdx +12 -12
  9. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/introduction.mdx +4 -4
  10. {judgeval-0.0.10 → judgeval-0.0.12}/docs/getting_started.mdx +6 -2
  11. {judgeval-0.0.10 → judgeval-0.0.12}/docs/mint.json +7 -0
  12. {judgeval-0.0.10 → judgeval-0.0.12}/docs/monitoring/tracing.mdx +7 -1
  13. {judgeval-0.0.10 → judgeval-0.0.12}/docs/notebooks/create_scorer.ipynb +2 -2
  14. {judgeval-0.0.10 → judgeval-0.0.12}/pyproject.toml +5 -4
  15. judgeval-0.0.12/src/demo/cookbooks/new_bot/basic_bot.py +106 -0
  16. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/openai_travel_agent/agent.py +27 -66
  17. judgeval-0.0.12/src/demo/cookbooks/openai_travel_agent/tools.py +16 -0
  18. judgeval-0.0.12/src/demo/customer_use/cstone/basic_test.py +37 -0
  19. judgeval-0.0.12/src/demo/customer_use/cstone/cstone_data.csv +1225 -0
  20. judgeval-0.0.12/src/demo/customer_use/cstone/data.csv +1227 -0
  21. judgeval-0.0.12/src/demo/customer_use/cstone/faithfulness_testing.py +169 -0
  22. judgeval-0.0.12/src/demo/customer_use/cstone/galen_data.csv +0 -0
  23. judgeval-0.0.12/src/demo/customer_use/cstone/playground.py +152 -0
  24. judgeval-0.0.12/src/demo/customer_use/cstone/results.csv +0 -0
  25. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/common/tracer.py +244 -66
  26. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/constants.py +14 -3
  27. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/evaluation_run.py +2 -1
  28. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/judges/utils.py +14 -2
  29. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/judgment_client.py +46 -1
  30. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorer.py +8 -8
  31. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/faithfulness/faithfulness_scorer.py +3 -1
  32. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/faithfulness/prompts.py +6 -3
  33. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/prompt_scorer.py +2 -2
  34. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/score.py +11 -11
  35. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/utils.py +3 -3
  36. judgeval-0.0.12/src/judgeval/tracer/__init__.py +3 -0
  37. judgeval-0.0.10/README.md +0 -3
  38. {judgeval-0.0.10 → judgeval-0.0.12}/.github/workflows/ci.yaml +0 -0
  39. {judgeval-0.0.10 → judgeval-0.0.12}/.gitignore +0 -0
  40. {judgeval-0.0.10 → judgeval-0.0.12}/LICENSE.md +0 -0
  41. {judgeval-0.0.10 → judgeval-0.0.12}/docs/README.md +0 -0
  42. {judgeval-0.0.10 → judgeval-0.0.12}/docs/development.mdx +0 -0
  43. {judgeval-0.0.10 → judgeval-0.0.12}/docs/essentials/code.mdx +0 -0
  44. {judgeval-0.0.10 → judgeval-0.0.12}/docs/essentials/images.mdx +0 -0
  45. {judgeval-0.0.10 → judgeval-0.0.12}/docs/essentials/markdown.mdx +0 -0
  46. {judgeval-0.0.10 → judgeval-0.0.12}/docs/essentials/navigation.mdx +0 -0
  47. {judgeval-0.0.10 → judgeval-0.0.12}/docs/essentials/reusable-snippets.mdx +0 -0
  48. {judgeval-0.0.10 → judgeval-0.0.12}/docs/essentials/settings.mdx +0 -0
  49. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/data_datasets.mdx +0 -0
  50. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/data_examples.mdx +0 -0
  51. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/introduction.mdx +0 -0
  52. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/answer_correctness.mdx +0 -0
  53. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/answer_relevancy.mdx +0 -0
  54. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/classifier_scorer.mdx +0 -0
  55. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/contextual_precision.mdx +0 -0
  56. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/contextual_recall.mdx +0 -0
  57. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/contextual_relevancy.mdx +0 -0
  58. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/faithfulness.mdx +0 -0
  59. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/hallucination.mdx +0 -0
  60. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/json_correctness.mdx +0 -0
  61. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/summarization.mdx +0 -0
  62. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/scorers/tool_correctness.mdx +0 -0
  63. {judgeval-0.0.10 → judgeval-0.0.12}/docs/evaluation/unit_testing.mdx +0 -0
  64. {judgeval-0.0.10 → judgeval-0.0.12}/docs/favicon.svg +0 -0
  65. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/basic_trace_example.png +0 -0
  66. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/checks-passed.png +0 -0
  67. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/create_aggressive_scorer.png +0 -0
  68. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/create_scorer.png +0 -0
  69. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/evaluation_diagram.png +0 -0
  70. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/hero-dark.svg +0 -0
  71. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/hero-light.svg +0 -0
  72. {judgeval-0.0.10 → judgeval-0.0.12}/docs/images/trace_screenshot.png +0 -0
  73. {judgeval-0.0.10 → judgeval-0.0.12}/docs/introduction.mdx +0 -0
  74. {judgeval-0.0.10 → judgeval-0.0.12}/docs/judgment/introduction.mdx +0 -0
  75. {judgeval-0.0.10 → judgeval-0.0.12}/docs/logo/dark.svg +0 -0
  76. {judgeval-0.0.10 → judgeval-0.0.12}/docs/logo/light.svg +0 -0
  77. {judgeval-0.0.10 → judgeval-0.0.12}/docs/monitoring/introduction.mdx +0 -0
  78. {judgeval-0.0.10 → judgeval-0.0.12}/docs/monitoring/production_insights.mdx +0 -0
  79. {judgeval-0.0.10 → judgeval-0.0.12}/docs/notebooks/create_dataset.ipynb +0 -0
  80. {judgeval-0.0.10 → judgeval-0.0.12}/docs/notebooks/demo.ipynb +0 -0
  81. {judgeval-0.0.10 → judgeval-0.0.12}/docs/notebooks/prompt_scorer.ipynb +0 -0
  82. {judgeval-0.0.10 → judgeval-0.0.12}/docs/notebooks/quickstart.ipynb +0 -0
  83. {judgeval-0.0.10 → judgeval-0.0.12}/docs/quickstart.mdx +0 -0
  84. {judgeval-0.0.10 → judgeval-0.0.12}/docs/snippets/snippet-intro.mdx +0 -0
  85. {judgeval-0.0.10 → judgeval-0.0.12}/pytest.ini +0 -0
  86. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/ci_testing/ci_testing.py +0 -0
  87. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/ci_testing/travel_response.txt +0 -0
  88. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/custom_scorers/competitor_mentions.py +0 -0
  89. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/custom_scorers/text2sql.py +0 -0
  90. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/langchain_basic_rag/basic_agentic_rag.ipynb +0 -0
  91. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/langchain_basic_rag/tesla_q3.pdf +0 -0
  92. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/langchain_sales/example_product_price_id_mapping.json +0 -0
  93. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/langchain_sales/sales_agent_with_context.ipynb +0 -0
  94. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/langchain_sales/sample_product_catalog.txt +0 -0
  95. {judgeval-0.0.10 → judgeval-0.0.12}/src/demo/cookbooks/openai_travel_agent/populate_db.py +0 -0
  96. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/__init__.py +0 -0
  97. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/clients.py +0 -0
  98. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/common/__init__.py +0 -0
  99. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/common/exceptions.py +0 -0
  100. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/common/logger.py +0 -0
  101. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/common/utils.py +0 -0
  102. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/__init__.py +0 -0
  103. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/api_example.py +0 -0
  104. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/datasets/__init__.py +0 -0
  105. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/datasets/dataset.py +0 -0
  106. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/datasets/eval_dataset_client.py +0 -0
  107. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/datasets/ground_truth.py +0 -0
  108. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/datasets/utils.py +0 -0
  109. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/example.py +0 -0
  110. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/result.py +0 -0
  111. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/data/scorer_data.py +0 -0
  112. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/judges/__init__.py +0 -0
  113. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/judges/base_judge.py +0 -0
  114. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/judges/litellm_judge.py +0 -0
  115. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/judges/mixture_of_judges.py +0 -0
  116. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/judges/together_judge.py +0 -0
  117. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/run_evaluation.py +0 -0
  118. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/__init__.py +0 -0
  119. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/api_scorer.py +0 -0
  120. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/base_scorer.py +0 -0
  121. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/exceptions.py +0 -0
  122. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/__init__.py +0 -0
  123. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/__init__.py +0 -0
  124. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/answer_correctness.py +0 -0
  125. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/answer_relevancy.py +0 -0
  126. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/contextual_precision.py +0 -0
  127. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/contextual_recall.py +0 -0
  128. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/contextual_relevancy.py +0 -0
  129. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/faithfulness.py +0 -0
  130. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/hallucination.py +0 -0
  131. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/json_correctness.py +0 -0
  132. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/summarization.py +0 -0
  133. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/api_scorers/tool_correctness.py +0 -0
  134. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/classifiers/__init__.py +0 -0
  135. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/classifiers/text2sql/__init__.py +0 -0
  136. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/classifiers/text2sql/text2sql_scorer.py +0 -0
  137. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/__init__.py +0 -0
  138. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/answer_correctness/__init__.py +0 -0
  139. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/answer_correctness/answer_correctness_scorer.py +0 -0
  140. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/answer_correctness/prompts.py +0 -0
  141. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/answer_relevancy/__init__.py +0 -0
  142. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/answer_relevancy/answer_relevancy_scorer.py +0 -0
  143. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/answer_relevancy/prompts.py +0 -0
  144. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_precision/__init__.py +0 -0
  145. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_precision/contextual_precision_scorer.py +0 -0
  146. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_precision/prompts.py +0 -0
  147. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_recall/__init__.py +0 -0
  148. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_recall/contextual_recall_scorer.py +0 -0
  149. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_recall/prompts.py +0 -0
  150. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_relevancy/__init__.py +0 -0
  151. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_relevancy/contextual_relevancy_scorer.py +0 -0
  152. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/contextual_relevancy/prompts.py +0 -0
  153. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/faithfulness/__init__.py +0 -0
  154. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/hallucination/__init__.py +0 -0
  155. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/hallucination/hallucination_scorer.py +0 -0
  156. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/hallucination/prompts.py +0 -0
  157. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/json_correctness/__init__.py +0 -0
  158. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/json_correctness/json_correctness_scorer.py +0 -0
  159. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/summarization/__init__.py +0 -0
  160. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/summarization/prompts.py +0 -0
  161. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/summarization/summarization_scorer.py +0 -0
  162. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/tool_correctness/__init__.py +0 -0
  163. {judgeval-0.0.10 → judgeval-0.0.12}/src/judgeval/scorers/judgeval_scorers/local_implementations/tool_correctness/tool_correctness_scorer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: judgeval
3
- Version: 0.0.10
3
+ Version: 0.0.12
4
4
  Summary: Judgeval Package
5
5
  Project-URL: Homepage, https://github.com/JudgmentLabs/judgeval
6
6
  Project-URL: Issues, https://github.com/JudgmentLabs/judgeval/issues
@@ -12,12 +12,10 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.11
13
13
  Requires-Dist: anthropic
14
14
  Requires-Dist: fastapi
15
- Requires-Dist: langfuse==2.50.3
16
15
  Requires-Dist: litellm
17
16
  Requires-Dist: nest-asyncio
18
17
  Requires-Dist: openai
19
18
  Requires-Dist: pandas
20
- Requires-Dist: patronus
21
19
  Requires-Dist: pika
22
20
  Requires-Dist: python-dotenv==1.0.1
23
21
  Requires-Dist: requests
@@ -25,11 +23,14 @@ Requires-Dist: supabase
25
23
  Requires-Dist: together
26
24
  Requires-Dist: uvicorn
27
25
  Provides-Extra: dev
26
+ Requires-Dist: langfuse==2.50.3; extra == 'dev'
27
+ Requires-Dist: patronus; extra == 'dev'
28
28
  Requires-Dist: pytest-asyncio>=0.25.0; extra == 'dev'
29
29
  Requires-Dist: pytest-mock>=3.14.0; extra == 'dev'
30
30
  Requires-Dist: pytest>=8.3.4; extra == 'dev'
31
+ Requires-Dist: tavily-python; extra == 'dev'
31
32
  Description-Content-Type: text/markdown
32
33
 
33
34
  # judgeval
34
35
 
35
- Judgeval is a open-source evaluation framework for multi-agent LLM workflows, for both real-time and offline evaluations.
36
+ Judgeval is an open-source evaluation framework for multi-agent LLM workflows, for both real-time and offline evaluations.
@@ -4,7 +4,6 @@ verify_ssl = true
4
4
  name = "pypi"
5
5
 
6
6
  [packages]
7
- langfuse = "==2.50.3"
8
7
  litellm = "*"
9
8
  python-dotenv = "==1.0.1"
10
9
  fastapi = "*"
@@ -15,15 +14,17 @@ pandas = "*"
15
14
  openai = "*"
16
15
  together = "*"
17
16
  anthropic = "*"
18
- patronus = "*"
19
17
  asyncio = "*"
20
18
  nest-asyncio = "*"
21
- tavily-python = "*"
19
+ pika = "*"
22
20
 
23
21
  [dev-packages]
24
22
  pytest = "*"
25
23
  pytest-asyncio = "*"
26
24
  pytest-mock = "*"
25
+ tavily-python = "*"
26
+ patronus = "*"
27
+ langfuse = "==2.50.3"
27
28
 
28
29
  [requires]
29
30
  python_version = "3.11"