opik-optimizer 1.1.0__py3-none-any.whl → 2.0.0__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.
Files changed (27) hide show
  1. opik_optimizer/__init__.py +2 -0
  2. opik_optimizer/base_optimizer.py +376 -19
  3. opik_optimizer/evolutionary_optimizer/evaluation_ops.py +80 -17
  4. opik_optimizer/evolutionary_optimizer/evolutionary_optimizer.py +179 -39
  5. opik_optimizer/evolutionary_optimizer/llm_support.py +3 -1
  6. opik_optimizer/evolutionary_optimizer/mcp.py +249 -0
  7. opik_optimizer/evolutionary_optimizer/mutation_ops.py +17 -3
  8. opik_optimizer/evolutionary_optimizer/population_ops.py +5 -0
  9. opik_optimizer/evolutionary_optimizer/prompts.py +47 -0
  10. opik_optimizer/evolutionary_optimizer/reporting.py +12 -0
  11. opik_optimizer/few_shot_bayesian_optimizer/few_shot_bayesian_optimizer.py +65 -59
  12. opik_optimizer/gepa_optimizer/adapter.py +5 -3
  13. opik_optimizer/gepa_optimizer/gepa_optimizer.py +163 -66
  14. opik_optimizer/mcp_utils/mcp_workflow.py +57 -3
  15. opik_optimizer/meta_prompt_optimizer/meta_prompt_optimizer.py +75 -69
  16. opik_optimizer/mipro_optimizer/_lm.py +10 -3
  17. opik_optimizer/mipro_optimizer/_mipro_optimizer_v2.py +1 -1
  18. opik_optimizer/mipro_optimizer/mipro_optimizer.py +96 -21
  19. opik_optimizer/optimizable_agent.py +5 -0
  20. opik_optimizer/optimization_result.py +1 -0
  21. opik_optimizer/utils/core.py +56 -14
  22. {opik_optimizer-1.1.0.dist-info → opik_optimizer-2.0.0.dist-info}/METADATA +96 -9
  23. {opik_optimizer-1.1.0.dist-info → opik_optimizer-2.0.0.dist-info}/RECORD +27 -26
  24. /opik_optimizer/{colbert.py → utils/colbert.py} +0 -0
  25. {opik_optimizer-1.1.0.dist-info → opik_optimizer-2.0.0.dist-info}/WHEEL +0 -0
  26. {opik_optimizer-1.1.0.dist-info → opik_optimizer-2.0.0.dist-info}/licenses/LICENSE +0 -0
  27. {opik_optimizer-1.1.0.dist-info → opik_optimizer-2.0.0.dist-info}/top_level.txt +0 -0
@@ -8,6 +8,7 @@ from typing import (
8
8
  )
9
9
  from collections.abc import Callable
10
10
 
11
+ import ast
11
12
  import inspect
12
13
  import base64
13
14
  import json
@@ -23,13 +24,15 @@ import opik
23
24
  from opik.api_objects.opik_client import Opik
24
25
  from opik.api_objects.optimization import Optimization
25
26
 
26
- ALLOWED_URL_CHARACTERS: Final[str] = ":/&?="
27
- logger = logging.getLogger(__name__)
27
+ from .colbert import ColBERTv2
28
28
 
29
29
  if TYPE_CHECKING:
30
30
  from opik_optimizer.optimizable_agent import OptimizableAgent
31
31
  from opik_optimizer.optimization_config.chat_prompt import ChatPrompt
32
32
 
33
+ ALLOWED_URL_CHARACTERS: Final[str] = ":/&?="
34
+ logger = logging.getLogger(__name__)
35
+
33
36
 
34
37
  class OptimizationContextManager:
