opik-optimizer 0.7.2__py3-none-any.whl → 0.7.4__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.
@@ -1,8 +1,8 @@
1
1
  import random
2
- from typing import Any, Dict, List, Tuple, Union, Optional, Callable, Literal
3
- import openai
2
+ from typing import Any, Dict, List, Tuple, Union, Optional, Literal
4
3
  import opik
5
4
  import optuna
5
+ import optuna.samplers
6
6
  import logging
7
7
  import json
8
8
 
@@ -14,18 +14,18 @@ from opik_optimizer import base_optimizer
14
14
 
15
15
  from . import prompt_parameter
16
16
  from . import prompt_templates
17
- from .._throttle import RateLimiter, rate_limited
17
+ from .. import _throttle
18
18
  from .. import optimization_result, task_evaluator
19
19
 
20
20
  import litellm
21
21
 
22
22
  from opik.evaluation.models.litellm import opik_monitor as opik_litellm_monitor
23
23
 
24
- limiter = RateLimiter(max_calls_per_second=15)
24
+ _limiter = _throttle.get_rate_limiter_for_current_opik_installation()
25
25
 
26
26
  logger = logging.getLogger(__name__)
27
27
 
28
- @rate_limited(limiter)
28
+ @_throttle.rate_limited(_limiter)
29
29
  def _call_model(model, messages, seed, model_kwargs):
30
30
  model_kwargs = opik_litellm_monitor.try_add_opik_monitoring_to_params(model_kwargs)
31
31
 
@@ -59,7 +59,6 @@ class FewShotBayesianOptimizer(base_optimizer.BaseOptimizer):
59
59
  self.n_threads = n_threads
60
60
  self.n_initial_prompts = n_initial_prompts
61
61
  self.n_iterations = n_iterations
62
-
63
62
  self._opik_client = opik.Opik()
64
63
  logger.debug(f"Initialized FewShotBayesianOptimizer with model: {model}")
65
64
 
@@ -240,7 +239,8 @@ class FewShotBayesianOptimizer(base_optimizer.BaseOptimizer):
240
239
  except Exception as e:
241
240
  logger.warning(f"Could not configure Optuna logging within optimizer: {e}")
242
241
 
243
- study = optuna.create_study(direction="maximize")
242
+ sampler = optuna.samplers.TPESampler(seed=self.seed)
243
+ study = optuna.create_study(direction="maximize", sampler=sampler)
244
244
  study.optimize(optimization_objective, n_trials=n_trials)
245
245
  logger.info("Optuna study finished.")
246
246
 
@@ -16,6 +16,7 @@ from opik_optimizer import task_evaluator
16
16
  from opik.api_objects import opik_client
17
17
  from opik.evaluation.models.litellm import opik_monitor as opik_litellm_monitor
18
18
  from opik.environment import get_tqdm_for_current_environment
19
+ from . import _throttle
19
20
 
20
21
  tqdm = get_tqdm_for_current_environment()
21
22
 
@@ -26,6 +27,7 @@ litellm.cache = Cache(type="disk", disk_cache_dir=disk_cache_dir)
26
27
  # Set up logging
27
28
  logger = logging.getLogger(__name__) # Gets logger configured by setup_logging
28
29
 
30
+ _rate_limiter = _throttle.get_rate_limiter_for_current_opik_installation()
29
31
 
30
32
  class MetaPromptOptimizer(BaseOptimizer):
31
33
  """Optimizer that uses meta-prompting to improve prompts based on examples and performance."""
@@ -176,6 +178,7 @@ class MetaPromptOptimizer(BaseOptimizer):
176
178
  optimization_id=optimization_id,
177
179
  )
178
180
 
