prompture 0.0.33.dev1__py3-none-any.whl → 0.0.34__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 +133 -49
- 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 +50 -35
- prompture/driver.py +125 -5
- prompture/drivers/__init__.py +171 -73
- 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 +129 -0
- prompture/drivers/azure_driver.py +36 -9
- prompture/drivers/claude_driver.py +86 -34
- prompture/drivers/google_driver.py +87 -51
- prompture/drivers/grok_driver.py +29 -32
- prompture/drivers/groq_driver.py +27 -26
- 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 -9
- prompture/drivers/openrouter_driver.py +31 -25
- prompture/drivers/registry.py +306 -0
- prompture/field_definitions.py +106 -96
- prompture/logging.py +80 -0
- prompture/model_rates.py +217 -0
- prompture/runner.py +49 -47
- prompture/session.py +117 -0
- prompture/settings.py +14 -1
- prompture/tools.py +172 -265
- prompture/validator.py +3 -3
- {prompture-0.0.33.dev1.dist-info → prompture-0.0.34.dist-info}/METADATA +18 -20
- prompture-0.0.34.dist-info/RECORD +55 -0
- prompture-0.0.33.dev1.dist-info/RECORD +0 -29
- {prompture-0.0.33.dev1.dist-info → prompture-0.0.34.dist-info}/WHEEL +0 -0
- {prompture-0.0.33.dev1.dist-info → prompture-0.0.34.dist-info}/entry_points.txt +0 -0
- {prompture-0.0.33.dev1.dist-info → prompture-0.0.34.dist-info}/licenses/LICENSE +0 -0
- {prompture-0.0.33.dev1.dist-info → prompture-0.0.34.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
|
|
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,55 @@
|
|
|
1
|
+
prompture/__init__.py,sha256=RNmZAPgBKi7jyW4DUoR800UAdZx4S-H8INe8KOdsmgA,4547
|
|
2
|
+
prompture/_version.py,sha256=lALZlyVk-nrQoV2VLZzOsgzhfEll5JRUW4TJRJXnR_o,706
|
|
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=yj-z7_RMbfxP8zaKjQFZFcxGdf8Q2_KNQ6RTo7SPEpQ,6984
|
|
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=gJDr60688MZx9rbP-I8Um1gLeDwfRynv5SHsYjHjEGk,4263
|
|
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/drivers/registry.py,sha256=Dg_5w9alnIPKhOnsR9Xspuf5T7roBGu0r_L2Cf-UhXs,9926
|
|
50
|
+
prompture-0.0.34.dist-info/licenses/LICENSE,sha256=0HgDepH7aaHNFhHF-iXuW6_GqDfYPnVkjtiCAZ4yS8I,1060
|
|
51
|
+
prompture-0.0.34.dist-info/METADATA,sha256=ceuWQGpjpKCnkdGgYVlHPfTD9G2Yw84go3AxIwzkvbo,18226
|
|
52
|
+
prompture-0.0.34.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
53
|
+
prompture-0.0.34.dist-info/entry_points.txt,sha256=AFPG3lJR86g4IJMoWQUW5Ph7G6MLNWG3A2u2Tp9zkp8,48
|
|
54
|
+
prompture-0.0.34.dist-info/top_level.txt,sha256=to86zq_kjfdoLeAxQNr420UWqT0WzkKoZ509J7Qr2t4,10
|
|
55
|
+
prompture-0.0.34.dist-info/RECORD,,
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
prompture/__init__.py,sha256=Bs3nDZWEl9tFrS-zH7RThl_svKwPM47Q8bIuD8qKlGM,2723
|
|
2
|
-
prompture/cli.py,sha256=vA86GNjtKSHz8eRMl5YDaT9HHIWuhkeJtfx8jqTaqtM,809
|
|
3
|
-
prompture/core.py,sha256=x_FhOY37ygQVHo4zHUyiWsV4BuOClkELsVhEV-K4jJ0,53689
|
|
4
|
-
prompture/discovery.py,sha256=qQ7Quz0Tqo0f2h9DqMlV7RqMP4XOeue_ZwzXq4bf6B8,6788
|
|
5
|
-
prompture/driver.py,sha256=w8pdXHujImIGF3ee8rkG8f6-UD0h2jLHhucSPInRrYI,989
|
|
6
|
-
prompture/field_definitions.py,sha256=6kDMYNedccTK5l2L_I8_NI3_av-iYHqGPwkKDy8214c,21731
|
|
7
|
-
prompture/runner.py,sha256=5xwal3iBQQj4_q7l3Rjr0e3RrUMJPaPDLiEchO0mmHo,4192
|
|
8
|
-
prompture/settings.py,sha256=-S1AJa2AUblwGyzY1lOvEI_ceNRwgPeGvJYsbGulwv4,1630
|
|
9
|
-
prompture/tools.py,sha256=qyT8oJl_v9GolABkflW0SvEx22yNkEJZKTu-40nJbs0,40329
|
|
10
|
-
prompture/validator.py,sha256=oLzVsNveHuF-N_uOd11_uDa9Q5rFyo0wrk_l1N4zqDk,996
|
|
11
|
-
prompture/drivers/__init__.py,sha256=hi2u4Z2KQFfgqce1QvjRlDKRzB2xfJZpidGNMsQ82oI,4105
|
|
12
|
-
prompture/drivers/airllm_driver.py,sha256=g1WmQDwSfK0BIyG96JrZY7W_VHXOS7wDSeegE7B1q4Y,3956
|
|
13
|
-
prompture/drivers/azure_driver.py,sha256=GROhK3hqMfMurnEgpAawa1DPS-FhOU0YQcgy9SNGTzM,4622
|
|
14
|
-
prompture/drivers/claude_driver.py,sha256=ZEHQNqNThLZ0p-WmGVuKiNyiudGYGP07xIzbgZhLY1g,3293
|
|
15
|
-
prompture/drivers/google_driver.py,sha256=bCsCSuCRise0L_HOmw-jBh1hrpd8glNBkVFlOZeP0DM,6338
|
|
16
|
-
prompture/drivers/grok_driver.py,sha256=Xp6L75oL3dN8St8_m46C_5bM8FcaIdNKUASAt9kZ39w,5003
|
|
17
|
-
prompture/drivers/groq_driver.py,sha256=91WGXP8G5dO0beuFO8FehZszlDC_X9hv_yPzQRGmcqw,3920
|
|
18
|
-
prompture/drivers/hugging_driver.py,sha256=rngz7hIR7l-9M_xe4EjWPaBqdyPFHdQsqnDDy9gm5So,2357
|
|
19
|
-
prompture/drivers/lmstudio_driver.py,sha256=Umy1kT211TAxxSPyQrtZnIGIZgqFeSV87FLTiPFF0CY,3455
|
|
20
|
-
prompture/drivers/local_http_driver.py,sha256=S2diikvtQOQHF7fB07zU2X0QWkej4Of__rJgaU2C6FI,1669
|
|
21
|
-
prompture/drivers/ollama_driver.py,sha256=fq_eFgwmCT3SK1D-ICHjxLjcm_An0suwkFIWC38xsS0,4681
|
|
22
|
-
prompture/drivers/openai_driver.py,sha256=9q9OjQslquRFvIl1Hd9JVmFFFVh6OBIWrFulw1mkYWg,3976
|
|
23
|
-
prompture/drivers/openrouter_driver.py,sha256=GKvLOFDhsyopH-k3iaD3VWllm7xbGuopRSA02MfCKoM,5031
|
|
24
|
-
prompture-0.0.33.dev1.dist-info/licenses/LICENSE,sha256=0HgDepH7aaHNFhHF-iXuW6_GqDfYPnVkjtiCAZ4yS8I,1060
|
|
25
|
-
prompture-0.0.33.dev1.dist-info/METADATA,sha256=1W2vCL_ZzJvAcxi78mbYfdaIb__mudc44Ryb_b0GlIU,18114
|
|
26
|
-
prompture-0.0.33.dev1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
27
|
-
prompture-0.0.33.dev1.dist-info/entry_points.txt,sha256=AFPG3lJR86g4IJMoWQUW5Ph7G6MLNWG3A2u2Tp9zkp8,48
|
|
28
|
-
prompture-0.0.33.dev1.dist-info/top_level.txt,sha256=to86zq_kjfdoLeAxQNr420UWqT0WzkKoZ509J7Qr2t4,10
|
|
29
|
-
prompture-0.0.33.dev1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|