spawnllm 0.13.4__tar.gz → 0.15.0__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 (34) hide show
  1. {spawnllm-0.13.4 → spawnllm-0.15.0}/PKG-INFO +1 -1
  2. {spawnllm-0.13.4 → spawnllm-0.15.0}/pyproject.toml +1 -1
  3. {spawnllm-0.13.4 → spawnllm-0.15.0}/pyproject.toml.orig +1 -1
  4. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/__init__.py +2 -1
  5. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/_core/spawnllm_core.wasm +0 -0
  6. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/codex.py +2 -2
  7. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/openai_endpoint.py +18 -3
  8. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/types.py +4 -1
  9. {spawnllm-0.13.4 → spawnllm-0.15.0}/LICENSE +0 -0
  10. {spawnllm-0.13.4 → spawnllm-0.15.0}/README.md +0 -0
  11. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/__main__.py +0 -0
  12. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/_core/__init__.py +0 -0
  13. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/__init__.py +0 -0
  14. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/apple.py +0 -0
  15. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/base.py +0 -0
  16. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/claude.py +0 -0
  17. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/claude_sdk.py +0 -0
  18. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/gemini.py +0 -0
  19. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/mlx.py +0 -0
  20. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/backends/registry.py +0 -0
  21. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/call.py +0 -0
  22. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/cli.py +0 -0
  23. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/extract.py +0 -0
  24. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/mlx/__init__.py +0 -0
  25. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/mlx/codec.py +0 -0
  26. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/mlx/engine.py +0 -0
  27. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/mlx/fuse.py +0 -0
  28. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/mlx/patches.py +0 -0
  29. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/proc.py +0 -0
  30. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/py.typed +0 -0
  31. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/response.py +0 -0
  32. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/run.py +0 -0
  33. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/spec.py +0 -0
  34. {spawnllm-0.13.4 → spawnllm-0.15.0}/spawnllm/structured.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spawnllm
3
- Version: 0.13.4
3
+ Version: 0.15.0
4
4
  Summary: Delete your subprocess wrappers around claude, codex, and gemini.
5
5
  Keywords:
6
6
  Author: Yasyf Mohamedali
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "spawnllm"
3
- version = "0.13.4"
3
+ version = "0.15.0"
4
4
  description = "Delete your subprocess wrappers around claude, codex, and gemini."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "spawnllm"
3
3
  # Inert sentinel: the real version is set from the release tag (uv version --frozen).
4
- version = "0.13.4"
4
+ version = "0.15.0"
5
5
  description = "Delete your subprocess wrappers around claude, codex, and gemini."
6
6
  readme = "README.md"
7
7
  license = "MIT"
@@ -34,7 +34,7 @@ from spawnllm.extract import extract, extract_sync
34
34
  from spawnllm.response import DiscardedAttempt, Error, Output, Response, Result
35
35
  from spawnllm.run import run, run_sync
36
36
  from spawnllm.spec import AppleConfig, ClaudeConfig, CodexConfig, GeminiConfig, RunSpec
37
- from spawnllm.types import ProviderName, TModel, TSpecialty
37
+ from spawnllm.types import ProviderName, TModel, TReasoningEffort, TSpecialty
38
38
 
