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.
- prompture/__init__.py +112 -54
- prompture/_version.py +34 -0
- prompture/aio/__init__.py +74 -0
- prompture/async_conversation.py +484 -0
- prompture/async_core.py +803 -0
- prompture/async_driver.py +131 -0
- prompture/cache.py +469 -0
- prompture/callbacks.py +50 -0
- prompture/cli.py +7 -3
- prompture/conversation.py +504 -0
- prompture/core.py +475 -352
- prompture/cost_mixin.py +51 -0
- prompture/discovery.py +41 -36
- prompture/driver.py +125 -5
- prompture/drivers/__init__.py +63 -57
- prompture/drivers/airllm_driver.py +13 -20
- prompture/drivers/async_airllm_driver.py +26 -0
- prompture/drivers/async_azure_driver.py +117 -0
- prompture/drivers/async_claude_driver.py +107 -0
- prompture/drivers/async_google_driver.py +132 -0
- prompture/drivers/async_grok_driver.py +91 -0
- prompture/drivers/async_groq_driver.py +84 -0
- prompture/drivers/async_hugging_driver.py +61 -0
- prompture/drivers/async_lmstudio_driver.py +79 -0
- prompture/drivers/async_local_http_driver.py +44 -0
- prompture/drivers/async_ollama_driver.py +125 -0
- prompture/drivers/async_openai_driver.py +96 -0
- prompture/drivers/async_openrouter_driver.py +96 -0
- prompture/drivers/async_registry.py +80 -0
- prompture/drivers/azure_driver.py +36 -15
- prompture/drivers/claude_driver.py +86 -40
- prompture/drivers/google_driver.py +86 -58
- prompture/drivers/grok_driver.py +29 -38
- prompture/drivers/groq_driver.py +27 -32
- prompture/drivers/hugging_driver.py +6 -6
- prompture/drivers/lmstudio_driver.py +26 -13
- prompture/drivers/local_http_driver.py +6 -6
- prompture/drivers/ollama_driver.py +90 -23
- prompture/drivers/openai_driver.py +36 -15
- prompture/drivers/openrouter_driver.py +31 -31
- prompture/field_definitions.py +106 -96
- prompture/logging.py +80 -0
- prompture/model_rates.py +16 -15
- prompture/runner.py +49 -47
- prompture/session.py +117 -0
- prompture/settings.py +11 -1
- prompture/tools.py +172 -265
- prompture/validator.py +3 -3
- {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/METADATA +18 -20
- prompture-0.0.34.dev1.dist-info/RECORD +54 -0
- prompture-0.0.33.dev2.dist-info/RECORD +0 -30
- {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/WHEEL +0 -0
- {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/entry_points.txt +0 -0
- {prompture-0.0.33.dev2.dist-info → prompture-0.0.34.dev1.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
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:
|
|
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.
|
|
3
|
+
Version: 0.0.34.dev1
|
|
4
4
|
Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
|
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
|
-
|
|
387
|
+
import logging
|
|
388
|
+
from prompture import manual_extract_and_jsonify, configure_logging
|
|
391
389
|
from prompture.drivers import get_driver
|
|
392
|
-
|
|
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 `
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|