programasweights 0.4.8__tar.gz → 0.4.10__tar.gz

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 (26) hide show
  1. {programasweights-0.4.8 → programasweights-0.4.10}/CHANGELOG.md +16 -0
  2. {programasweights-0.4.8 → programasweights-0.4.10}/PKG-INFO +18 -13
  3. {programasweights-0.4.8 → programasweights-0.4.10}/PYPI_README.md +14 -11
  4. {programasweights-0.4.8 → programasweights-0.4.10}/README.md +14 -11
  5. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/__init__.py +8 -4
  6. {programasweights-0.4.8 → programasweights-0.4.10}/pyproject.toml +4 -2
  7. {programasweights-0.4.8 → programasweights-0.4.10}/.gitignore +0 -0
  8. {programasweights-0.4.8 → programasweights-0.4.10}/LICENSE +0 -0
  9. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/_output.py +0 -0
  10. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/_program_reference.py +0 -0
  11. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/_remote.py +0 -0
  12. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/artifacts.py +0 -0
  13. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/cache.py +0 -0
  14. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/cli.py +0 -0
  15. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/client.py +0 -0
  16. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/compiler/__init__.py +0 -0
  17. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/compiler/dummy.py +0 -0
  18. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/config.py +0 -0
  19. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/convert_peft_to_paw.py +0 -0
  20. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/errors.py +0 -0
  21. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/local_program.py +0 -0
  22. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/paw_format.py +0 -0
  23. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/runtime/__init__.py +0 -0
  24. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/runtime/interpreter.py +0 -0
  25. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/runtime/interpreter_onnx.py +0 -0
  26. {programasweights-0.4.8 → programasweights-0.4.10}/programasweights/runtime_llamacpp.py +0 -0
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.10 (2026-09-21)
4
+
5
+ - Support Python 3.8 through 3.14.
6
+ - Add prebuilt Intel Mac runtimes with Metal acceleration to the PAW
7
+ package index.
8
+ - Add Python 3.8 runtimes for Apple Silicon, Linux, and Windows, and
9
+ Python 3.14 runtimes for Windows.
10
+ - Bundle required Visual C++ and OpenMP libraries in the new Windows runtimes.
11
+
12
+ ## 0.4.9 (2026-09-21)
13
+
14
+ - Lead quickstarts and examples with compiling your own functions, then
15
+ saving and reusing program IDs.
16
+ - Reuse loaded functions in the LangChain example and serialize calls to
17
+ each shared instance.
18
+
3
19
  ## 0.4.8 (2026-09-20)
4
20
 
5
21
  - Reduce the source distribution to the SDK and files needed to build and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: programasweights
3
- Version: 0.4.8
3
+ Version: 0.4.10
4
4
  Summary: Compile natural language specifications into neural programs that run locally via llama.cpp.
5
5
  Project-URL: Homepage, https://programasweights.com
6
6
  Project-URL: Repository, https://github.com/programasweights/programasweights-python
@@ -15,14 +15,16 @@ Classifier: Intended Audience :: Developers
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: License :: OSI Approved :: MIT License
17
17
  Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.8
18
19
  Classifier: Programming Language :: Python :: 3.9
19
20
  Classifier: Programming Language :: Python :: 3.10
20
21
  Classifier: Programming Language :: Python :: 3.11
21
22
  Classifier: Programming Language :: Python :: 3.12
22
23
  Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: 3.14
23
25
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
26
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
- Requires-Python: >=3.9
27
+ Requires-Python: >=3.8
26
28
  Requires-Dist: httpx<1.0,>=0.27.0
27
29
  Requires-Dist: llama-cpp-python<=0.3.19,>=0.3.0
28
30
  Provides-Extra: test
@@ -46,22 +48,21 @@ pip install programasweights --extra-index-url https://pypi.programasweights.com
46
48
  ```python
47
49
  import programasweights as paw
48
50
 
49
- # Use a pre-compiled function (downloads once, runs locally forever)
50
- fn = paw.function("email-triage")
51
+ # Compile and load your own function
52
+ fn = paw.compile_and_load(
53
+ "Classify if a message needs immediate attention or can wait. "
54
+ "Return only 'immediate' or 'wait'."
55
+ )
51
56
  fn("Urgent: the server is down!") # "immediate"
52
57
  fn("Newsletter: spring picnic") # "wait"
53
58
 
54
- # Compile your own from a description
59
+ # Compile once and save the program ID
55
60
  program = paw.compile(
56
- "Fix malformed JSON: repair missing quotes and trailing commas",
57
- slug="json-fixer" # optional: creates username/json-fixer handle
61
+ "Fix malformed JSON: repair missing quotes and trailing commas"
58
62
  )
59
- fn = paw.function(program.slug) # or paw.function(program.id)
63
+ print(program.id) # Save this ID for future runs
64
+ fn = paw.function(program.id)
60
65
  fn("{name: 'Alice',}") # '{"name":"Alice"}'
61
-
62
- # Or compile and load in one step
63
- fn = paw.compile_and_load("Classify sentiment as positive or negative")
64
- fn("I love this!") # "positive"
65
66
  ```
66
67
 
67
68
  If you specifically want the smaller browser-compatible runtime, pass `compiler="paw-4b-gpt2"`. Otherwise, omit `compiler` and let the server default decide.
@@ -73,7 +74,11 @@ Use the hosted API for fast inference in around 150 ms, without a local model do
73
74
  ```python
74
75
  import programasweights as paw
75
76
 
76
- with paw.function("email-triage", remote=True) as remote_fn:
77
+ with paw.compile_and_load(
78
+ "Classify if a message needs immediate attention or can wait. "
79
+ "Return only 'immediate' or 'wait'.",
80
+ remote=True,
81
+ ) as remote_fn:
77
82
  print(remote_fn("Urgent: the server is down!"))
78
83
  ```
79
84
 
@@ -15,22 +15,21 @@ pip install programasweights --extra-index-url https://pypi.programasweights.com
15
15
  ```python
16
16
  import programasweights as paw
17
17
 
18
- # Use a pre-compiled function (downloads once, runs locally forever)
19
- fn = paw.function("email-triage")
18
+ # Compile and load your own function
19
+ fn = paw.compile_and_load(
20
+ "Classify if a message needs immediate attention or can wait. "
21
+ "Return only 'immediate' or 'wait'."
22
+ )
20
23
  fn("Urgent: the server is down!") # "immediate"
21
24
  fn("Newsletter: spring picnic") # "wait"
22
25
 
23
- # Compile your own from a description
26
+ # Compile once and save the program ID
24
27
  program = paw.compile(
25
- "Fix malformed JSON: repair missing quotes and trailing commas",
26
- slug="json-fixer" # optional: creates username/json-fixer handle
28
+ "Fix malformed JSON: repair missing quotes and trailing commas"
27
29
  )
28
- fn = paw.function(program.slug) # or paw.function(program.id)
30
+ print(program.id) # Save this ID for future runs
31
+ fn = paw.function(program.id)
29
32
  fn("{name: 'Alice',}") # '{"name":"Alice"}'
30
-
31
- # Or compile and load in one step
32
- fn = paw.compile_and_load("Classify sentiment as positive or negative")
33
- fn("I love this!") # "positive"
34
33
  ```
35
34
 
36
35
  If you specifically want the smaller browser-compatible runtime, pass `compiler="paw-4b-gpt2"`. Otherwise, omit `compiler` and let the server default decide.
@@ -42,7 +41,11 @@ Use the hosted API for fast inference in around 150 ms, without a local model do
42
41
  ```python
43
42
  import programasweights as paw
44
43
 
45
- with paw.function("email-triage", remote=True) as remote_fn:
44
+ with paw.compile_and_load(
45
+ "Classify if a message needs immediate attention or can wait. "
46
+ "Return only 'immediate' or 'wait'.",
47
+ remote=True,
48
+ ) as remote_fn:
46
49
  print(remote_fn("Urgent: the server is down!"))
47
50
  ```
48
51
 
@@ -15,22 +15,21 @@ pip install programasweights --extra-index-url https://pypi.programasweights.com
15
15
  ```python
16
16
  import programasweights as paw
17
17
 
18
- # Use a pre-compiled function (downloads once, runs locally forever)
19
- fn = paw.function("email-triage")
18
+ # Compile and load your own function
19
+ fn = paw.compile_and_load(
20
+ "Classify if a message needs immediate attention or can wait. "
21
+ "Return only 'immediate' or 'wait'."
22
+ )
20
23
  fn("Urgent: the server is down!") # "immediate"
21
24
  fn("Newsletter: spring picnic") # "wait"
22
25
 
23
- # Compile your own from a description
26
+ # Compile once and save the program ID
24
27
  program = paw.compile(
25
- "Fix malformed JSON: repair missing quotes and trailing commas",
26
- slug="json-fixer" # optional: creates username/json-fixer handle
28
+ "Fix malformed JSON: repair missing quotes and trailing commas"
27
29
  )
28
- fn = paw.function(program.slug) # or paw.function(program.id)
30
+ print(program.id) # Save this ID for future runs
31
+ fn = paw.function(program.id)
29
32
  fn("{name: 'Alice',}") # '{"name":"Alice"}'
30
-
31
- # Or compile and load in one step
32
- fn = paw.compile_and_load("Classify sentiment as positive or negative")
33
- fn("I love this!") # "positive"
34
33
  ```
35
34
 
36
35
  If you specifically want the smaller browser-compatible runtime, pass `compiler="paw-4b-gpt2"`. Otherwise, omit `compiler` and let the server default decide.
@@ -42,7 +41,11 @@ Use the hosted API for fast inference in around 150 ms, without a local model do
42
41
  ```python
43
42
  import programasweights as paw
44
43
 
45
- with paw.function("email-triage", remote=True) as remote_fn:
44
+ with paw.compile_and_load(
45
+ "Classify if a message needs immediate attention or can wait. "
46
+ "Return only 'immediate' or 'wait'.",
47
+ remote=True,
48
+ ) as remote_fn:
46
49
  print(remote_fn("Urgent: the server is down!"))
47
50
  ```
48
51
 
@@ -5,12 +5,16 @@ functions that run locally.
5
5
  Quick start:
6
6
  import programasweights as paw
7
7
 
8
- # Use a pre-compiled function (downloads once, runs locally forever)
9
- fn = paw.function("email-triage")
8
+ # Compile and load your own function
9
+ fn = paw.compile_and_load(
10
+ "Classify if a message needs immediate attention or can wait. "
11
+ "Return only 'immediate' or 'wait'."
12
+ )
10
13
  fn("Urgent: server is down!") # "immediate"
11
14
 
12
- # Compile your own from a description
15
+ # Compile once and save the program ID
13
16
  program = paw.compile("Fix malformed JSON: repair missing quotes and trailing commas")
17
+ print(program.id) # Save this ID for future runs
14
18
  fn = paw.function(program.id)
15
19
  fn("{name: 'Alice',}") # '{"name":"Alice"}'
16
20
 
@@ -27,7 +31,7 @@ try:
27
31
  from importlib.metadata import version as _meta_version
28
32
  __version__ = _meta_version("programasweights")
29
33
  except Exception:
30
- __version__ = "0.4.8"
34
+ __version__ = "0.4.10"
31
35
 
32
36
  from ._output import ProgressCallback, ProgressEvent, report_progress
33
37
  from .cache import CachedProgram
@@ -4,10 +4,10 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "programasweights"
7
- version = "0.4.8"
7
+ version = "0.4.10"
8
8
  description = "Compile natural language specifications into neural programs that run locally via llama.cpp."
9
9
  readme = "PYPI_README.md"
10
- requires-python = ">=3.9"
10
+ requires-python = ">=3.8"
11
11
  authors = [
12
12
  { name = "ProgramAsWeights", email = "support@programasweights.com" }
13
13
  ]
@@ -19,11 +19,13 @@ classifiers = [
19
19
  "Intended Audience :: Science/Research",
20
20
  "License :: OSI Approved :: MIT License",
21
21
  "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.8",
22
23
  "Programming Language :: Python :: 3.9",
23
24
  "Programming Language :: Python :: 3.10",
24
25
  "Programming Language :: Python :: 3.11",
25
26
  "Programming Language :: Python :: 3.12",
26
27
  "Programming Language :: Python :: 3.13",
28
+ "Programming Language :: Python :: 3.14",
27
29
  "Topic :: Scientific/Engineering :: Artificial Intelligence",
28
30
  "Topic :: Software Development :: Libraries :: Python Modules",
29
31
  ]