whosellm 0.2.6__tar.gz → 0.2.7__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.
Potentially problematic release.
This version of whosellm might be problematic. Click here for more details.
- {whosellm-0.2.6 → whosellm-0.2.7}/.bumpversion.toml +1 -1
- {whosellm-0.2.6 → whosellm-0.2.7}/PKG-INFO +1 -1
- {whosellm-0.2.6 → whosellm-0.2.7}/pyproject.toml +1 -1
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_deepseek.py +35 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_variant_priority_config.py +2 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/uv.lock +1 -1
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/__init__.py +1 -1
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/deepseek/deepseek_official.py +29 -4
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/commands/interview.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/projects/-Users-jqq-PycharmProjects-llmeta/memory/MEMORY.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/projects/-Users-jqq-PycharmProjects-llmeta/memory/feedback_use_uv.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/settings.json +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/code-review/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/create-skill/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/e2e-metadata/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/evolve/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/fix-review/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/release/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/alibaba.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/anthropic.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/deepseek.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/gemini.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/openai.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/others.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/vidu.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/zhipu.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/update-provider-model/SKILL.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/update-provider-model/testing.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.coveragerc +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.github/workflows/publish.yml +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.github/workflows/tests.yml +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.gitignore +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.windsurf/workflows/addmodel.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.windsurf/workflows/arch.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/.windsurf/workflows/testllmeta.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/CHANGELOG.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/CLAUDE.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/LICENSE +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/README.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/docs/add_new_model_family.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/docs/refactor_proposal.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/docs/spec_model_family_redesign.md +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/examples/advanced_usage.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/examples/basic_usage.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/mypy.ini +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/pytest.ini +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/ruff.toml +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/e2e/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/e2e/conftest.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/e2e/test_anthropic.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/e2e/test_google.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/e2e/test_openai.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/e2e/test_zhipu.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_anthropic.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_deepseek_tencent.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_gemini.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm41v_thinking.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm45.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm45v.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm46.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm46v.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm5.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm53.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_glm5v_turbo.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_gpt3_5.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_gpt4_1.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_gpt4o.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_gpt5.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_gpt6.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_o1.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_o3.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_o4.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_qwen.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_qwen3_vl_models.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_qwen_ollama.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/models/families/test_qwen_plus.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_auto_register.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_claude_4x_versions.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_llmeta.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_model_version.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_provider.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_registry_merge.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/tests/test_specific_patterns.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/capabilities.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/model_version.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/base.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/config.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/dynamic_enum.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/alibaba.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/anthropic.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/deepseek/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/deepseek/tencent.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/gemini.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/__init__.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_3_5.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_4.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_4_1.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_4o.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_5.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_5_1.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_5_2.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_5_3.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_5_4.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_5_5.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_5_6.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_gpt_6.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_o1.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_o3.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/openai/openai_o4.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/others.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/vidu.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/families/zhipu.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/patterns.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/models/registry.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/provider.py +0 -0
- {whosellm-0.2.6 → whosellm-0.2.7}/whosellm/py.typed +0 -0
|
@@ -174,3 +174,38 @@ def test_deepseek_versioned_pattern_matches_official_family() -> None:
|
|
|
174
174
|
assert model_v32.provider == Provider.DEEPSEEK
|
|
175
175
|
assert model_v32.version == "3.2"
|
|
176
176
|
assert model_v32.variant == "exp"
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def test_deepseek_v4_flash_vision_exp_specific_model() -> None:
|
|
180
|
+
"""验证 deepseek-v4-flash-vision-exp 配置(多模态实验版)"""
|
|
181
|
+
config = get_specific_model_config("deepseek-v4-flash-vision-exp")
|
|
182
|
+
assert config is not None
|
|
183
|
+
version, variant, capabilities = config
|
|
184
|
+
assert version == "4.0"
|
|
185
|
+
assert variant == "flash-vision-exp"
|
|
186
|
+
assert capabilities is not None
|
|
187
|
+
# 图像输入 / image input
|
|
188
|
+
assert capabilities.supports_vision is True
|
|
189
|
+
# 双模式,默认思考 / dual mode, thinking by default
|
|
190
|
+
assert capabilities.supports_thinking is True
|
|
191
|
+
assert capabilities.supports_function_calling is True
|
|
192
|
+
assert capabilities.supports_streaming is True
|
|
193
|
+
assert capabilities.supports_json_outputs is True
|
|
194
|
+
assert capabilities.supports_structured_outputs is False
|
|
195
|
+
# 不支持视频输入 / no video input
|
|
196
|
+
assert capabilities.supports_video is False
|
|
197
|
+
assert capabilities.max_tokens == 384_000
|
|
198
|
+
assert capabilities.context_window == 1_000_000
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def test_deepseek_v4_flash_vision_exp_llmeta() -> None:
|
|
202
|
+
"""验证 deepseek-v4-flash-vision-exp LLMeta 解析"""
|
|
203
|
+
from whosellm import LLMeta
|
|
204
|
+
|
|
205
|
+
model = LLMeta("deepseek-v4-flash-vision-exp")
|
|
206
|
+
assert model.provider == Provider.DEEPSEEK
|
|
207
|
+
assert model.family == ModelFamily.DEEPSEEK
|
|
208
|
+
assert model.version == "4.0"
|
|
209
|
+
assert model.variant == "flash-vision-exp"
|
|
210
|
+
assert model.capabilities.context_window == 1_000_000
|
|
211
|
+
assert model.capabilities.supports_vision is True
|
|
@@ -144,6 +144,8 @@ MODEL_VARIANT_SAMPLES: dict[ModelFamily, dict[str, list[str]]] = {
|
|
|
144
144
|
ModelFamily.DEEPSEEK: {
|
|
145
145
|
"chat": ["deepseek-chat", "deepseek-chat-beta", "deepseek-chat-v3.2-exp"],
|
|
146
146
|
"reasoner": ["deepseek-reasoner"],
|
|
147
|
+
# 多模态实验版 / multimodal experimental edition
|
|
148
|
+
"flash-vision-exp": ["deepseek-v4-flash-vision-exp"],
|
|
147
149
|
},
|
|
148
150
|
ModelFamily.ABAB: {
|
|
149
151
|
"mini": ["abab-mini"],
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
"""
|
|
5
5
|
DeepSeek 官方模型家族配置 / DeepSeek official model family configuration
|
|
6
6
|
|
|
7
|
-
当前主力:deepseek-v4-flash / deepseek-v4-pro
|
|
8
|
-
|
|
9
|
-
Current primary models: deepseek-v4-flash / deepseek-v4-pro
|
|
10
|
-
both thinking and non-thinking modes supported
|
|
7
|
+
当前主力:deepseek-v4-flash / deepseek-v4-pro / deepseek-v4-flash-vision-exp
|
|
8
|
+
(1M 上下文,384K 最大输出,支持思考与非思考双模式;vision-exp 为多模态实验版)。
|
|
9
|
+
Current primary models: deepseek-v4-flash / deepseek-v4-pro / deepseek-v4-flash-vision-exp
|
|
10
|
+
(1M context, 384K max output, both thinking and non-thinking modes supported;
|
|
11
|
+
vision-exp is the multimodal experimental edition).
|
|
11
12
|
|
|
12
13
|
兼容别名:deepseek-chat / deepseek-reasoner(官方宣布未来将废弃,当前分别对应
|
|
13
14
|
deepseek-v4-flash 的非思考与思考模式)。
|
|
@@ -73,6 +74,30 @@ DEEPSEEK = ModelFamilyConfig(
|
|
|
73
74
|
"deepseek-v4-pro",
|
|
74
75
|
],
|
|
75
76
|
),
|
|
77
|
+
# 多模态实验版:deepseek-v4-flash-vision-exp(2026-09 上线)
|
|
78
|
+
# Multimodal experimental: DeepSeek-V4-Flash-Vision-Exp
|
|
79
|
+
# 官方规格:图像输入(JPEG/PNG/GIF/WebP),文本输出;非思考/思考双模式(默认思考);
|
|
80
|
+
# 1M ctx / 384K out;Json Output / Tool Calls / Responses API / Anthropic API ✓;FIM ✗;
|
|
81
|
+
# 价格与 v4-flash 相同;不支持视频输入
|
|
82
|
+
# Sources: https://api-docs.deepseek.com/quick_start/pricing + /guides/vision
|
|
83
|
+
"deepseek-v4-flash-vision-exp": SpecificModelConfig(
|
|
84
|
+
version_default="4.0",
|
|
85
|
+
variant_default="flash-vision-exp",
|
|
86
|
+
variant_priority=(0,),
|
|
87
|
+
capabilities=ModelCapabilities(
|
|
88
|
+
supports_thinking=True, # 双模式,默认思考 / dual mode, thinking by default
|
|
89
|
+
supports_vision=True, # 图像输入 / image input
|
|
90
|
+
supports_function_calling=True,
|
|
91
|
+
supports_streaming=True,
|
|
92
|
+
supports_json_outputs=True,
|
|
93
|
+
supports_structured_outputs=False,
|
|
94
|
+
max_tokens=384_000,
|
|
95
|
+
context_window=1_000_000,
|
|
96
|
+
),
|
|
97
|
+
patterns=[
|
|
98
|
+
"deepseek-v4-flash-vision-exp",
|
|
99
|
+
],
|
|
100
|
+
),
|
|
76
101
|
# 兼容别名:deepseek-chat → v4-flash 非思考模式
|
|
77
102
|
# Legacy alias: deepseek-chat → v4-flash non-thinking mode
|
|
78
103
|
"deepseek-chat": SpecificModelConfig(
|
|
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
|
{whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/anthropic.md
RENAMED
|
File without changes
|
{whosellm-0.2.6 → whosellm-0.2.7}/.claude/skills/review-provider-model/providers/deepseek.md
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
|
|
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
|