181
+ @_throttle.rate_limited(_rate_limiter)
179
182
  def _call_model(
180
183
  self,
181
184
  prompt: str,
@@ -22,11 +22,11 @@ from dspy.dsp.utils.settings import settings
22
22
  from dspy.utils.callback import BaseCallback, with_callbacks
23
23
  from dspy.clients.base_lm import BaseLM
24
24
 
25
- from .._throttle import RateLimiter, rate_limited
25
+ from .._throttle import RateLimiter, rate_limited, get_rate_limiter_for_current_opik_installation
26
26
 
27
27
  logger = logging.getLogger(__name__)
28
28
  # Limit how fast an LLM can be called:
29
- limiter = RateLimiter(max_calls_per_second=15)
29
+ limiter = get_rate_limiter_for_current_opik_installation()
30
30
 
31
31
  class LM(BaseLM):
32
32
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opik_optimizer
3
- Version: 0.7.2
3
+ Version: 0.7.4
4
4
  Summary: Agent optimization with Opik
5
5
  Home-page: https://github.com/comet-ml/opik
6
6
  Author: Comet ML
@@ -21,6 +21,8 @@ Requires-Dist: optuna
21
21
  Requires-Dist: pydantic
22
22
  Requires-Dist: pandas
23
23
  Requires-Dist: hf_xet
24
+ Requires-Dist: pyrate-limiter
25
+ Requires-Dist: deap>=1.4.3
24
26
  Provides-Extra: dev
25
27
  Requires-Dist: adalflow; extra == "dev"
26
28
  Requires-Dist: pytest; extra == "dev"
@@ -72,7 +74,7 @@ from your LLMs. You can use a variety of algorithms, including:
72
74
 
73
75
  3. Install the package:
74
76
  ```bash
75
- pip install git+https://github.com/comet-ml/opik#subdirectory=sdks/opik_optimizer
77
+ pip install opik-optimizer
76
78
  ```
77
79
 
78
80
  You'll need:
@@ -94,11 +96,10 @@ You can see how to use those below:
94
96
 
95
97
  ```python
96
98
  from opik.evaluation.metrics import LevenshteinRatio
97
- from opik_optimizer.few_shot_bayesian_optimizer import FewShotBayesianOptimizer
99
+ from opik_optimizer import FewShotBayesianOptimizer
98
100
  from opik_optimizer.demo import get_or_create_dataset
99
101
 
100
102
  from opik_optimizer import (
101
- OptimizationConfig,
102
103
  MetricConfig,
103
104
  TaskConfig,
104
105
  from_dataset_field,
@@ -111,40 +112,41 @@ hot_pot_dataset = get_or_create_dataset("hotpot-300")
111
112
  prompt_instruction = """
112
113
  Answer the question.
113
114
  """
114
-
115
- initial_prompt_no_examples = [
116
- {"role": "system", "content": prompt_instruction},
117
- {"role": "user", "content": "{{question}}"},
118
- ]
115
+ project_name = "optimize-few-shot-bayesian-hotpot"
119
116
 
120
117
  optimizer = FewShotBayesianOptimizer(
121
118
  model="gpt-4o-mini",
122
- project_name="optimize-few-shot-bayesian-hotpot",
119
+ project_name=project_name,
123
120
  min_examples=3,
124
121
  max_examples=8,
125
122
  n_threads=16,
126
123
  seed=42,
127
124
  )
128
125
 
129
- optimization_config = OptimizationConfig(
126
+ metric_config = MetricConfig(
127
+ metric=LevenshteinRatio(project_name=project_name),
128
+ inputs={
129
+ "output": from_llm_response_text(),
130
+ "reference": from_dataset_field(name="answer"),
131
+ },
132
+ )
133
+
134
+ task_config = TaskConfig(
135
+ instruction_prompt=prompt_instruction,
136
+ input_dataset_fields=["question"],
137
+ output_dataset_field="answer",
138
+ use_chat_prompt=True,
139
+ )
140
+
141
+ result = optimizer.optimize_prompt(
130
142
  dataset=hot_pot_dataset,
131
- objective=MetricConfig(
132
- metric=LevenshteinRatio(),
133
- inputs={
134
- "output": from_llm_response_text(),
135
- "reference": from_dataset_field(name="answer"),
136
- },
137
- ),
138
- task=TaskConfig(
139
- instruction_prompt=prompt_instruction,
140
- input_dataset_fields=["question"],
141
- output_dataset_field="answer",
142
- use_chat_prompt=True,
143
- ),
143
+ metric_config=metric_config,
144
+ task_config=task_config,
145
+ n_trials=10,
146
+ n_samples=150,
144
147
  )
145
148
 
146
- result = optimizer.optimize_prompt(optimization_config, n_trials=10)
147
- print(result)
149
+ result.display()
148
150
  ```
149
151
 
150
152
  More examples can be found in the `scripts` folder.
@@ -152,7 +154,7 @@ More examples can be found in the `scripts` folder.
152
154
  ## Installation
153
155
 
154
156
  ```bash
155
- pip install git+https://github.com/comet-ml/opik#subdirectory=sdks/opik_optimizer
157
+ pip install opik-optimizer
156
158
  ```
157
159
 
158
160
  ## Development
@@ -167,6 +169,6 @@ pip install -e .
167
169
 
168
170
  ## Requirements
169
171
 
170
- - Python 3.10+
172
+ - Python 3.10+ < 3.13
171
173
  - Opik API key
172
174
  - OpenAI API key (or other LLM provider)
@@ -1,30 +1,33 @@
1
- opik_optimizer/__init__.py,sha256=x5QSFom-TtmmUNzqyYIJY2AujMJXbyhXs2oz44-4Af0,1121
2
- opik_optimizer/_throttle.py,sha256=7vcHoISqXbysymwdb1LPAFJB28tOmih9zzZQWajpH0k,1494
3
- opik_optimizer/base_optimizer.py,sha256=EEFx9ekIV5IjLaf18e6zFzxBO44uxkeHelGmC70GPpo,8260
1
+ opik_optimizer/__init__.py,sha256=Tbny_W_oUWKdf_33fM-nNTBqvQvarLfB8hMNd_goXT0,1245
2
+ opik_optimizer/_throttle.py,sha256=ztub8qlwz4u0GVA2TIoLig0D1Cs0hJ7_o_SnT_C7Nmk,1360
3
+ opik_optimizer/base_optimizer.py,sha256=f4gNX9j3Z3TGst8F0gm1nMHHpHKAlChmeCVAcTdTIR4,4883
4
4
  opik_optimizer/cache_config.py,sha256=EzF4RAzxhSG8vtMJANdiUpNHQ9HzL2CrCXp0iik0f4A,580
5
5
  opik_optimizer/logging_config.py,sha256=ELevhxtflYinTo-jVvyQYZbXG7FgAe_b5dPa9y5uLWw,2774
6
- opik_optimizer/meta_prompt_optimizer.py,sha256=tRxA4YD2AWvKl7fJNg6Oxxay8iyqvdJ8zXy59-qKyUM,46802
6
+ opik_optimizer/meta_prompt_optimizer.py,sha256=AoFskD01Mu9VbH-Ys4CUoqZk3Gn3iFrOzF2yh-Hw7GM,46944
7
7
  opik_optimizer/optimization_result.py,sha256=9zdDV2MXeLYk7U8OqgMmSU-DdPV6qgYQWS2rtkO6Dzw,8693
8
8
  opik_optimizer/task_evaluator.py,sha256=MafDMaLeW0_yGPrumLvYF0HzQUKrnpAlM_0N_TPG8tw,3695
9
9
  opik_optimizer/utils.py,sha256=HivUsNzbt7BcuZeEvikdER1DaTPUFLJrpaVQ8raZYD8,3637
10
+ opik_optimizer/data/hotpot-500.json,sha256=ToYC9l3lebrOoeWFhELgp63XVFYWcS0HODlQO9g5V3c,101861
10
11
  opik_optimizer/demo/__init__.py,sha256=KSpFYhzN7fTmLEsIaciRHwxcJDeAiX5NDmYLdPsfpT8,150
11
12
  opik_optimizer/demo/cache.py,sha256=5WqK8rSiijzU6s4VHIjLuL1LR5i1yHtY-x5FZTduSus,3669
12
- opik_optimizer/demo/datasets.py,sha256=hD6JZAQotEDQb4nK7dbnurquILqQsrFRF7nUwon_iXE,22930
13
+ opik_optimizer/demo/datasets.py,sha256=-qmdeFk5X3CIcg9QX7nbGUAVo2khh0XGbmkHh8jgvSY,22633
14
+ opik_optimizer/evolutionary_optimizer/__init__.py,sha256=OQ2ART5g-7EVGOISvTGY-AbmEyyDFEJJCsmJBzGJIpw,57
15
+ opik_optimizer/evolutionary_optimizer/evolutionary_optimizer.py,sha256=652TAHa4U4C7_0_wBulDmizfVijqV9E3ngR38nLcpt4,76568
13
16
  opik_optimizer/few_shot_bayesian_optimizer/__init__.py,sha256=VuH7FOROyGcjMPryejtZC-5Y0QHlVTFLTGUDgNqRAFw,113
14
- opik_optimizer/few_shot_bayesian_optimizer/few_shot_bayesian_optimizer.py,sha256=NL7cDnD7Mg7_fGK1iDOXJ9PrV-M6lCFmZttioMRKbeQ,15150
17
+ opik_optimizer/few_shot_bayesian_optimizer/few_shot_bayesian_optimizer.py,sha256=HIoIVDW9v0p2Y9B736DncXjJPPYoDfphgeSqiB4MIVM,15235
15
18
  opik_optimizer/few_shot_bayesian_optimizer/prompt_parameter.py,sha256=EDsSIFAUOfiZKWLrOAaBDB7Exk7cmIs4ccI95kVa7JY,3118
16
19
  opik_optimizer/few_shot_bayesian_optimizer/prompt_templates.py,sha256=HmvD-UeT3aKiiet5cUtULXe6iFPEOo6hxyDE0pH2LnQ,2424
17
20
  opik_optimizer/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
21
  opik_optimizer/mipro_optimizer/__init__.py,sha256=CF9TVXjOxTobDO1kAS8CD4eyLVzEozxjfgoKwIO6ZpU,44
19
- opik_optimizer/mipro_optimizer/_lm.py,sha256=UwSEcTLVIt_a-coQbLACNnm-RTMJIzLEyPS4qLfUosg,16316
22
+ opik_optimizer/mipro_optimizer/_lm.py,sha256=bcTy2Y5HjSaFQOATIpUaA86eIp3vKHaMuDI2_RvN2ww,16376
20
23
  opik_optimizer/mipro_optimizer/_mipro_optimizer_v2.py,sha256=r8FKaqvtZq_R7FwGnXqp1foCLk7M7r6M-CMvWbJtP5c,39512
21
24
  opik_optimizer/mipro_optimizer/mipro_optimizer.py,sha256=5QS7OKqOMKe4CD_8W2FMD_qJNmulkvxmOT_YtJ3BllM,14755
22
25
  opik_optimizer/mipro_optimizer/utils.py,sha256=4et1JA1QInX3h6Is-_RqzliFwJqkm6tlA0X5CryG60I,3142
23
26
  opik_optimizer/optimization_config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
27
  opik_optimizer/optimization_config/configs.py,sha256=MYL9H2UAqeyGBlBGWbOZ-6Snto4ZMuXnypgvVuUSW1Y,1132
25
28
  opik_optimizer/optimization_config/mappers.py,sha256=RXgTMxPzTQ1AHGke6Zca6rTcfCI7IkCKhQYciaEGSAo,1698
26
- opik_optimizer-0.7.2.dist-info/licenses/LICENSE,sha256=dTRSwwCHdWeSjzodvnivYqcwi8x3Qfr21yv65QUWWBE,1062
27
- opik_optimizer-0.7.2.dist-info/METADATA,sha256=KBdfx16FiT5icWE96bkgeFuhrM3NyMX2bF9Ooeo36Ag,4047
28
- opik_optimizer-0.7.2.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
29
- opik_optimizer-0.7.2.dist-info/top_level.txt,sha256=ondOlpq6_yFckqpxoAHSfzZS2N-JfgmA-QQhOJfz7m0,15
30
- opik_optimizer-0.7.2.dist-info/RECORD,,
29
+ opik_optimizer-0.7.4.dist-info/licenses/LICENSE,sha256=dTRSwwCHdWeSjzodvnivYqcwi8x3Qfr21yv65QUWWBE,1062
30
+ opik_optimizer-0.7.4.dist-info/METADATA,sha256=f6Sdl2YLvbLhLxn51e13YaejNITxjMd2HgrCvMYtcVY,3853
31
+ opik_optimizer-0.7.4.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
32
+ opik_optimizer-0.7.4.dist-info/top_level.txt,sha256=ondOlpq6_yFckqpxoAHSfzZS2N-JfgmA-QQhOJfz7m0,15
33
+ opik_optimizer-0.7.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5