35
38
  """
@@ -202,7 +205,7 @@ def json_to_dict(json_str: str) -> Any:
202
205
 
203
206
  try:
204
207
  return json.loads(cleaned_json_string)
205
- except json.JSONDecodeError:
208
+ except json.JSONDecodeError as json_error:
206
209
  if cleaned_json_string.startswith("```json"):
207
210
  cleaned_json_string = cleaned_json_string[7:]
208
211
  if cleaned_json_string.endswith("```"):
@@ -214,10 +217,44 @@ def json_to_dict(json_str: str) -> Any:
214
217
 
215
218
  try:
216
219
  return json.loads(cleaned_json_string)
217
- except json.JSONDecodeError as e:
218
- print(f"Failed to parse JSON string: {json_str}")
219
- logger.debug(f"Failed to parse JSON string: {json_str}")
220
- raise e
220
+ except json.JSONDecodeError:
221
+ try:
222
+ literal_result = ast.literal_eval(cleaned_json_string)
223
+ except (ValueError, SyntaxError):
224
+ logger.debug("Failed to parse JSON string: %s", json_str)
225
+ raise json_error
226
+
227
+ normalized = _convert_literals_to_json_compatible(literal_result)
228
+
229
+ try:
230
+ return json.loads(json.dumps(normalized))
231
+ except (TypeError, ValueError) as serialization_error:
232
+ logger.debug(
233
+ "Failed to serialise literal-evaluated payload %r: %s",
234
+ literal_result,
235
+ serialization_error,
236
+ )
237
+ raise json_error
238
+
239
+
240
+ def _convert_literals_to_json_compatible(value: Any) -> Any:
241
+ """Convert Python literals to JSON-compatible structures."""
242
+ if isinstance(value, dict):
243
+ return {
244
+ key: _convert_literals_to_json_compatible(val) for key, val in value.items()
245
+ }
246
+ if isinstance(value, list):
247
+ return [_convert_literals_to_json_compatible(item) for item in value]
248
+ if isinstance(value, tuple):
249
+ return [_convert_literals_to_json_compatible(item) for item in value]
250
+ if isinstance(value, set):
251
+ return [
252
+ _convert_literals_to_json_compatible(item)
253
+ for item in sorted(value, key=repr)
254
+ ]
255
+ if isinstance(value, (str, int, float, bool)) or value is None:
256
+ return value
257
+ return str(value)
221
258
 
222
259
 
223
260
  def optimization_context(
@@ -273,9 +310,15 @@ def get_optimization_run_url_by_id(
273
310
  return urllib.parse.urljoin(ensure_ending_slash(url_override), run_path)
274
311
 
275
312
 
276
- def create_litellm_agent_class(prompt: "ChatPrompt") -> type["OptimizableAgent"]:
313
+ def create_litellm_agent_class(
314
+ prompt: "ChatPrompt", optimizer_ref: Any = None
315
+ ) -> type["OptimizableAgent"]:
277
316
  """
278
317
  Create a LiteLLMAgent from a chat prompt.
318
+
319
+ Args:
320
+ prompt: The chat prompt to use
321
+ optimizer_ref: Optional optimizer instance to attach to the agent
279
322
  """
280
323
  from opik_optimizer.optimizable_agent import OptimizableAgent
281
324
 
@@ -285,6 +328,7 @@ def create_litellm_agent_class(prompt: "ChatPrompt") -> type["OptimizableAgent"]
285
328
  model = prompt.model
286
329
  model_kwargs = prompt.model_kwargs
287
330
  project_name = prompt.project_name
331
+ optimizer = optimizer_ref
288
332
 
289
333
  def invoke(
290
334
  self, messages: list[dict[str, str]], seed: int | None = None
@@ -299,6 +343,7 @@ def create_litellm_agent_class(prompt: "ChatPrompt") -> type["OptimizableAgent"]
299
343
  model = prompt.model
300
344
  model_kwargs = prompt.model_kwargs
301
345
  project_name = prompt.project_name
346
+ optimizer = optimizer_ref
302
347
 
303
348
  return LiteLLMAgent
304
349
 
@@ -353,14 +398,14 @@ def python_type_to_json_type(python_type: type) -> str:
353
398
  return "string" # default fallback
354
399
 
355
400
 
356
- def search_wikipedia(query: str, use_api: bool = False) -> list[str]:
401
+ def search_wikipedia(query: str, use_api: bool | None = False) -> list[str]:
357
402
  """
358
403
  This agent is used to search wikipedia. It can retrieve additional details
359
404
  about a topic.
360
405
 
361
406
  Args:
362
407
  query: The search query string
363
- use_api: If True, directly use Wikipedia API instead of ColBERTv2.
408
+ use_api: (Optional) If True, directly use Wikipedia API instead of ColBERTv2.
364
409
  If False (default), try ColBERTv2 first with API fallback.
365
410
  """
366
411
  if use_api:
@@ -372,16 +417,13 @@ def search_wikipedia(query: str, use_api: bool = False) -> list[str]:
372
417
  return [f"Wikipedia search unavailable. Query was: {query}"]
373
418
 
374
419
  # Default behavior: Try ColBERTv2 first with API fallback
375
- from .colbert import ColBERTv2
376
-
377
420
  # Try ColBERTv2 first with a short timeout
378
421
  try:
379
422
  colbert = ColBERTv2(url="http://20.102.90.50:2017/wiki17_abstracts")
380
423
  # Use a shorter timeout by modifying the max_retries parameter
381
424
  results = colbert(query, k=3, max_retries=1)
382
425
  return [str(item.text) for item in results if hasattr(item, "text")]
383
- except Exception as e:
384
- print(f"ColBERTv2 search failed: {e}")
426
+ except Exception:
385
427
  # Fallback to Wikipedia API
386
428
  try:
387
429
  return _search_wikipedia_api(query)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opik_optimizer
3
- Version: 1.1.0
3
+ Version: 2.0.0
4
4
  Summary: Agent optimization with Opik
5
5
  Home-page: https://github.com/comet-ml/opik
6
6
  Author: Comet ML
@@ -31,6 +31,7 @@ Requires-Dist: pytest; extra == "dev"
31
31
  Requires-Dist: pytest-cov; extra == "dev"
32
32
  Requires-Dist: langgraph; extra == "dev"
33
33
  Requires-Dist: gepa>=0.0.7; extra == "dev"
34
+ Requires-Dist: pre-commit; extra == "dev"
34
35
  Dynamic: author
35
36
  Dynamic: home-page
36
37
  Dynamic: license-file
@@ -43,13 +44,24 @@ Dynamic: requires-python
43
44
  [![Downloads](https://static.pepy.tech/badge/opik-optimizer)](https://pepy.tech/project/opik-optimizer)
44
45
  [![License](https://img.shields.io/github/license/comet-ml/opik)](https://github.com/comet-ml/opik/blob/main/LICENSE)
45
46
 
46
- The Opik Agent Optimizer refines your prompts to achieve better performance from your Large Language Models (LLMs). It supports a variety of optimization algorithms, including:
47
+ The Opik Agent Optimizer refines your prompts to achieve better performance from your Large Language Models (LLMs). It supports a variety of optimization algorithms, all with a **standardized API** for consistent usage and chaining:
47
48
 
48
- * EvolutionaryOptimizer
49
- * FewShotBayesianOptimizer
50
- * MetaPromptOptimizer
51
- * MiproOptimizer
52
- * GepaOptimizer
49
+ * **EvolutionaryOptimizer** - Uses genetic algorithms for prompt evolution
50
+ * **FewShotBayesianOptimizer** - Uses few-shot learning with Bayesian optimization
51
+ * **MetaPromptOptimizer** - Employs meta-prompting techniques for optimization
52
+ * **MiproOptimizer** - Implements MIPRO (Multi-Input Prompt Optimization) algorithm
53
+ * **GepaOptimizer** - Leverages GEPA (Genetic-Pareto) optimization approach
54
+
55
+ ## 🎯 Key Features
56
+
57
+ - **Standardized API**: All optimizers follow the same interface for `optimize_prompt()` and `optimize_mcp()` methods
58
+ - **Optimizer Chaining**: Results from one optimizer can be used as input for another
59
+ - **MCP Support**: Built-in support for Model Context Protocol tool calling
60
+ - **Consistent Results**: All optimizers return standardized `OptimizationResult` objects
61
+ - **Counter Tracking**: Built-in LLM and tool call counters for monitoring usage
62
+ - **Type Safety**: Full type hints and validation for robust development
63
+ - **Backward Compatibility**: All original parameters preserved through kwargs extraction
64
+ - **Deprecation Warnings**: Clear warnings for deprecated parameters with migration guidance
53
65
 
54
66
  Opik Optimizer is a component of the [Opik platform](https://github.com/comet-ml/opik), an open-source LLM evaluation platform by Comet.
55
67
  For more information about the broader Opik ecosystem, visit our [Website](https://www.comet.com/site/products/opik/) or [Documentation](https://www.comet.com/docs/opik/).
@@ -101,6 +113,40 @@ You'll typically need:
101
113
  * An [Opik Metric](https://www.comet.com/docs/opik/evaluation/metrics/overview/) (or a custom evaluation function).
102
114
  * A starting prompt (template string).
103
115
 
116
+ ## Standardized API
117
+
118
+ All optimizers follow the same interface, making it easy to switch between algorithms or chain them together:
119
+
120
+ ```python
121
+ # All optimizers have the same signature
122
+ def optimize_prompt(
123
+ self,
124
+ prompt: ChatPrompt,
125
+ dataset: Dataset,
126
+ metric: Callable,
127
+ experiment_config: dict | None = None,
128
+ n_samples: int | None = None,
129
+ auto_continue: bool = False,
130
+ agent_class: type[OptimizableAgent] | None = None,
131
+ **kwargs: Any,
132
+ ) -> OptimizationResult
133
+
134
+ # All optimizers return the same result type
135
+ result = optimizer.optimize_prompt(
136
+ prompt=prompt,
137
+ dataset=dataset,
138
+ metric=metric,
139
+ n_samples=100
140
+ )
141
+
142
+ # Results can be chained
143
+ chained_result = another_optimizer.optimize_prompt(
144
+ prompt=ChatPrompt.from_result(result), # Use previous result
145
+ dataset=dataset,
146
+ metric=metric
147
+ )
148
+ ```
149
+
104
150
  ## Example
105
151
 
106
152
  Here's a brief example of how to use the `FewShotBayesianOptimizer`. We'll use a sample dataset provided by Opik.
@@ -146,8 +192,7 @@ result = optimizer.optimize_prompt(
146
192
  prompt=prompt,
147
193
  dataset=hot_pot_dataset,
148
194
  metric=levenshtein_ratio,
149
- n_trials=10, # Number of optimization trials
150
- n_samples=150, # Number of dataset samples for evaluation per trial
195
+ n_samples=150 # Number of dataset samples for evaluation per trial
151
196
  )
152
197
 
153
198
  # Display the best prompt and its score
@@ -155,6 +200,8 @@ result.display()
155
200
  ```
156
201
  The `result` object contains the optimized prompt, evaluation scores, and other details from the optimization process. If `project_name` is provided and Opik is configured, results will also be logged to your Comet workspace.
157
202
 
203
+ The optimizer automatically logs run metadata—including optimizer version, tool schemas, prompt messages, and the models used—so you get consistent experiment context without any additional arguments. If you still need custom tags (for example identifying the dataset or task), pass an `experiment_config` dictionary and your fields will be merged on top of the defaults.
204
+
158
205
  ## Tool Optimization (MCP) - Beta
159
206
 
160
207
  The Opik Agent Optimizer supports **true tool optimization** for MCP (Model Context Protocol) tools. This feature is currently in **Beta** and supported by the **MetaPrompt Optimizer**.
@@ -215,6 +262,46 @@ optimizer = MetaPromptOptimizer(model="gpt-4")
215
262
 
216
263
  For comprehensive documentation on tool optimization, see the [Tool Optimization Guide](https://www.comet.com/docs/opik/agent_optimization/algorithms/tool_optimization).
217
264
 
265
+ ## Deprecation Warnings
266
+
267
+ The following parameters are deprecated and will be removed in future versions:
268
+
269
+ ### Constructor Parameters
270
+
271
+ - **`project_name`** in optimizer constructors: Set `project_name` in the `ChatPrompt` instead
272
+ - **`num_threads`** in optimizer constructors: Use `n_threads` instead
273
+
274
+ ### Example Migration
275
+
276
+ ```python
277
+ # ❌ Deprecated
278
+ optimizer = FewShotBayesianOptimizer(
279
+ model="gpt-4o-mini",
280
+ project_name="my-project", # Deprecated
281
+ num_threads=16, # Deprecated
282
+ )
283
+
284
+ # ✅ Correct
285
+ optimizer = FewShotBayesianOptimizer(
286
+ model="gpt-4o-mini",
287
+ n_threads=16, # Use n_threads instead
288
+ )
289
+
290
+ prompt = ChatPrompt(
291
+ project_name="my-project", # Set here instead
292
+ messages=[...]
293
+ )
294
+ ```
295
+
296
+ ### Suppressing Deprecation Warnings
297
+
298
+ To suppress deprecation warnings during development:
299
+
300
+ ```python
301
+ import warnings
302
+ warnings.filterwarnings("ignore", category=DeprecationWarning)
303
+ ```
304
+
218
305
  ### MCP Integration (Beta)
219
306
 
220
307
  The optimizer includes utilities for MCP tool integration:
@@ -1,11 +1,10 @@
1
- opik_optimizer/__init__.py,sha256=RfqtLQDCKVsyU0KyBctTn7Sa-4Pz0IT_t5FgCc4qsP8,1168
1
+ opik_optimizer/__init__.py,sha256=bNNFoAJmORQ38vHPZsOb3m4Gb07-jjqPy-MbMIiTop8,1234
2
2
  opik_optimizer/_throttle.py,sha256=1JXIhYlo0IaqCgwmNB0Hnh9CYhYPkwRFdVGIcE7pVNg,1362
3
- opik_optimizer/base_optimizer.py,sha256=xljdM2UYEdcj1OHQuuIVMw6qzf_2s1FfWty-XG55DIw,6609
3
+ opik_optimizer/base_optimizer.py,sha256=QPGLOzdlniSCIGOPpsz6_1CrvC0NEXmVQqmRIOwIv7E,20021
4
4
  opik_optimizer/cache_config.py,sha256=Xd3NdUsL7bLQWoNe3pESqH4nHucU1iNTSGp-RqbwDog,599
5
- opik_optimizer/colbert.py,sha256=qSrzKUUGw7P92mLy4Ofug5pBGeTsHBLMJXlXSJSfKuo,8147
6
5
  opik_optimizer/logging_config.py,sha256=TmxX0C1P20amxoXuiNQvlENOjdSNfWwvL8jFy206VWM,3837
7
- opik_optimizer/optimizable_agent.py,sha256=lzC7LyLaeqZP8FI6zaDAfhgA6AtPuX-UYH1sH7PCqpw,6024
8
- opik_optimizer/optimization_result.py,sha256=BnrBwO1PAykqwSE7wPvntBKxlDMacdxPRYBDuILMLoM,8078
6
+ opik_optimizer/optimizable_agent.py,sha256=R0_BdwdHyZGWTw3oSvTg8FULDOYM8XaTiPNR3qV8DkQ,6344
7
+ opik_optimizer/optimization_result.py,sha256=cscPGDNvkh88xAKhlU-nqaws-wXcYdJ7uwlCcshicwo,8112
9
8
  opik_optimizer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
9
  opik_optimizer/reporting_utils.py,sha256=dcECFmzZ_J-DKoukMDEE_fm7X8sdQyl_ijTddvQtepE,8287
11
10
  opik_optimizer/task_evaluator.py,sha256=1hILYwJLtn7XpPX96JjubnlMasmudVTHMVK3pmd22bE,4312
@@ -29,45 +28,47 @@ opik_optimizer/demo/cache.py,sha256=CwjdmVjokVxmPXvgfOutZK8e0sV-PIUz3ou6ODXZBts,
29
28
  opik_optimizer/demo/datasets.py,sha256=idod4NYHw1IbxhA8c0XVFD_pGpMZagNGNZuEYDTbbMM,2357
30
29
  opik_optimizer/evolutionary_optimizer/__init__.py,sha256=bDa6FZR9Y_a5z337I4EtvaB69jB542P4dbruhYPHCEU,95
31
30
  opik_optimizer/evolutionary_optimizer/crossover_ops.py,sha256=7kMvAWOiEA0R5PQMRdnLqbS1uCmIDVzLppNSsPsIO7o,7740
32
- opik_optimizer/evolutionary_optimizer/evaluation_ops.py,sha256=5uqTnPA3_ohncmMaYE6HQXNrrskuLAECAYNU5cD5CKY,2517
33
- opik_optimizer/evolutionary_optimizer/evolutionary_optimizer.py,sha256=CQzIGcfxLjrxFVDOpR5EY0lOJ_d0fatf67Rqlva_yq0,40461
31
+ opik_optimizer/evolutionary_optimizer/evaluation_ops.py,sha256=euVbFgrG37zj2GfcjAPMvPtz-52QljFR76OfChYmsKY,4795
32
+ opik_optimizer/evolutionary_optimizer/evolutionary_optimizer.py,sha256=2gEny7Q1PMcwzaDOJ2GrXMKZAZThuhV9tGg92JhQ9lI,46260
34
33
  opik_optimizer/evolutionary_optimizer/helpers.py,sha256=yWYW5JyVbr2smDByc9yaHCYbUS6cw35RBI7lM3pT69A,607
35
- opik_optimizer/evolutionary_optimizer/llm_support.py,sha256=j0JnzDyUVp97rImu9UjBCHPY9N7-NytwG0QBzqD-iZI,5382
36
- opik_optimizer/evolutionary_optimizer/mutation_ops.py,sha256=AG-a_ASBt5M85W2I79rvpCnzVnFnTD_8gJH6sCTlkDk,11853
37
- opik_optimizer/evolutionary_optimizer/population_ops.py,sha256=dkQf9AkRWFtKFGbeMJHinPrjY9lOtYk18Wwmr9uGgdU,9816
38
- opik_optimizer/evolutionary_optimizer/prompts.py,sha256=m-hl1KyaBj2KA7nPlYZPLlutraNfvZnT_yeCe1t4iQk,14954
39
- opik_optimizer/evolutionary_optimizer/reporting.py,sha256=pLHz9-FvB9tyA3mx91f8mtuwB_LA1zWZMglrZcdXPU0,11803
34
+ opik_optimizer/evolutionary_optimizer/llm_support.py,sha256=JeghAOwT_nYyOjdUi-xEiDvG-dW0C87UBzGz_xMdHl8,5438
35
+ opik_optimizer/evolutionary_optimizer/mcp.py,sha256=QhRPsxbtZJKzhJouJOuNbrNGGjgY4JAMmo-UYiNa0WQ,7794
36
+ opik_optimizer/evolutionary_optimizer/mutation_ops.py,sha256=Jj4q297z054LSI0udZmeH_jXQMAxml2_qBoxSIfXNBs,12643
37
+ opik_optimizer/evolutionary_optimizer/population_ops.py,sha256=-33oN2aPTF_upJLYDVUTNm1c5bMzWy2krQ3alFCrJlM,10101
38
+ opik_optimizer/evolutionary_optimizer/prompts.py,sha256=am1nL8oqw3TOVVBDaDn5EoWkjxufEiMQ7E_54Uw8m3s,16204
39
+ opik_optimizer/evolutionary_optimizer/reporting.py,sha256=xzvHK2m0Kdf7hhrrdRxXbp-qt8d8j69nnSBIOzhLSms,12090
40
40
  opik_optimizer/evolutionary_optimizer/style_ops.py,sha256=XmGFS5s2Qr2DJMZVVsI_C6LqJ5zoyxpeWAtGmdg3TnA,3082
41
41
  opik_optimizer/few_shot_bayesian_optimizer/__init__.py,sha256=VuH7FOROyGcjMPryejtZC-5Y0QHlVTFLTGUDgNqRAFw,113
42
- opik_optimizer/few_shot_bayesian_optimizer/few_shot_bayesian_optimizer.py,sha256=iXf765o12084ME0uvpPtZ5ysserpNhU1c6o88XrsqEE,27611
42
+ opik_optimizer/few_shot_bayesian_optimizer/few_shot_bayesian_optimizer.py,sha256=fiCp7_aPpoEf8afBhFo98z1pl1Z50Rs0b-lS6Rij2Ns,27897
43
43
  opik_optimizer/few_shot_bayesian_optimizer/reporting.py,sha256=OMpLG4xsM6K7oQcP_nbnky47NklVsowNDlK6WliZM10,6311
44
44
  opik_optimizer/gepa_optimizer/__init__.py,sha256=XcPah5t4mop7UCFo69E9l45Mem49-itqkQT7_J1aWOA,71
45
- opik_optimizer/gepa_optimizer/adapter.py,sha256=UJ0F4MLxVQ-40LcjA5pibuIlS6yxM-SMZ25n0iLQcMk,5107
46
- opik_optimizer/gepa_optimizer/gepa_optimizer.py,sha256=3HHYlVZGaBkufHHTOxuuPrDyxE8ysQuhRo3UMMGlguw,21759
45
+ opik_optimizer/gepa_optimizer/adapter.py,sha256=KzPa4koq7aJhALMAOKPxAO4yWuEy_YbW7tGnqny3Hfo,5139
46
+ opik_optimizer/gepa_optimizer/gepa_optimizer.py,sha256=DqTjkDeR7WEMt-53MSzDbD_72FRiwCCGxkwEyrLaQ4A,26430
47
47
  opik_optimizer/gepa_optimizer/reporting.py,sha256=F0cxYSjRuFAszgi3rgqwH1A-KH26kZOLtENP7x1xrQs,5154
48
48
  opik_optimizer/mcp_utils/__init__.py,sha256=BsWQT8nAa6JV6zcOD__OvPMepUS2IpJD4J2rnAXhpuU,710
49
49
  opik_optimizer/mcp_utils/mcp.py,sha256=UylgpTJsybszS433_kuTAgKH-PPde-VHjHVelMardFs,18466
50
50
  opik_optimizer/mcp_utils/mcp_second_pass.py,sha256=p2Knlxg1CKIZVMBbdskdRDqw1BRrnjM4gkcwAZtggm8,4519
51
51
  opik_optimizer/mcp_utils/mcp_simulator.py,sha256=bLL7iVAGMRc8Mb2j_XpSjlkr6TvQLI90hkS4ifnwLqs,3427
52
- opik_optimizer/mcp_utils/mcp_workflow.py,sha256=mtfH6A__SxmsIOVHRQCdnQa12hi8T9MSmk2OdJtzCGA,15767
52
+ opik_optimizer/mcp_utils/mcp_workflow.py,sha256=R3lqufN35p-OJlGxIxAIOMIAvRTBLGXINzfpoVIq2nw,17885
53
53
  opik_optimizer/meta_prompt_optimizer/__init__.py,sha256=syiN2_fMm5iZDQezZCHYe-ZiGOIPlBkLt49Sa1kuR70,97
54
- opik_optimizer/meta_prompt_optimizer/meta_prompt_optimizer.py,sha256=KRB0l5HY7CA-zCDSrtnk5N14gZTzndR_Ds-ASkgiP4Y,51158
54
+ opik_optimizer/meta_prompt_optimizer/meta_prompt_optimizer.py,sha256=F3bxrttYAIkzvjduLvVDpFd9xoZkIqqTgqpSjgYDMIw,51435
55
55
  opik_optimizer/meta_prompt_optimizer/reporting.py,sha256=Py30NDYFNPzb8XrCXibQRtBC3vjjViQG74uG-O6lhXE,7783
56
56
  opik_optimizer/mipro_optimizer/__init__.py,sha256=7sMq9OSWyjITqK7sVtkO9fhG1w6KRE8bN7V52CKaGvo,94
57
- opik_optimizer/mipro_optimizer/_lm.py,sha256=A5Bs7JqdRawkjCLp_vuFnNzCD3cMMrvOORszZUtBhRU,16699
58
- opik_optimizer/mipro_optimizer/_mipro_optimizer_v2.py,sha256=gK9kepdNqIWK3JFVcHNPTrnRne7myn3zjbv_aOuK9dw,39314
59
- opik_optimizer/mipro_optimizer/mipro_optimizer.py,sha256=icgGMQ3TBilW1UX92Lq8wa1-6aia5Qn7JCyD5bdIhhw,24437
57
+ opik_optimizer/mipro_optimizer/_lm.py,sha256=jgp_bamkG9og8nxVKs6J2qPi6BmTvJD3qVeiorRhszU,17004
58
+ opik_optimizer/mipro_optimizer/_mipro_optimizer_v2.py,sha256=bQBJG3wFeNsOF_Yhklx53d4M8kqzBXQ22cOLANXjGJw,39315
59
+ opik_optimizer/mipro_optimizer/mipro_optimizer.py,sha256=ei3gON1r0PiCNhJVJA3zhGS4C2QPZOZMivhc2CPJ_R8,27660
60
60
  opik_optimizer/mipro_optimizer/utils.py,sha256=pP3mvai_GQmwUhcchVOiW1xPI3LatpXclE_5XvBYwTw,2493
61
61
  opik_optimizer/optimization_config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
62
  opik_optimizer/optimization_config/chat_prompt.py,sha256=d3jwM1UvUeRQOSsYHa5GD842VO3JWjVDmB3ROUGp57c,7089
63
63
  opik_optimizer/optimization_config/configs.py,sha256=EGacRNnl6TeWuf8RNsxpP6Nh5JhogjK-JxKllK8dQr0,413
64
64
  opik_optimizer/optimization_config/mappers.py,sha256=4uBoPaIvCo4bqt_w-4rJyVe2LMAP_W7p6xxnDmGT-Sk,1724
65
65
  opik_optimizer/utils/__init__.py,sha256=Ee0SnTPOcwRwp93M6Lh-X913lfSIwnvCiYYh5cpdRQE,486
66
- opik_optimizer/utils/core.py,sha256=fTDO_M30DDvsGYBUE8fs0lsNpdwkE_T4Bz_RIR75Sts,13768
66
+ opik_optimizer/utils/colbert.py,sha256=qSrzKUUGw7P92mLy4Ofug5pBGeTsHBLMJXlXSJSfKuo,8147
67
+ opik_optimizer/utils/core.py,sha256=5GT1vp6fW8ICO42LHMX14BjR-xEb6afAKjM7b1Evx5M,15298
67
68
  opik_optimizer/utils/dataset_utils.py,sha256=dqRUGOekjeNWL0J15R8xFwLyKJDJynJXzVyQmt8rhHA,1464
68
69
  opik_optimizer/utils/prompt_segments.py,sha256=1zUITSccJ82Njac1rmANzim4WWM6rVac61mfluS7lFE,5931
69
- opik_optimizer-1.1.0.dist-info/licenses/LICENSE,sha256=V-0VHJOBdcA_teT8VymvsBUQ1-CZU6yJRmMEjec_8tA,11372
70
- opik_optimizer-1.1.0.dist-info/METADATA,sha256=KQied4TunQ1_HivBclDEIu-o2uwqY7vdd0PJiuX_idw,9481
71
- opik_optimizer-1.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
72
- opik_optimizer-1.1.0.dist-info/top_level.txt,sha256=ondOlpq6_yFckqpxoAHSfzZS2N-JfgmA-QQhOJfz7m0,15
73
- opik_optimizer-1.1.0.dist-info/RECORD,,
70
+ opik_optimizer-2.0.0.dist-info/licenses/LICENSE,sha256=V-0VHJOBdcA_teT8VymvsBUQ1-CZU6yJRmMEjec_8tA,11372
71
+ opik_optimizer-2.0.0.dist-info/METADATA,sha256=pvWtMhlGZ_jVmpn6q4XLb9CsJeetXinpGE-hYKiWnqk,12681
72
+ opik_optimizer-2.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
73
+ opik_optimizer-2.0.0.dist-info/top_level.txt,sha256=ondOlpq6_yFckqpxoAHSfzZS2N-JfgmA-QQhOJfz7m0,15
74
+ opik_optimizer-2.0.0.dist-info/RECORD,,
File without changes