39
39
  __all__ = [
40
40
  "AntigravityCliBackend",
@@ -66,6 +66,7 @@ __all__ = [
66
66
  "Result",
67
67
  "RunSpec",
68
68
  "TModel",
69
+ "TReasoningEffort",
69
70
  "TSpecialty",
70
71
  "call",
71
72
  "call_sync",
@@ -29,8 +29,8 @@ class CodexCliBackend(CliBackend):
29
29
  """
30
30
 
31
31
  models: ClassVar[dict[TModel, str]] = {
32
- "small": "gpt-5.6-luna:low",
33
- "medium": "gpt-5.6-luna:medium",
32
+ "small": "gpt-6-luna:low",
33
+ "medium": "gpt-6-luna:medium",
34
34
  "large": "gpt-5.5:medium",
35
35
  }
36
36
  provider: ClassVar[ProviderName] = "codex"
@@ -12,7 +12,7 @@ if TYPE_CHECKING:
12
12
  from spawnllm.backends.base import BackendStatus
13
13
  from spawnllm.response import Response
14
14
  from spawnllm.spec import RunSpec
15
- from spawnllm.types import ProviderName, TModel
15
+ from spawnllm.types import ProviderName, TModel, TReasoningEffort
16
16
 
17
17
 
18
18
  class OpenAiEndpointBackend(LlmBackend):
@@ -30,6 +30,9 @@ class OpenAiEndpointBackend(LlmBackend):
30
30
  model: The literal model id sent in every request body.
31
31
  api_key: Bearer token for the `Authorization` header; defaults to
32
32
  `"local"` for self-hosted servers that ignore it.
33
+ reasoning_effort: The `reasoning_effort` sent in every request body;
34
+ `None` omits it and leaves the server's default, which on a
35
+ reasoning model can spend most of a call's latency thinking.
33
36
  transport: Async transport injected into the `httpx.AsyncClient` used by
34
37
  `aexecute` — e.g. a record/replay caching transport; `None` uses
35
38
  httpx's default transport. The synchronous `execute` path always uses
@@ -44,17 +47,29 @@ class OpenAiEndpointBackend(LlmBackend):
44
47
  schema_dialect: ClassVar[str | None] = "openai"
45
48
 
46
49
  def __init__(
47
- self, base_url: str, model: str, *, api_key: str = "local", transport: httpx.AsyncBaseTransport | None = None
50
+ self,
51
+ base_url: str,
52
+ model: str,
53
+ *,
54
+ api_key: str = "local",
55
+ reasoning_effort: TReasoningEffort | None = None,
56
+ transport: httpx.AsyncBaseTransport | None = None,
48
57
  ) -> None:
49
58
  self.base_url = base_url.rstrip("/")
50
59
  self.model = model
51
60
  self.api_key = api_key
61
+ self.reasoning_effort = reasoning_effort
52
62
  self.transport = transport
53
63
  self.models: dict[TModel, str] = {"small": model, "medium": model, "large": model}
54
64
 
55
65
  def openai_section(self) -> dict[str, Any]:
56
66
  """Return the `openai_endpoint` wire section the core turns into the HTTP request."""
57
- return {"api_key": self.api_key, "base_url": self.base_url, "model": self.model}
67
+ return {
68
+ "api_key": self.api_key,
69
+ "base_url": self.base_url,
70
+ "model": self.model,
71
+ "reasoning_effort": self.reasoning_effort,
72
+ }
58
73
 
59
74
  def resolve(self, resp: httpx.Response, spec: RunSpec) -> Response:
60
75
  return self.to_response(
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from typing import Literal
6
6
 
7
- __all__ = ["ProviderName", "TModel", "TSettingSource", "TSpecialty"]
7
+ __all__ = ["ProviderName", "TModel", "TReasoningEffort", "TSettingSource", "TSpecialty"]
8
8
 
9
9
  TSpecialty = Literal["debugging", "review", "general"]
10
10
  """Task specialty; `LlmBackends.for_specialty` maps each to its registered backend."""
@@ -15,5 +15,8 @@ TSettingSource = Literal["user", "project", "local"]
15
15
  TModel = Literal["small", "medium", "large"]
16
16
  """Abstract model tier; each backend maps it to a provider-specific model name."""
17
17
 
18
+ TReasoningEffort = Literal["none", "minimal", "low", "medium", "high", "xhigh"]
19
+ """A `reasoning_effort` an OpenAI-compatible endpoint accepts; `OpenAiEndpointBackend` sends it with every request."""
20
+
18
21
  ProviderName = Literal["claude", "claude-sdk", "codex", "gemini", "antigravity", "mlx", "apple", "openai_endpoint"]
19
22
  """Backend provider identifier; keys the per-backend `provider_configs` on a `RunSpec`."""
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes