prompture 0.0.33.dev2__py3-none-any.whl → 0.0.34.dev1__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 (55) hide show
  1. prompture/__init__.py +112 -54
  2. prompture/_version.py +34 -0
  3. prompture/aio/__init__.py +74 -0
  4. prompture/async_conversation.py +484 -0
  5. prompture/async_core.py +803 -0
  6. prompture/async_driver.py +131 -0
  7. prompture/cache.py +469 -0
  8. prompture/callbacks.py +50 -0
  9. prompture/cli.py +7 -3
  10. prompture/conversation.py +504 -0
  11. prompture/core.py +475 -352
  12. prompture/cost_mixin.py +51 -0
  13. prompture/discovery.py +41 -36
  14. prompture/driver.py +125 -5
  15. prompture/drivers/__init__.py +63 -57
  16. prompture/drivers/airllm_driver.py +13 -20
  17. prompture/drivers/async_airllm_driver.py +26 -0
  18. prompture/drivers/async_azure_driver.py +117 -0
  19. prompture/drivers/async_claude_driver.py +107 -0
  20. prompture/drivers/async_google_driver.py +132 -0
  21. prompture/drivers/async_grok_driver.py +91 -0
  22. prompture/drivers/async_groq_driver.py +84 -0
  23. prompture/drivers/async_hugging_driver.py +61 -0
  24. prompture/drivers/async_lmstudio_driver.py +79 -0
  25. prompture/drivers/async_local_http_driver.py +44 -0
  26. prompture/drivers/async_ollama_driver.py +125 -0
  27. prompture/drivers/async_openai_driver.py +96 -0
  28. prompture/drivers/async_openrouter_driver.py +96 -0
  29. prompture/drivers/async_registry.py +80 -0
  30. prompture/drivers/azure_driver.py +36 -15
  31. prompture/drivers/claude_driver.py +86 -40
  32. prompture/drivers/google_driver.py +86 -58
  33. prompture/drivers/grok_driver.py +29 -38
  34. prompture/drivers/groq_driver.py +27 -32
  35. prompture/drivers/hugging_driver.py +6 -6
  36. prompture/drivers/lmstudio_driver.py +26 -13
  37. prompture/drivers/local_http_driver.py +6 -6
  38. prompture/drivers/ollama_driver.py +90 -23
  39. prompture/drivers/openai_driver.py +36 -15
  40. prompture/drivers/openrouter_driver.py +31 -31
  41. prompture/field_definitions.py +106 -96
  42. prompture/logging.py +80 -0
  43. prompture/model_rates.py +16 -15
  44. prompture/runner.py +49 -47
  45. prompture/session.py +117 -0
  46. prompture/settings.py +11 -1
  47. prompture/tools.py +172 -265
  48. prompture/validator.py +3 -3
  49. {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/METADATA +18 -20
  50. prompture-0.0.34.dev1.dist-info/RECORD +54 -0
  51. prompture-0.0.33.dev2.dist-info/RECORD +0 -30
  52. {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/WHEEL +0 -0
  53. {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/entry_points.txt +0 -0
  54. {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/licenses/LICENSE +0 -0
  55. {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/top_level.txt +0 -0
prompture/validator.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import json
2
- from typing import Any, Dict
2
+ from typing import Any
3
3
 
4
4
  try:
5
5
  import jsonschema
@@ -7,7 +7,7 @@ except Exception:
7
7
  jsonschema = None
8
8
 
9
9
 
10
- def validate_against_schema(instance_json: str, schema: Dict[str,Any]) -> Dict[str,Any]:
10
+ def validate_against_schema(instance_json: str, schema: dict[str, Any]) -> dict[str, Any]:
11
11
  """Valida el JSON (string) contra un JSON Schema.
12
12
  Devuelve dict con ok: bool y detalles.
13
13
  """
@@ -28,4 +28,4 @@ def validate_against_schema(instance_json: str, schema: Dict[str,Any]) -> Dict[s
28
28
  jsonschema.validate(instance=data, schema=schema)
29
29
  return {"ok": True, "data": data}
30
30
  except jsonschema.ValidationError as e:
31
- return {"ok": False, "error": str(e), "data": data}
31
+ return {"ok": False, "error": str(e), "data": data}
@@ -1,12 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 0.0.33.dev2
3
+ Version: 0.0.34.dev1
4
4
  Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
5
- Home-page: https://github.com/jhd3197/prompture
6
- Author: Juan Denis
7
- Author-email: juan@vene.co
5
+ Author-email: Juan Denis <juan@vene.co>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/jhd3197/prompture
8
8
  Classifier: Programming Language :: Python :: 3
9
- Classifier: License :: OSI Approved :: MIT License
10
9
  Classifier: Operating System :: OS Independent
11
10
  Requires-Python: >=3.9
12
11
  Description-Content-Type: text/markdown
@@ -29,19 +28,16 @@ Requires-Dist: tukuy>=0.0.6
29
28
  Requires-Dist: pyyaml>=6.0
30
29
  Provides-Extra: test
31
30
  Requires-Dist: pytest>=7.0; extra == "test"
31
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest>=7.0; extra == "dev"
34
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
35
+ Requires-Dist: ruff>=0.8.0; extra == "dev"
32
36
  Provides-Extra: airllm
33
37
  Requires-Dist: airllm>=2.8.0; extra == "airllm"
34
- Dynamic: author
35
- Dynamic: author-email
36
- Dynamic: classifier
37
- Dynamic: description
38
- Dynamic: description-content-type
39
- Dynamic: home-page
38
+ Provides-Extra: redis
39
+ Requires-Dist: redis>=4.0; extra == "redis"
40
40
  Dynamic: license-file
41
- Dynamic: provides-extra
42
- Dynamic: requires-dist
43
- Dynamic: requires-python
44
- Dynamic: summary
45
41
 
46
42
  # Prompture
47
43
 
@@ -384,12 +380,15 @@ print(res["usage"]) # includes per-field usage and totals
384
380
 
385
381
  ## Manual control with logging
386
382
 
387
- `manual_extract_and_jsonify` is like `extract_and_jsonify` but adds structured debug logging.
383
+ `manual_extract_and_jsonify` is like `extract_and_jsonify` but lets you provide your own driver.
384
+ Enable library logging via Python's standard `logging` module:
388
385
 
389
386
  ```python
390
- from prompture import manual_extract_and_jsonify
387
+ import logging
388
+ from prompture import manual_extract_and_jsonify, configure_logging
391
389
  from prompture.drivers import get_driver
392
- from prompture.tools import LogLevel
390
+
391
+ configure_logging(logging.DEBUG) # see internal debug output
393
392
 
394
393
  driver = get_driver("ollama")
395
394
  res = manual_extract_and_jsonify(
@@ -402,7 +401,6 @@ res = manual_extract_and_jsonify(
402
401
  },
403
402
  model_name="llama3.1:8b",
404
403
  options={"temperature": 0.2},
405
- verbose_level=LogLevel.DEBUG # TRACE for full prompts/results
406
404
  )
407
405
  print(res["json_object"])
408
406
  ```
@@ -451,7 +449,7 @@ This example script compares multiple Ollama models on a complex task of extract
451
449
  * Add `description` to schema fields (or Pydantic field metadata) for better extractions.
452
450
  * Start with **one-shot Pydantic**; switch specific fields to **stepwise** if they’re noisy.
453
451
  * Track usage/cost before scaling; tweak `temperature` in `options` if consistency wobbles.
454
- * Use `verbose_level=TRACE` in dev to see prompts/results and tighten your specs.
452
+ * Use `configure_logging(logging.DEBUG)` in dev to see internal debug output and tighten your specs.
455
453
 
456
454
  ---
457
455
 
@@ -0,0 +1,54 @@
1
+ prompture/__init__.py,sha256=XLOuu8AnbAjEq7oKPyrIcXzoSFzfzjBfWmS4WjZlCpU,3945
2
+ prompture/_version.py,sha256=oWvGRxkg4wF7c8HSUd3ltOCQNJfrhcDmrYXTODvTKeA,719
3
+ prompture/async_conversation.py,sha256=Q4wJctjTffH55i5FnxV5tt0xB-WCJCfCmxeHLOisuP8,18807
4
+ prompture/async_core.py,sha256=s8G0nGUGR1Bf_BQG9_FcQRpveSnJKkEwcWNfbAJaSkg,29208
5
+ prompture/async_driver.py,sha256=8mV3wEQiGOGuegaAPJ6uT1lNXwFDmbUGKXZkHk9Baow,4630
6
+ prompture/cache.py,sha256=4dfQDMsEZ9JMQDXLOkiugPmmMJQIfKVE8rTAKDH4oL8,14401
7
+ prompture/callbacks.py,sha256=MzbSb9iH9bg1yw7fLj1oYHnbiV9JwyW4scj42pQvRsk,1550
8
+ prompture/cli.py,sha256=EjmK35udD28hXkZFDif-y_IMG6BQtfpDLkv40RQlBFE,809
9
+ prompture/conversation.py,sha256=1vqZvhVl2qG987BZ_cqqyuQepL1PO_Razd_IJBobBDg,19486
10
+ prompture/core.py,sha256=V__4YAt42WKf7CNiFRiET1oT2GFFIElOLFFF7mSFx-o,55735
11
+ prompture/cost_mixin.py,sha256=_spz84i8Qsplh6V3GkWyXXSUE4EwGy2IsbcsU2LEBxs,1918
12
+ prompture/discovery.py,sha256=_mSeeIQfRl3pHDPm84Mc2LDcOSwfkUanITXWeRPfv5E,7116
13
+ prompture/driver.py,sha256=LMN1lnCaL6jcD4f0Bzq8Pa_73itd6EqZ_ZYh1wEZm-Q,5485
14
+ prompture/field_definitions.py,sha256=PLvxq2ot-ngJ8JbWkkZ-XLtM1wvjUQ3TL01vSEo-a6E,21368
15
+ prompture/logging.py,sha256=SkFO26_56Zai05vW8kTq3jvJudfLG2ipI5qNHaXKH3g,2574
16
+ prompture/model_rates.py,sha256=qtZUjsCVskA9LyG73JklG_kjKJHABA6ldBmBX0UzlSQ,6415
17
+ prompture/runner.py,sha256=lHe2L2jqY1pDXoKNPJALN9lAm-Q8QOY8C8gw-vM9VrM,4213
18
+ prompture/session.py,sha256=FldK3cKq_jO0-beukVOhIiwsYWb6U_lLBlAERx95aaM,3821
19
+ prompture/settings.py,sha256=o-zsYpxRvSg-ICGWqqVNEoJG23GCMBLlkC7RPXpouSw,1976
20
+ prompture/tools.py,sha256=PmFbGHTWYWahpJOG6BLlM0Y-EG6S37IFW57C-8GdsXo,36449
21
+ prompture/validator.py,sha256=FY_VjIVEbjG2nwzh-r6l23Kt3UzaLyCis8_pZMNGHBA,993
22
+ prompture/aio/__init__.py,sha256=bKqTu4Jxld16aP_7SP9wU5au45UBIb041ORo4E4HzVo,1810
23
+ prompture/drivers/__init__.py,sha256=5bNmiKaKYh1hanTa_SZ0akwEcOMVJoNSeMGBXb67VfM,5083
24
+ prompture/drivers/airllm_driver.py,sha256=SaTh7e7Plvuct_TfRqQvsJsKHvvM_3iVqhBtlciM-Kw,3858
25
+ prompture/drivers/async_airllm_driver.py,sha256=1hIWLXfyyIg9tXaOE22tLJvFyNwHnOi1M5BIKnV8ysk,908
26
+ prompture/drivers/async_azure_driver.py,sha256=vRp1PlOB87OLUbEZJEp7En3tvadG956Q6AV2o9UmyLA,4196
27
+ prompture/drivers/async_claude_driver.py,sha256=w9HRE7njh1N9BzX4QtsrUnMakKBb-nykBkvTwLmoFnw,3825
28
+ prompture/drivers/async_google_driver.py,sha256=qKMl6R60xBPQpsjCd9acXiXphVE5QxKbPSjxal7Sq2U,5656
29
+ prompture/drivers/async_grok_driver.py,sha256=yQgdBHiyyweueWDKChm9HnWzvbtWz60SNATsRKQY-RQ,3279
30
+ prompture/drivers/async_groq_driver.py,sha256=iShPE_YbR3oObHD3joFJDSmFeyCmaisLl7nwILbVux4,2808
31
+ prompture/drivers/async_hugging_driver.py,sha256=IblxqU6TpNUiigZ0BCgNkAgzpUr2FtPHJOZnOZMnHF0,2152
32
+ prompture/drivers/async_lmstudio_driver.py,sha256=7iQ-Fqezlpj4O13QC9oPjylGCINU5KvSRkwL52_2Cf0,2810
33
+ prompture/drivers/async_local_http_driver.py,sha256=qoigIf-w3_c2dbVdM6m1e2RMAWP4Gk4VzVs5hM3lPvQ,1609
34
+ prompture/drivers/async_ollama_driver.py,sha256=vRd2VIl412d6WVSo8vmZg0GBYUo7gBj-S2_55PpUWbk,4511
35
+ prompture/drivers/async_openai_driver.py,sha256=jHtSA_MeeIwGeE9o9F1ZsKTNgGGA7xF3WbGZgD8ACEU,3305
36
+ prompture/drivers/async_openrouter_driver.py,sha256=OKL4MfRAopXaMevf6A6WcAytyvWr0tWO_BmshdI0fSY,3516
37
+ prompture/drivers/async_registry.py,sha256=xI_QI8z56vg6qWy6mJTsIdtd16o3nilBZbVIbfArEKI,3393
38
+ prompture/drivers/azure_driver.py,sha256=4IAzdKqcORgVEDUj6itkVmJUg1ayo4HXSfqLKzIGnlM,5460
39
+ prompture/drivers/claude_driver.py,sha256=11nEiq0Ga-d-0vwxbWo-cAl4AjnYPLdRyPtucJs9xTA,4985
40
+ prompture/drivers/google_driver.py,sha256=Ysa1ZZEAPEKHCJFCBiJtB4K-sGvsYti4hGBv_85nowY,8454
41
+ prompture/drivers/grok_driver.py,sha256=_ZQfmE4NfzHTj-nTEtBkWFbypjCF_4aWFODAaxxEjog,5027
42
+ prompture/drivers/groq_driver.py,sha256=QfMhzKDhTQyU7yG0oayCojunaKPdxrxzYo-u87_uN18,3928
43
+ prompture/drivers/hugging_driver.py,sha256=gZir3XnM77VfYIdnu3S1pRftlZJM6G3L8bgGn5esg-Q,2346
44
+ prompture/drivers/lmstudio_driver.py,sha256=AuhmKS4DBvxEPSfjL-uN7wnAyFWoB7Wjk1o0Oscan4I,4010
45
+ prompture/drivers/local_http_driver.py,sha256=QJgEf9kAmy8YZ5fb8FHnWuhoDoZYNd8at4jegzNVJH0,1658
46
+ prompture/drivers/ollama_driver.py,sha256=fNvHW5mp7cIwpZKCS5r7WAO-yTK01BKTKvotM_GJCE0,7229
47
+ prompture/drivers/openai_driver.py,sha256=-mgieUBlNgjz5B6ejRwMPoIGgvEW2p5LLwS9j0B9hno,4815
48
+ prompture/drivers/openrouter_driver.py,sha256=WH48KEkafuxFX6b55FzwT57tUlmbwYlHSeNsIxWvM4o,5141
49
+ prompture-0.0.34.dev1.dist-info/licenses/LICENSE,sha256=0HgDepH7aaHNFhHF-iXuW6_GqDfYPnVkjtiCAZ4yS8I,1060
50
+ prompture-0.0.34.dev1.dist-info/METADATA,sha256=aEHoj6Hw91QHAzbZ40RoW2RQ9K0RckRWEnsj-lr7c3c,18231
51
+ prompture-0.0.34.dev1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
52
+ prompture-0.0.34.dev1.dist-info/entry_points.txt,sha256=AFPG3lJR86g4IJMoWQUW5Ph7G6MLNWG3A2u2Tp9zkp8,48
53
+ prompture-0.0.34.dev1.dist-info/top_level.txt,sha256=to86zq_kjfdoLeAxQNr420UWqT0WzkKoZ509J7Qr2t4,10
54
+ prompture-0.0.34.dev1.dist-info/RECORD,,
@@ -1,30 +0,0 @@
1
- prompture/__init__.py,sha256=gnZYWKiWV_FTUeG9A88nkgPrAwtx6U_23UrOYhNTiOw,2891
2
- prompture/cli.py,sha256=vA86GNjtKSHz8eRMl5YDaT9HHIWuhkeJtfx8jqTaqtM,809
3
- prompture/core.py,sha256=x_FhOY37ygQVHo4zHUyiWsV4BuOClkELsVhEV-K4jJ0,53689
4
- prompture/discovery.py,sha256=JbaOhZuf41yYOFdv6wZmRjfRPum_df5V5fVVbKyOPoY,7240
5
- prompture/driver.py,sha256=w8pdXHujImIGF3ee8rkG8f6-UD0h2jLHhucSPInRrYI,989
6
- prompture/field_definitions.py,sha256=6kDMYNedccTK5l2L_I8_NI3_av-iYHqGPwkKDy8214c,21731
7
- prompture/model_rates.py,sha256=B3VdFFIPaJ31xSIVq96bAD3P4dnrIguauyNrD7WHCgQ,6428
8
- prompture/runner.py,sha256=5xwal3iBQQj4_q7l3Rjr0e3RrUMJPaPDLiEchO0mmHo,4192
9
- prompture/settings.py,sha256=F4RQt4HB3rOUMoKs1r-Y7W55Dvk_LdXyTD88S8mMojM,1730
10
- prompture/tools.py,sha256=qyT8oJl_v9GolABkflW0SvEx22yNkEJZKTu-40nJbs0,40329
11
- prompture/validator.py,sha256=oLzVsNveHuF-N_uOd11_uDa9Q5rFyo0wrk_l1N4zqDk,996
12
- prompture/drivers/__init__.py,sha256=hi2u4Z2KQFfgqce1QvjRlDKRzB2xfJZpidGNMsQ82oI,4105
13
- prompture/drivers/airllm_driver.py,sha256=g1WmQDwSfK0BIyG96JrZY7W_VHXOS7wDSeegE7B1q4Y,3956
14
- prompture/drivers/azure_driver.py,sha256=t8RsGSexwPaM8VzakMRMpssh7Nf-StY-C5BfWmoXdzE,5016
15
- prompture/drivers/claude_driver.py,sha256=KcJRIcS9OPK6IBs8pUxxcKFlBH_eivgKLJcDuUk1_YU,3665
16
- prompture/drivers/google_driver.py,sha256=-fbnJ003VC01YApujNUC1lg7E4J9x-Jm8sEJfLX00cI,6876
17
- prompture/drivers/grok_driver.py,sha256=24FxmqiZNF8znIATn7CnFExqP_XvivXyvoxVFnC4iW8,5400
18
- prompture/drivers/groq_driver.py,sha256=FZPz1sPfYj86HjwtHX7U7YE60_oDAfr4TfS1I7NdKzI,4313
19
- prompture/drivers/hugging_driver.py,sha256=rngz7hIR7l-9M_xe4EjWPaBqdyPFHdQsqnDDy9gm5So,2357
20
- prompture/drivers/lmstudio_driver.py,sha256=Umy1kT211TAxxSPyQrtZnIGIZgqFeSV87FLTiPFF0CY,3455
21
- prompture/drivers/local_http_driver.py,sha256=S2diikvtQOQHF7fB07zU2X0QWkej4Of__rJgaU2C6FI,1669
22
- prompture/drivers/ollama_driver.py,sha256=fq_eFgwmCT3SK1D-ICHjxLjcm_An0suwkFIWC38xsS0,4681
23
- prompture/drivers/openai_driver.py,sha256=pO12D_4jmbCKkSDRLtk5olb7UqBqZyY0sh6IUJK1fjE,4371
24
- prompture/drivers/openrouter_driver.py,sha256=f4JWl3YApAgrvuskUz0athbdS82GZasclVKx1AA9-mA,5454
25
- prompture-0.0.33.dev2.dist-info/licenses/LICENSE,sha256=0HgDepH7aaHNFhHF-iXuW6_GqDfYPnVkjtiCAZ4yS8I,1060
26
- prompture-0.0.33.dev2.dist-info/METADATA,sha256=zFOt8upIDNaUOhNa1N_ltrwuxr3GYBV-CsmDCPO02C8,18114
27
- prompture-0.0.33.dev2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
28
- prompture-0.0.33.dev2.dist-info/entry_points.txt,sha256=AFPG3lJR86g4IJMoWQUW5Ph7G6MLNWG3A2u2Tp9zkp8,48
29
- prompture-0.0.33.dev2.dist-info/top_level.txt,sha256=to86zq_kjfdoLeAxQNr420UWqT0WzkKoZ509J7Qr2t4,10
30
- prompture-0.0.33.dev2.dist-info/RECORD,,