LLM-Bridge 2.0.2__tar.gz → 2.0.4__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.
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/PKG-INFO +2 -2
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/non_stream_claude_client.py +1 -1
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/stream_claude_client.py +1 -1
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/claude_client.py +6 -6
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/claude_client_factory.py +18 -14
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/openai_responses_client_factory.py +1 -1
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/resources/model_prices.json +43 -79
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/pyproject.toml +2 -2
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/single/config.py +8 -7
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/uv.lock +5 -5
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.gitattributes +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.github/workflows/pypi-publish.yaml +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.github/workflows/python-test.yaml +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.gitignore +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.run/batch.run.xml +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.run/pytest.run.xml +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.run/single.run.xml +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/LICENSE +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/MANIFEST.in +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/README.md +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/chat_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/claude_response_handler.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/claude_token_counter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/gemini_response_handler.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/gemini_token_counter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/non_stream_gemini_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/stream_gemini_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_completion/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_completion/non_stream_openai_completion_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_completion/stream_openai_completion_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/non_stream_openai_responses_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/openai_responses_response_handler.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/stream_openai_responses_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/non_stream_xai_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/stream_xai_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/xai_response_handler.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/gemini_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/openai_completion_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/openai_responses_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/xai_client.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/chat_client_factory.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/chat_message_converter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/media_processor.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/gemini_client_factory.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/openai_completion_client_factory.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/xai_client_factory.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/claude_message_converter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/gemini_message_converter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/openai_completion_message_converter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/openai_responses_message_converter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/xai_message_converter.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/file_fetch.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/code_file_extensions.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/document_processor.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/file_type_checker.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/message_processor.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/model_prices.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/resources/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/chat_response.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/message.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/claude_message.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/gemini_message.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/openai_completion_message.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/openai_responses_message.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/xai_message.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/serializer.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/tests/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/tests/file_type_checker_test.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/tests/model_prices_test.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/.env.example +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/batch/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/batch/batch.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/batch/config.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/keys.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/messages.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/single/__init__.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/single/single.py +0 -0
- {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: LLM-Bridge
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.4
|
|
4
4
|
Summary: A library that wraps multiple LLM providers into a consistent API while using each provider's native SDK internally, supporting multimodal I/O, file processing, and stream output.
|
|
5
5
|
Author-email: windsnow1025 <windsnow1025@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -9,7 +9,7 @@ Keywords: ai,llm
|
|
|
9
9
|
Classifier: Framework :: FastAPI
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Requires-Python: >=3.12
|
|
12
|
-
Requires-Dist: anthropic==0.
|
|
12
|
+
Requires-Dist: anthropic==0.96.0
|
|
13
13
|
Requires-Dist: docxlatex>=1.1.1
|
|
14
14
|
Requires-Dist: fastapi
|
|
15
15
|
Requires-Dist: google-genai==1.46.0
|
|
@@ -26,7 +26,7 @@ class StreamClaudeClient(ClaudeClient):
|
|
|
26
26
|
betas=self.betas,
|
|
27
27
|
tools=self.tools,
|
|
28
28
|
thinking=self.thinking,
|
|
29
|
-
|
|
29
|
+
output_config=self.output_config,
|
|
30
30
|
) as stream:
|
|
31
31
|
async for event in stream:
|
|
32
32
|
yield await response_handler.process_claude_stream_response(
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import AsyncGenerator
|
|
2
2
|
|
|
3
3
|
import anthropic
|
|
4
4
|
from anthropic import Omit
|
|
5
|
-
from anthropic.types import
|
|
6
|
-
from anthropic.types.beta import BetaToolUnionParam
|
|
5
|
+
from anthropic.types import AnthropicBetaParam
|
|
6
|
+
from anthropic.types.beta import BetaToolUnionParam, BetaOutputConfigParam, BetaThinkingConfigParam
|
|
7
7
|
|
|
8
8
|
from llm_bridge.client.chat_client import ChatClient
|
|
9
9
|
from llm_bridge.type.chat_response import ChatResponse
|
|
@@ -21,8 +21,8 @@ class ClaudeClient(ChatClient):
|
|
|
21
21
|
max_tokens: int,
|
|
22
22
|
betas: list[AnthropicBetaParam],
|
|
23
23
|
tools: list[BetaToolUnionParam],
|
|
24
|
-
thinking:
|
|
25
|
-
|
|
24
|
+
thinking: BetaThinkingConfigParam | Omit,
|
|
25
|
+
output_config: BetaOutputConfigParam | Omit,
|
|
26
26
|
):
|
|
27
27
|
self.model = model
|
|
28
28
|
self.messages = messages
|
|
@@ -33,7 +33,7 @@ class ClaudeClient(ChatClient):
|
|
|
33
33
|
self.betas = betas
|
|
34
34
|
self.tools = tools
|
|
35
35
|
self.thinking = thinking
|
|
36
|
-
self.
|
|
36
|
+
self.output_config = output_config
|
|
37
37
|
|
|
38
38
|
async def generate_non_stream_response(self) -> ChatResponse:
|
|
39
39
|
raise NotImplementedError
|
|
@@ -2,9 +2,10 @@ from typing import Any
|
|
|
2
2
|
|
|
3
3
|
import anthropic
|
|
4
4
|
from anthropic import Omit, transform_schema
|
|
5
|
-
from anthropic.types import
|
|
5
|
+
from anthropic.types import AnthropicBetaParam
|
|
6
6
|
from anthropic.types.beta import BetaWebSearchTool20250305Param, BetaToolUnionParam, BetaCodeExecutionTool20250825Param, \
|
|
7
|
-
BetaJSONOutputFormatParam
|
|
7
|
+
BetaJSONOutputFormatParam, BetaOutputConfigParam, BetaThinkingConfigParam, BetaThinkingConfigEnabledParam, \
|
|
8
|
+
BetaThinkingConfigAdaptiveParam
|
|
8
9
|
|
|
9
10
|
from llm_bridge.client.implementations.claude.claude_token_counter import count_claude_input_tokens
|
|
10
11
|
from llm_bridge.client.implementations.claude.non_stream_claude_client import NonStreamClaudeClient
|
|
@@ -45,7 +46,7 @@ async def create_claude_client(
|
|
|
45
46
|
)
|
|
46
47
|
|
|
47
48
|
context_window = 200_000
|
|
48
|
-
if model in ["claude-opus-4-6", "claude-sonnet-4-6", "claude-sonnet-4-5"]:
|
|
49
|
+
if model in ["claude-opus-4-7", "claude-opus-4-6", "claude-sonnet-4-6", "claude-sonnet-4-5"]:
|
|
49
50
|
context_window = 1_000_000
|
|
50
51
|
max_output = 64_000
|
|
51
52
|
max_tokens = min(
|
|
@@ -53,12 +54,15 @@ async def create_claude_client(
|
|
|
53
54
|
context_window - input_tokens,
|
|
54
55
|
)
|
|
55
56
|
|
|
56
|
-
thinking:
|
|
57
|
+
thinking: BetaThinkingConfigParam | Omit = omit
|
|
57
58
|
if thought:
|
|
58
|
-
|
|
59
|
-
type="
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
if model in ["claude-opus-4-7", "claude-opus-4-6", "claude-sonnet-4-6"]:
|
|
60
|
+
thinking = BetaThinkingConfigAdaptiveParam(type="adaptive", display="summarized")
|
|
61
|
+
else:
|
|
62
|
+
thinking = BetaThinkingConfigEnabledParam(
|
|
63
|
+
type="enabled",
|
|
64
|
+
budget_tokens=max(1024, max_tokens // 2), # Minimum budget tokens: 1024
|
|
65
|
+
)
|
|
62
66
|
temperature = 1
|
|
63
67
|
|
|
64
68
|
betas: list[AnthropicBetaParam] = [
|
|
@@ -85,14 +89,14 @@ async def create_claude_client(
|
|
|
85
89
|
)
|
|
86
90
|
)
|
|
87
91
|
|
|
88
|
-
|
|
92
|
+
output_config: BetaOutputConfigParam | Omit = omit
|
|
89
93
|
if structured_output_schema:
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
output_config = BetaOutputConfigParam(
|
|
95
|
+
format=BetaJSONOutputFormatParam(
|
|
92
96
|
type="json_schema",
|
|
93
97
|
schema=transform_schema(structured_output_schema),
|
|
94
98
|
)
|
|
95
|
-
|
|
99
|
+
)
|
|
96
100
|
|
|
97
101
|
if stream:
|
|
98
102
|
return StreamClaudeClient(
|
|
@@ -105,7 +109,7 @@ async def create_claude_client(
|
|
|
105
109
|
betas=betas,
|
|
106
110
|
tools=tools,
|
|
107
111
|
thinking=thinking,
|
|
108
|
-
|
|
112
|
+
output_config=output_config,
|
|
109
113
|
)
|
|
110
114
|
else:
|
|
111
115
|
return NonStreamClaudeClient(
|
|
@@ -118,5 +122,5 @@ async def create_claude_client(
|
|
|
118
122
|
betas=betas,
|
|
119
123
|
tools=tools,
|
|
120
124
|
thinking=thinking,
|
|
121
|
-
|
|
125
|
+
output_config=output_config,
|
|
122
126
|
)
|
|
@@ -51,7 +51,7 @@ async def create_openai_responses_client(
|
|
|
51
51
|
reasoning: Reasoning | Omit = omit
|
|
52
52
|
include: list[ResponseIncludable] = ["code_interpreter_call.outputs"]
|
|
53
53
|
|
|
54
|
-
if
|
|
54
|
+
if "codex" not in model:
|
|
55
55
|
if code_execution:
|
|
56
56
|
tools.append(
|
|
57
57
|
CodeInterpreter(
|
|
@@ -11,7 +11,49 @@
|
|
|
11
11
|
"input": 0.4,
|
|
12
12
|
"output": 25
|
|
13
13
|
},
|
|
14
|
-
|
|
14
|
+
{
|
|
15
|
+
"apiType": "OpenAI",
|
|
16
|
+
"model": "gpt-5.5",
|
|
17
|
+
"input": 10,
|
|
18
|
+
"output": 45
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"apiType": "OpenAI",
|
|
22
|
+
"model": "gpt-5.4",
|
|
23
|
+
"input": 5,
|
|
24
|
+
"output": 22.5
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"apiType": "OpenAI",
|
|
28
|
+
"model": "gpt-5.4-mini",
|
|
29
|
+
"input": 0.75,
|
|
30
|
+
"output": 4.5
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"apiType": "OpenAI",
|
|
34
|
+
"model": "gpt-5.3-codex",
|
|
35
|
+
"input": 1.75,
|
|
36
|
+
"output": 14
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"apiType": "OpenAI",
|
|
40
|
+
"model": "gpt-5.5-pro",
|
|
41
|
+
"input": 60,
|
|
42
|
+
"output": 270
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"apiType": "OpenAI",
|
|
46
|
+
"model": "gpt-5.4-pro",
|
|
47
|
+
"input": 60,
|
|
48
|
+
"output": 270
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"apiType": "OpenAI",
|
|
52
|
+
"model": "gpt-4.1",
|
|
53
|
+
"input": 2,
|
|
54
|
+
"output": 8
|
|
55
|
+
},
|
|
56
|
+
{
|
|
15
57
|
"apiType": "Claude",
|
|
16
58
|
"model": "claude-opus-4-7",
|
|
17
59
|
"input": 5,
|
|
@@ -107,84 +149,6 @@
|
|
|
107
149
|
"input": 0,
|
|
108
150
|
"output": 0
|
|
109
151
|
},
|
|
110
|
-
{
|
|
111
|
-
"apiType": "OpenAI",
|
|
112
|
-
"model": "gpt-5.4",
|
|
113
|
-
"input": 5,
|
|
114
|
-
"output": 22.5
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"apiType": "OpenAI",
|
|
118
|
-
"model": "gpt-5.4-mini",
|
|
119
|
-
"input": 0.75,
|
|
120
|
-
"output": 4.5
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"apiType": "OpenAI",
|
|
124
|
-
"model": "gpt-5.2",
|
|
125
|
-
"input": 1.75,
|
|
126
|
-
"output": 14
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"apiType": "OpenAI",
|
|
130
|
-
"model": "gpt-5.1",
|
|
131
|
-
"input": 1.25,
|
|
132
|
-
"output": 10
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"apiType": "OpenAI",
|
|
136
|
-
"model": "gpt-5.1-codex-max",
|
|
137
|
-
"input": 1.25,
|
|
138
|
-
"output": 10
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"apiType": "OpenAI",
|
|
142
|
-
"model": "gpt-5.1-codex",
|
|
143
|
-
"input": 1.25,
|
|
144
|
-
"output": 10
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
"apiType": "OpenAI",
|
|
148
|
-
"model": "gpt-5",
|
|
149
|
-
"input": 1.25,
|
|
150
|
-
"output": 10
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
"apiType": "OpenAI",
|
|
154
|
-
"model": "gpt-5-codex",
|
|
155
|
-
"input": 1.25,
|
|
156
|
-
"output": 10
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
"apiType": "OpenAI",
|
|
160
|
-
"model": "gpt-5-mini",
|
|
161
|
-
"input": 0.25,
|
|
162
|
-
"output": 2
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
"apiType": "OpenAI",
|
|
166
|
-
"model": "gpt-5.4-pro",
|
|
167
|
-
"input": 60,
|
|
168
|
-
"output": 270
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
"apiType": "OpenAI",
|
|
172
|
-
"model": "gpt-5.2-pro",
|
|
173
|
-
"input": 21,
|
|
174
|
-
"output": 168
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"apiType": "OpenAI",
|
|
178
|
-
"model": "gpt-5-pro",
|
|
179
|
-
"input": 15,
|
|
180
|
-
"output": 120
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
"apiType": "OpenAI",
|
|
184
|
-
"model": "gpt-4.1",
|
|
185
|
-
"input": 2,
|
|
186
|
-
"output": 8
|
|
187
|
-
},
|
|
188
152
|
{
|
|
189
153
|
"apiType": "OpenAI-Azure",
|
|
190
154
|
"model": "gpt-4.1",
|
|
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "LLM-Bridge"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.4"
|
|
8
8
|
dependencies = [
|
|
9
9
|
"fastapi",
|
|
10
10
|
"httpx",
|
|
11
11
|
"tenacity",
|
|
12
12
|
"openai==2.30.0",
|
|
13
13
|
"google-genai==1.46.0", # google.genai
|
|
14
|
-
"anthropic==0.
|
|
14
|
+
"anthropic==0.96.0",
|
|
15
15
|
"xai-sdk==1.11.0",
|
|
16
16
|
"docxlatex>=1.1.1",
|
|
17
17
|
"openpyxl",
|
|
@@ -165,6 +165,7 @@ messages = [
|
|
|
165
165
|
# model = "gpt-5.2"
|
|
166
166
|
# model = "gpt-5.1"
|
|
167
167
|
# model = "gpt-5.4"
|
|
168
|
+
model = "gpt-5.4-pro"
|
|
168
169
|
# model = "gpt-5"
|
|
169
170
|
# model = "gpt-4.1"
|
|
170
171
|
# model = "gpt-5-codex"
|
|
@@ -173,24 +174,24 @@ messages = [
|
|
|
173
174
|
# model = "gemini-3.1-flash-image-preview"
|
|
174
175
|
# model = "gemini-3-flash-preview"
|
|
175
176
|
# model = "claude-sonnet-4-6"
|
|
176
|
-
model = "grok-4.20-reasoning"
|
|
177
|
+
# model = "grok-4.20-reasoning"
|
|
177
178
|
# model = "grok-4.20-non-reasoning"
|
|
178
179
|
|
|
179
180
|
# api_type = "Vertex AI"
|
|
180
181
|
# api_type = "Google AI Studio Free Tier"
|
|
181
182
|
# api_type = "Google AI Studio"
|
|
182
|
-
|
|
183
|
+
api_type = "OpenAI"
|
|
183
184
|
# api_type = "OpenAI-Azure"
|
|
184
185
|
# api_type = "OpenAI-GitHub"
|
|
185
186
|
# api_type = "Claude"
|
|
186
|
-
api_type = "Grok"
|
|
187
|
+
# api_type = "Grok"
|
|
187
188
|
|
|
188
189
|
temperature = 0
|
|
189
190
|
stream = True
|
|
190
191
|
# stream = False
|
|
191
192
|
thought = True
|
|
192
193
|
# thought = False
|
|
193
|
-
|
|
194
|
-
web_search = False
|
|
195
|
-
|
|
196
|
-
code_execution = False
|
|
194
|
+
web_search = True
|
|
195
|
+
# web_search = False
|
|
196
|
+
code_execution = True
|
|
197
|
+
# code_execution = False
|
|
@@ -129,7 +129,7 @@ wheels = [
|
|
|
129
129
|
|
|
130
130
|
[[package]]
|
|
131
131
|
name = "anthropic"
|
|
132
|
-
version = "0.
|
|
132
|
+
version = "0.96.0"
|
|
133
133
|
source = { registry = "https://pypi.org/simple" }
|
|
134
134
|
dependencies = [
|
|
135
135
|
{ name = "anyio" },
|
|
@@ -141,9 +141,9 @@ dependencies = [
|
|
|
141
141
|
{ name = "sniffio" },
|
|
142
142
|
{ name = "typing-extensions" },
|
|
143
143
|
]
|
|
144
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
144
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b9/7e/672f533dee813028d2c699bfd2a7f52c9118d7353680d9aa44b9e23f717f/anthropic-0.96.0.tar.gz", hash = "sha256:9de947b737f39452f68aa520f1c2239d44119c9b73b0fb6d4e6ca80f00279ee6", size = 658210, upload-time = "2026-04-16T14:28:02.846Z" }
|
|
145
145
|
wheels = [
|
|
146
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
146
|
+
{ url = "https://files.pythonhosted.org/packages/48/5a/72f33204064b6e87601a71a6baf8d855769f8a0c1eaae8d06a1094872371/anthropic-0.96.0-py3-none-any.whl", hash = "sha256:9a6e335a354602a521cd9e777e92bfd46ba6e115bf9bbfe6135311e8fb2015b2", size = 635930, upload-time = "2026-04-16T14:28:01.436Z" },
|
|
147
147
|
]
|
|
148
148
|
|
|
149
149
|
[[package]]
|
|
@@ -748,7 +748,7 @@ wheels = [
|
|
|
748
748
|
|
|
749
749
|
[[package]]
|
|
750
750
|
name = "llm-bridge"
|
|
751
|
-
version = "2.0.
|
|
751
|
+
version = "2.0.4"
|
|
752
752
|
source = { editable = "." }
|
|
753
753
|
dependencies = [
|
|
754
754
|
{ name = "anthropic" },
|
|
@@ -772,7 +772,7 @@ dev = [
|
|
|
772
772
|
|
|
773
773
|
[package.metadata]
|
|
774
774
|
requires-dist = [
|
|
775
|
-
{ name = "anthropic", specifier = "==0.
|
|
775
|
+
{ name = "anthropic", specifier = "==0.96.0" },
|
|
776
776
|
{ name = "docxlatex", specifier = ">=1.1.1" },
|
|
777
777
|
{ name = "fastapi" },
|
|
778
778
|
{ name = "google-genai", specifier = "==1.46.0" },
|
|
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
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/non_stream_xai_client.py
RENAMED
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/stream_xai_client.py
RENAMED
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/xai_response_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/openai_completion_client.py
RENAMED
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/openai_responses_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/chat_message_converter.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
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/code_file_extensions.py
RENAMED
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/document_processor.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
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/openai_completion_message.py
RENAMED
|
File without changes
|
{llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/openai_responses_message.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
|