lm-deluge 0.0.79__tar.gz → 0.0.80__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.
- {lm_deluge-0.0.79/src/lm_deluge.egg-info → lm_deluge-0.0.80}/PKG-INFO +1 -1
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/pyproject.toml +1 -1
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/anthropic.py +43 -16
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/gemini.py +53 -40
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/client.py +5 -5
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/config.py +3 -1
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/anthropic.py +15 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/warnings.py +2 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80/src/lm_deluge.egg-info}/PKG-INFO +1 -1
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/LICENSE +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/README.md +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/setup.cfg +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/__init__.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/__init__.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/base.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/bedrock.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/chat_reasoning.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/common.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/deprecated/bedrock.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/deprecated/cohere.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/deprecated/deepseek.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/deprecated/mistral.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/deprecated/vertex.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/mistral.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/openai.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/api_requests/response.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/batches.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/built_in_tools/anthropic/__init__.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/built_in_tools/anthropic/bash.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/built_in_tools/anthropic/computer_use.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/built_in_tools/anthropic/editor.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/built_in_tools/base.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/built_in_tools/openai.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/cache.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/cli.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/embed.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/errors.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/file.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/image.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/__init__.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/classify.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/extract.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/filesystem.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/locate.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/ocr.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/sandbox.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/score.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/subagents.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/todos.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/llm_tools/translate.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/mock_openai.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/__init__.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/bedrock.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/cerebras.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/cohere.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/deepseek.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/fireworks.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/google.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/grok.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/groq.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/kimi.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/meta.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/minimax.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/mistral.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/openai.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/openrouter.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/models/together.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/presets/cerebras.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/presets/meta.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/prompt.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/request_context.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/rerank.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/tool.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/tracker.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/usage.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/util/harmony.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/util/json.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/util/logprobs.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/util/schema.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/util/spatial.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/util/validation.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/util/xml.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge.egg-info/SOURCES.txt +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge.egg-info/dependency_links.txt +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge.egg-info/requires.txt +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge.egg-info/top_level.txt +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/tests/test_builtin_tools.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/tests/test_file_upload.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/tests/test_filesystem.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/tests/test_filesystem_live.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/tests/test_mock_openai.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/tests/test_native_mcp_server.py +0 -0
- {lm_deluge-0.0.79 → lm_deluge-0.0.80}/tests/test_openrouter_generic.py +0 -0
|
@@ -16,6 +16,7 @@ from lm_deluge.util.schema import (
|
|
|
16
16
|
prepare_output_schema,
|
|
17
17
|
transform_schema_for_anthropic,
|
|
18
18
|
)
|
|
19
|
+
from lm_deluge.warnings import maybe_warn
|
|
19
20
|
|
|
20
21
|
from ..models import APIModel
|
|
21
22
|
from .base import APIRequestBase, APIResponse
|
|
@@ -62,20 +63,45 @@ def _build_anthropic_request(
|
|
|
62
63
|
"max_tokens": sampling_params.max_new_tokens,
|
|
63
64
|
}
|
|
64
65
|
|
|
66
|
+
if model.id == "claude-4.5-opus" and sampling_params.global_effort:
|
|
67
|
+
request_json["effort"] = sampling_params.global_effort
|
|
68
|
+
_add_beta(base_headers, "effort-2025-11-24")
|
|
69
|
+
|
|
65
70
|
# handle thinking
|
|
66
|
-
if model.reasoning_model
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
sampling_params.reasoning_effort
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
71
|
+
if model.reasoning_model:
|
|
72
|
+
if (
|
|
73
|
+
sampling_params.thinking_budget is not None
|
|
74
|
+
and sampling_params.reasoning_effort is not None
|
|
75
|
+
):
|
|
76
|
+
maybe_warn("WARN_THINKING_BUDGET_AND_REASONING_EFFORT")
|
|
77
|
+
|
|
78
|
+
if sampling_params.thinking_budget is not None:
|
|
79
|
+
budget = sampling_params.thinking_budget
|
|
80
|
+
elif sampling_params.reasoning_effort is not None:
|
|
81
|
+
# translate reasoning effort of low, medium, high to budget tokens
|
|
82
|
+
budget = {
|
|
83
|
+
"none": 0,
|
|
84
|
+
"minimal": 256,
|
|
85
|
+
"low": 1024,
|
|
86
|
+
"medium": 4096,
|
|
87
|
+
"high": 16384,
|
|
88
|
+
}.get(sampling_params.reasoning_effort)
|
|
89
|
+
assert isinstance(budget, int)
|
|
90
|
+
else:
|
|
91
|
+
budget = 0
|
|
92
|
+
|
|
93
|
+
if budget > 0:
|
|
94
|
+
request_json["thinking"] = {
|
|
95
|
+
"type": "enabled",
|
|
96
|
+
"budget_tokens": budget,
|
|
97
|
+
}
|
|
98
|
+
if "top_p" in request_json:
|
|
99
|
+
request_json["top_p"] = max(request_json["top_p"], 0.95)
|
|
100
|
+
request_json["temperature"] = 1.0
|
|
101
|
+
request_json["max_tokens"] += budget
|
|
102
|
+
else:
|
|
103
|
+
request_json["thinking"] = {"type": "disabled"}
|
|
104
|
+
|
|
79
105
|
else:
|
|
80
106
|
request_json["thinking"] = {"type": "disabled"}
|
|
81
107
|
if sampling_params.reasoning_effort:
|
|
@@ -83,10 +109,11 @@ def _build_anthropic_request(
|
|
|
83
109
|
if system_message is not None:
|
|
84
110
|
request_json["system"] = system_message
|
|
85
111
|
|
|
86
|
-
# handle temp + top_p for opus 4.1/sonnet 4.5
|
|
112
|
+
# handle temp + top_p for opus 4.1/sonnet 4.5.
|
|
113
|
+
# TODO: make clearer / more user-friendly so there can be NotGiven
|
|
114
|
+
# and user can control which one they want to use
|
|
87
115
|
if "4-1" in model.name or "4-5" in model.name:
|
|
88
|
-
|
|
89
|
-
request_json.pop("top_p")
|
|
116
|
+
request_json.pop("top_p")
|
|
90
117
|
|
|
91
118
|
# Handle structured outputs (output_format)
|
|
92
119
|
if context.output_schema:
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import os
|
|
3
|
-
from typing import Any
|
|
4
3
|
|
|
5
4
|
from aiohttp import ClientResponse
|
|
6
5
|
|
|
@@ -52,47 +51,61 @@ async def _build_gemini_request(
|
|
|
52
51
|
request_json["systemInstruction"] = {"parts": [{"text": system_message}]}
|
|
53
52
|
|
|
54
53
|
# Handle reasoning models (thinking)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
is_gemini_3 = "gemini-3" in model.name.lower()
|
|
55
|
+
if is_gemini_3:
|
|
56
|
+
# gemini3 MUST think
|
|
57
|
+
if not sampling_params.reasoning_effort:
|
|
58
|
+
maybe_warn("WARN_GEMINI3_NO_REASONING")
|
|
59
|
+
effort = "low"
|
|
60
|
+
else:
|
|
61
|
+
level_map = {
|
|
62
|
+
"none": "low",
|
|
63
|
+
"minimal": "low",
|
|
64
|
+
"low": "low",
|
|
65
|
+
"medium": "high", # change when supported
|
|
66
|
+
"high": "high",
|
|
67
|
+
}
|
|
68
|
+
effort = level_map[sampling_params.reasoning_effort]
|
|
69
|
+
thinking_config = {"thinkingLevel": effort}
|
|
70
|
+
request_json["generationConfig"]["thinkingConfig"] = thinking_config
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
elif model.reasoning_model:
|
|
73
|
+
if (
|
|
74
|
+
sampling_params.thinking_budget is not None
|
|
75
|
+
and sampling_params.reasoning_effort is not None
|
|
76
|
+
):
|
|
77
|
+
maybe_warn("WARN_THINKING_BUDGET_AND_REASONING_EFFORT")
|
|
78
|
+
|
|
79
|
+
if (
|
|
80
|
+
sampling_params.thinking_budget is not None
|
|
81
|
+
and sampling_params.thinking_budget > 0
|
|
82
|
+
):
|
|
83
|
+
thinking_config = {
|
|
84
|
+
"includeThoughts": True,
|
|
85
|
+
"thinkingBudget": sampling_params.thinking_budget,
|
|
86
|
+
}
|
|
87
|
+
elif sampling_params.thinking_budget == -1:
|
|
88
|
+
# dynamic thinking
|
|
89
|
+
thinking_config = {"includeThoughts": True, "thinkingBudget": -1}
|
|
90
|
+
elif sampling_params.reasoning_effort not in [None, "none"]:
|
|
91
|
+
level_map = {
|
|
92
|
+
"minimal": 256,
|
|
93
|
+
"low": 1024,
|
|
94
|
+
"medium": 4096,
|
|
95
|
+
"high": 16384,
|
|
96
|
+
}
|
|
97
|
+
assert sampling_params.reasoning_effort in level_map
|
|
98
|
+
budget = level_map[sampling_params.reasoning_effort]
|
|
99
|
+
if "flash-lite" in model.id:
|
|
100
|
+
budget = max(budget, 512)
|
|
101
|
+
thinking_config = {"includeThoughts": True, "thinkingBudget": budget}
|
|
102
|
+
elif "2.5-pro" in model.id:
|
|
103
|
+
# 2.5 pro must think.
|
|
104
|
+
thinking_config = {"includeThoughts": True, "thinkingBudget": 128}
|
|
77
105
|
else:
|
|
78
|
-
#
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
# Explicitly disable thoughts when no effort is requested
|
|
82
|
-
thinking_config = {"includeThoughts": False, "thinkingBudget": budget}
|
|
83
|
-
else:
|
|
84
|
-
thinking_config = {"includeThoughts": True}
|
|
85
|
-
if (
|
|
86
|
-
effort in {"minimal", "low", "medium", "high"}
|
|
87
|
-
and "flash" in model.id
|
|
88
|
-
):
|
|
89
|
-
budget = {
|
|
90
|
-
"minimal": 256,
|
|
91
|
-
"low": 1024,
|
|
92
|
-
"medium": 4096,
|
|
93
|
-
"high": 16384,
|
|
94
|
-
}[effort]
|
|
95
|
-
thinking_config["thinkingBudget"] = budget
|
|
106
|
+
# no thoughts head empty
|
|
107
|
+
thinking_config = {"includeThoughts": False, "thinkingBudget": 0}
|
|
108
|
+
|
|
96
109
|
request_json["generationConfig"]["thinkingConfig"] = thinking_config
|
|
97
110
|
|
|
98
111
|
else:
|
|
@@ -79,7 +79,7 @@ class _LLMClient(BaseModel):
|
|
|
79
79
|
background: bool = False
|
|
80
80
|
# sampling params - if provided, and sampling_params is not,
|
|
81
81
|
# these override the defaults
|
|
82
|
-
temperature: float = 0
|
|
82
|
+
temperature: float = 1.0
|
|
83
83
|
top_p: float = 1.0
|
|
84
84
|
json_mode: bool = False
|
|
85
85
|
max_new_tokens: int = 512
|
|
@@ -337,7 +337,7 @@ class _LLMClient(BaseModel):
|
|
|
337
337
|
if "sampling_params" not in data or len(data.get("sampling_params", [])) == 0:
|
|
338
338
|
data["sampling_params"] = [
|
|
339
339
|
SamplingParams(
|
|
340
|
-
temperature=data.get("temperature", 0
|
|
340
|
+
temperature=data.get("temperature", 1.0),
|
|
341
341
|
top_p=data.get("top_p", 1.0),
|
|
342
342
|
json_mode=data.get("json_mode", False),
|
|
343
343
|
max_new_tokens=data.get("max_new_tokens", 512),
|
|
@@ -1067,7 +1067,7 @@ def LLMClient(
|
|
|
1067
1067
|
extra_headers: dict[str, str] | None = None,
|
|
1068
1068
|
use_responses_api: bool = False,
|
|
1069
1069
|
background: bool = False,
|
|
1070
|
-
temperature: float = 0
|
|
1070
|
+
temperature: float = 1.0,
|
|
1071
1071
|
top_p: float = 1.0,
|
|
1072
1072
|
json_mode: bool = False,
|
|
1073
1073
|
max_new_tokens: int = 512,
|
|
@@ -1096,7 +1096,7 @@ def LLMClient(
|
|
|
1096
1096
|
extra_headers: dict[str, str] | None = None,
|
|
1097
1097
|
use_responses_api: bool = False,
|
|
1098
1098
|
background: bool = False,
|
|
1099
|
-
temperature: float = 0
|
|
1099
|
+
temperature: float = 1.0,
|
|
1100
1100
|
top_p: float = 1.0,
|
|
1101
1101
|
json_mode: bool = False,
|
|
1102
1102
|
max_new_tokens: int = 512,
|
|
@@ -1124,7 +1124,7 @@ def LLMClient(
|
|
|
1124
1124
|
extra_headers: dict[str, str] | None = None,
|
|
1125
1125
|
use_responses_api: bool = False,
|
|
1126
1126
|
background: bool = False,
|
|
1127
|
-
temperature: float = 0
|
|
1127
|
+
temperature: float = 1.0,
|
|
1128
1128
|
top_p: float = 1.0,
|
|
1129
1129
|
json_mode: bool = False,
|
|
1130
1130
|
max_new_tokens: int = 512,
|
|
@@ -4,11 +4,13 @@ from pydantic import BaseModel
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class SamplingParams(BaseModel):
|
|
7
|
-
temperature: float =
|
|
7
|
+
temperature: float = 1.0 # more typical for new models
|
|
8
8
|
top_p: float = 1.0
|
|
9
9
|
json_mode: bool = False
|
|
10
10
|
max_new_tokens: int = 2_048
|
|
11
|
+
global_effort: Literal["low", "medium", "high"] = "high" # for opus-4.5
|
|
11
12
|
reasoning_effort: Literal["low", "medium", "high", "minimal", "none", None] = None
|
|
13
|
+
thinking_budget: int | None = None
|
|
12
14
|
logprobs: bool = False
|
|
13
15
|
top_logprobs: int | None = None
|
|
14
16
|
strict_tools: bool = True
|
|
@@ -10,6 +10,19 @@ ANTHROPIC_MODELS = {
|
|
|
10
10
|
# ░███
|
|
11
11
|
# █████
|
|
12
12
|
#
|
|
13
|
+
"claude-4.5-opus": {
|
|
14
|
+
"id": "claude-4.5-opus",
|
|
15
|
+
"name": "claude-opus-4-5-20251101",
|
|
16
|
+
"api_base": "https://api.anthropic.com/v1",
|
|
17
|
+
"api_key_env_var": "ANTHROPIC_API_KEY",
|
|
18
|
+
"supports_json": False,
|
|
19
|
+
"api_spec": "anthropic",
|
|
20
|
+
"input_cost": 5.0,
|
|
21
|
+
"cached_input_cost": 0.50,
|
|
22
|
+
"cache_write_cost": 6.25,
|
|
23
|
+
"output_cost": 25.0,
|
|
24
|
+
"reasoning_model": True,
|
|
25
|
+
},
|
|
13
26
|
"claude-4.5-haiku": {
|
|
14
27
|
"id": "claude-4.5-haiku",
|
|
15
28
|
"name": "claude-haiku-4-5-20251001",
|
|
@@ -21,6 +34,7 @@ ANTHROPIC_MODELS = {
|
|
|
21
34
|
"cached_input_cost": 0.10,
|
|
22
35
|
"cache_write_cost": 1.25,
|
|
23
36
|
"output_cost": 3.0,
|
|
37
|
+
"reasoning_model": True,
|
|
24
38
|
},
|
|
25
39
|
"claude-4.5-sonnet": {
|
|
26
40
|
"id": "claude-4.5-sonnet",
|
|
@@ -33,6 +47,7 @@ ANTHROPIC_MODELS = {
|
|
|
33
47
|
"cached_input_cost": 0.30,
|
|
34
48
|
"cache_write_cost": 3.75,
|
|
35
49
|
"output_cost": 15.0,
|
|
50
|
+
"reasoning_model": True,
|
|
36
51
|
},
|
|
37
52
|
"claude-4.1-opus": {
|
|
38
53
|
"id": "claude-4.1-opus",
|
|
@@ -11,6 +11,8 @@ WARNINGS: dict[str, str] = {
|
|
|
11
11
|
"WARN_MINIMAL_TO_NONE": "GPT-5.1 models don't support 'minimal' reasoning effort. Converting to 'none' for {model_name}.",
|
|
12
12
|
"WARN_MEDIA_RESOLUTION_UNSUPPORTED": "media_resolution parameter is only supported for Gemini 3 models, ignoring for {model_name}.",
|
|
13
13
|
"WARN_GEMINI3_MISSING_SIGNATURE": "Gemini 3 thought signature missing in {part_type}, injecting dummy signature 'context_engineering_is_the_way_to_go' to avoid API error.",
|
|
14
|
+
"WARN_GEMINI3_NO_REASONING": "Gemini 3 requires reasoning (thinkingConfig). Setting thinkingConfig to low.",
|
|
15
|
+
"WARN_THINKING_BUDGET_AND_REASONING_EFFORT": "`reasoning_effort` and `thinking_budget` both provided. `thinking_budget` will take priority.",
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
{lm_deluge-0.0.79 → lm_deluge-0.0.80}/src/lm_deluge/built_in_tools/anthropic/computer_use.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|