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.
- opik_optimizer/__init__.py +2 -0
- opik_optimizer/_throttle.py +30 -30
- opik_optimizer/base_optimizer.py +1 -80
- opik_optimizer/data/hotpot-500.json +2502 -0
- opik_optimizer/demo/datasets.py +15 -32
- opik_optimizer/evolutionary_optimizer/__init__.py +1 -0
- opik_optimizer/evolutionary_optimizer/evolutionary_optimizer.py +1447 -0
- opik_optimizer/few_shot_bayesian_optimizer/few_shot_bayesian_optimizer.py +7 -7
- opik_optimizer/meta_prompt_optimizer.py +3 -0
- opik_optimizer/mipro_optimizer/_lm.py +2 -2
- {opik_optimizer-0.7.2.dist-info → opik_optimizer-0.7.4.dist-info}/METADATA +30 -28
- {opik_optimizer-0.7.2.dist-info → opik_optimizer-0.7.4.dist-info}/RECORD +15 -12
- {opik_optimizer-0.7.2.dist-info → opik_optimizer-0.7.4.dist-info}/WHEEL +1 -1
- {opik_optimizer-0.7.2.dist-info → opik_optimizer-0.7.4.dist-info}/licenses/LICENSE +0 -0
- {opik_optimizer-0.7.2.dist-info → opik_optimizer-0.7.4.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,8 @@
|
|
1
1
|
import random
|
2
|
-
from typing import Any, Dict, List, Tuple, Union, Optional,
|
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 ..
|
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
|
-
|
24
|
+
_limiter = _throttle.get_rate_limiter_for_current_opik_installation()
|
25
25
|
|
26
26
|
logger = logging.getLogger(__name__)
|
27
27
|
|
28
|
-
@rate_limited(
|
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
|
-
|
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 =
|
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.
|
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
|
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
|
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=
|
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
|
-
|
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
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
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
|
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
|
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=
|
2
|
-
opik_optimizer/_throttle.py,sha256=
|
3
|
-
opik_optimizer/base_optimizer.py,sha256=
|
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=
|
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
|
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=
|
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=
|
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.
|
27
|
-
opik_optimizer-0.7.
|
28
|
-
opik_optimizer-0.7.
|
29
|
-
opik_optimizer-0.7.
|
30
|
-
opik_optimizer-0.7.
|
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,,
|
File without changes
|
File without changes
|