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.
Files changed (94) hide show
  1. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/PKG-INFO +2 -2
  2. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/non_stream_claude_client.py +1 -1
  3. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/stream_claude_client.py +1 -1
  4. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/claude_client.py +6 -6
  5. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/claude_client_factory.py +18 -14
  6. {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
  7. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/resources/model_prices.json +43 -79
  8. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/pyproject.toml +2 -2
  9. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/single/config.py +8 -7
  10. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/uv.lock +5 -5
  11. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.gitattributes +0 -0
  12. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.github/workflows/pypi-publish.yaml +0 -0
  13. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.github/workflows/python-test.yaml +0 -0
  14. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.gitignore +0 -0
  15. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.run/batch.run.xml +0 -0
  16. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.run/pytest.run.xml +0 -0
  17. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/.run/single.run.xml +0 -0
  18. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/LICENSE +0 -0
  19. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/MANIFEST.in +0 -0
  20. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/README.md +0 -0
  21. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/__init__.py +0 -0
  22. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/__init__.py +0 -0
  23. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/chat_client.py +0 -0
  24. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/__init__.py +0 -0
  25. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/__init__.py +0 -0
  26. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/claude_response_handler.py +0 -0
  27. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/claude/claude_token_counter.py +0 -0
  28. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/__init__.py +0 -0
  29. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/gemini_response_handler.py +0 -0
  30. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/gemini_token_counter.py +0 -0
  31. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/non_stream_gemini_client.py +0 -0
  32. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/gemini/stream_gemini_client.py +0 -0
  33. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_completion/__init__.py +0 -0
  34. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_completion/non_stream_openai_completion_client.py +0 -0
  35. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_completion/stream_openai_completion_client.py +0 -0
  36. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/__init__.py +0 -0
  37. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/non_stream_openai_responses_client.py +0 -0
  38. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/openai_responses_response_handler.py +0 -0
  39. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/openai_responses/stream_openai_responses_client.py +0 -0
  40. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/__init__.py +0 -0
  41. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/non_stream_xai_client.py +0 -0
  42. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/stream_xai_client.py +0 -0
  43. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/implementations/xai/xai_response_handler.py +0 -0
  44. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/__init__.py +0 -0
  45. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/gemini_client.py +0 -0
  46. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/openai_completion_client.py +0 -0
  47. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/openai_responses_client.py +0 -0
  48. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/client/model_client/xai_client.py +0 -0
  49. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/__init__.py +0 -0
  50. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/__init__.py +0 -0
  51. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/chat_client_factory.py +0 -0
  52. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/chat_message_converter.py +0 -0
  53. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/media_processor.py +0 -0
  54. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/__init__.py +0 -0
  55. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/gemini_client_factory.py +0 -0
  56. {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
  57. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_client_factory/xai_client_factory.py +0 -0
  58. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/__init__.py +0 -0
  59. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/claude_message_converter.py +0 -0
  60. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/gemini_message_converter.py +0 -0
  61. {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
  62. {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
  63. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/chat_generate/model_message_converter/xai_message_converter.py +0 -0
  64. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/file_fetch.py +0 -0
  65. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/__init__.py +0 -0
  66. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/code_file_extensions.py +0 -0
  67. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/document_processor.py +0 -0
  68. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/file_type_checker.py +0 -0
  69. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/message_process/message_processor.py +0 -0
  70. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/logic/model_prices.py +0 -0
  71. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/resources/__init__.py +0 -0
  72. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/__init__.py +0 -0
  73. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/chat_response.py +0 -0
  74. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/message.py +0 -0
  75. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/__init__.py +0 -0
  76. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/claude_message.py +0 -0
  77. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/gemini_message.py +0 -0
  78. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/openai_completion_message.py +0 -0
  79. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/openai_responses_message.py +0 -0
  80. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/model_message/xai_message.py +0 -0
  81. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/llm_bridge/type/serializer.py +0 -0
  82. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/tests/__init__.py +0 -0
  83. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/tests/file_type_checker_test.py +0 -0
  84. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/tests/model_prices_test.py +0 -0
  85. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/.env.example +0 -0
  86. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/__init__.py +0 -0
  87. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/batch/__init__.py +0 -0
  88. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/batch/batch.py +0 -0
  89. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/batch/config.py +0 -0
  90. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/keys.py +0 -0
  91. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/messages.py +0 -0
  92. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/single/__init__.py +0 -0
  93. {llm_bridge-2.0.2 → llm_bridge-2.0.4}/usage/single/single.py +0 -0
  94. {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.2
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.75.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
@@ -24,7 +24,7 @@ class NonStreamClaudeClient(ClaudeClient):
24
24
  betas=self.betas,
25
25
  tools=self.tools,
26
26
  thinking=self.thinking,
27
- extra_body=self.extra_body,
27
+ output_config=self.output_config,
28
28
  )
29
29
 
30
30
  return await process_claude_non_stream_response(
@@ -26,7 +26,7 @@ class StreamClaudeClient(ClaudeClient):
26
26
  betas=self.betas,
27
27
  tools=self.tools,
28
28
  thinking=self.thinking,
29
- extra_body=self.extra_body,
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 Any, AsyncGenerator
1
+ from typing import AsyncGenerator
2
2
 
3
3
  import anthropic
4
4
  from anthropic import Omit
5
- from anthropic.types import ThinkingConfigEnabledParam, AnthropicBetaParam
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: ThinkingConfigEnabledParam | Omit,
25
- extra_body: dict[str, Any] | None,
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.extra_body = extra_body
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 ThinkingConfigEnabledParam, AnthropicBetaParam
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: ThinkingConfigEnabledParam | Omit = omit
57
+ thinking: BetaThinkingConfigParam | Omit = omit
57
58
  if thought:
58
- thinking = ThinkingConfigEnabledParam(
59
- type="enabled",
60
- budget_tokens=max(1024, max_tokens // 2), # Minimum budget tokens: 1024
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
- extra_body = None
92
+ output_config: BetaOutputConfigParam | Omit = omit
89
93
  if structured_output_schema:
90
- extra_body = {
91
- "output_format": BetaJSONOutputFormatParam(
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
- extra_body=extra_body,
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
- extra_body=extra_body,
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 model not in ["gpt-5-pro", "gpt-5.2-pro"] and "codex" not in model:
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.2"
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.75.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
- # api_type = "OpenAI"
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
- # web_search = True
194
- web_search = False
195
- # code_execution = True
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.75.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/04/1f/08e95f4b7e2d35205ae5dcbb4ae97e7d477fc521c275c02609e2931ece2d/anthropic-0.75.0.tar.gz", hash = "sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb", size = 439565, upload-time = "2025-11-24T20:41:45.28Z" }
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/60/1c/1cd02b7ae64302a6e06724bf80a96401d5313708651d277b1458504a1730/anthropic-0.75.0-py3-none-any.whl", hash = "sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b", size = 388164, upload-time = "2025-11-24T20:41:43.587Z" },
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.2"
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.75.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