LLM-Bridge 2.2.3__tar.gz → 2.3.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 (103) hide show
  1. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/PKG-INFO +2 -2
  2. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/chat_client_factory.py +3 -0
  3. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_client_factory/claude_client_factory.py +3 -4
  4. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_client_factory/gemini_client_factory.py +13 -4
  5. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/resources/model_prices.json +2 -2
  6. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/pyproject.toml +2 -2
  7. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/.env.example +1 -0
  8. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/keys.py +1 -0
  9. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/uv.lock +12 -8
  10. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/.gitattributes +0 -0
  11. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/.github/workflows/pypi-publish.yaml +0 -0
  12. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/.github/workflows/python-test.yaml +0 -0
  13. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/.gitignore +0 -0
  14. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/.run/batch.run.xml +0 -0
  15. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/.run/pytest.run.xml +0 -0
  16. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/.run/single.run.xml +0 -0
  17. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/LICENSE +0 -0
  18. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/README.md +0 -0
  19. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/__init__.py +0 -0
  20. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/__init__.py +0 -0
  21. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/chat_client.py +0 -0
  22. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/__init__.py +0 -0
  23. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/claude/__init__.py +0 -0
  24. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/claude/claude_response_handler.py +0 -0
  25. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/claude/claude_token_counter.py +0 -0
  26. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/claude/non_stream_claude_client.py +0 -0
  27. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/claude/stream_claude_client.py +0 -0
  28. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/gemini/__init__.py +0 -0
  29. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/gemini/gemini_response_handler.py +0 -0
  30. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/gemini/gemini_token_counter.py +0 -0
  31. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/gemini/non_stream_gemini_client.py +0 -0
  32. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/gemini/stream_gemini_client.py +0 -0
  33. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/http_error.py +0 -0
  34. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/openai_completion/__init__.py +0 -0
  35. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/openai_completion/non_stream_openai_completion_client.py +0 -0
  36. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/openai_completion/stream_openai_completion_client.py +0 -0
  37. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/openai_responses/__init__.py +0 -0
  38. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/openai_responses/non_stream_openai_responses_client.py +0 -0
  39. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/openai_responses/openai_responses_response_handler.py +0 -0
  40. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/openai_responses/stream_openai_responses_client.py +0 -0
  41. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/xai/__init__.py +0 -0
  42. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/xai/non_stream_xai_client.py +0 -0
  43. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/implementations/xai/stream_xai_client.py +0 -0
  44. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/model_client/__init__.py +0 -0
  45. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/model_client/claude_client.py +0 -0
  46. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/model_client/gemini_client.py +0 -0
  47. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/model_client/openai_completion_client.py +0 -0
  48. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/model_client/openai_responses_client.py +0 -0
  49. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/client/model_client/xai_client.py +0 -0
  50. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/__init__.py +0 -0
  51. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/__init__.py +0 -0
  52. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/chat_message_converter.py +0 -0
  53. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/media_processor.py +0 -0
  54. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_client_factory/__init__.py +0 -0
  55. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_client_factory/openai_completion_client_factory.py +0 -0
  56. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_client_factory/openai_responses_client_factory.py +0 -0
  57. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_client_factory/xai_client_factory.py +0 -0
  58. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_message_converter/__init__.py +0 -0
  59. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_message_converter/claude_message_converter.py +0 -0
  60. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_message_converter/gemini_message_converter.py +0 -0
  61. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_message_converter/openai_completion_message_converter.py +0 -0
  62. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_message_converter/openai_responses_message_converter.py +0 -0
  63. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/chat_generate/model_message_converter/xai_message_converter.py +0 -0
  64. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/file_fetch.py +0 -0
  65. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/message_process/__init__.py +0 -0
  66. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/message_process/code_file_extensions.py +0 -0
  67. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/message_process/document_processor.py +0 -0
  68. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/message_process/file_type_checker.py +0 -0
  69. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/message_process/message_processor.py +0 -0
  70. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/logic/model_prices.py +0 -0
  71. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/resources/__init__.py +0 -0
  72. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/__init__.py +0 -0
  73. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/chat_response.py +0 -0
  74. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/message.py +0 -0
  75. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/model_message/__init__.py +0 -0
  76. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/model_message/claude_message.py +0 -0
  77. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/model_message/gemini_message.py +0 -0
  78. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/model_message/openai_completion_message.py +0 -0
  79. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/model_message/openai_responses_message.py +0 -0
  80. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/model_message/xai_message.py +0 -0
  81. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/llm_bridge/type/serializer.py +0 -0
  82. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/__init__.py +0 -0
  83. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/__init__.py +0 -0
  84. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/__init__.py +0 -0
  85. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/model_message_converter/__init__.py +0 -0
  86. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/model_message_converter/claude_message_converter_test.py +0 -0
  87. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/model_message_converter/gemini_message_converter_test.py +0 -0
  88. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/model_message_converter/message_factory.py +0 -0
  89. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/model_message_converter/openai_completion_message_converter_test.py +0 -0
  90. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/model_message_converter/openai_responses_message_converter_test.py +0 -0
  91. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/chat_generate/model_message_converter/xai_message_converter_test.py +0 -0
  92. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/message_process/__init__.py +0 -0
  93. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/message_process/file_type_checker_test.py +0 -0
  94. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/tests/logic/model_prices_test.py +0 -0
  95. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/__init__.py +0 -0
  96. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/batch/__init__.py +0 -0
  97. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/batch/batch.py +0 -0
  98. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/batch/config.py +0 -0
  99. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/messages.py +0 -0
  100. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/single/__init__.py +0 -0
  101. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/single/config.py +0 -0
  102. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/single/single.py +0 -0
  103. {llm_bridge-2.2.3 → llm_bridge-2.3.0}/usage/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: LLM-Bridge
3
- Version: 2.2.3
3
+ Version: 2.3.0
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
@@ -12,7 +12,7 @@ Requires-Python: >=3.12
12
12
  Requires-Dist: anthropic==0.96.0
13
13
  Requires-Dist: docxlatex>=1.1.1
14
14
  Requires-Dist: fastapi
15
- Requires-Dist: google-genai==1.70.0
15
+ Requires-Dist: google-genai==2.31.0
16
16
  Requires-Dist: httpx
17
17
  Requires-Dist: openai==3.1.0
18
18
  Requires-Dist: openpyxl
@@ -83,6 +83,7 @@ async def create_chat_client(
83
83
  return await create_gemini_client(
84
84
  api_key=api_keys["GOOGLE_AI_STUDIO_FREE_TIER_API_KEY"],
85
85
  vertexai=False,
86
+ project=None,
86
87
  free_tier=True,
87
88
  messages=messages,
88
89
  model=model,
@@ -97,6 +98,7 @@ async def create_chat_client(
97
98
  return await create_gemini_client(
98
99
  api_key=api_keys["GOOGLE_AI_STUDIO_API_KEY"],
99
100
  vertexai=False,
101
+ project=None,
100
102
  free_tier=False,
101
103
  messages=messages,
102
104
  model=model,
@@ -111,6 +113,7 @@ async def create_chat_client(
111
113
  return await create_gemini_client(
112
114
  api_key=api_keys["VERTEX_AI_API_KEY"],
113
115
  vertexai=True,
116
+ project=api_keys["VERTEX_AI_PROJECT"],
114
117
  free_tier=False,
115
118
  messages=messages,
116
119
  model=model,
@@ -63,10 +63,9 @@ async def create_claude_client(
63
63
 
64
64
  betas: list[AnthropicBetaParam] | Omit = omit
65
65
  speed: Literal["standard", "fast"] | Omit = omit
66
- # Fast mode is a research preview with a separate rate limit; re-enable when it reaches GA
67
- # if model in ["claude-opus-5-5"]:
68
- # betas = ["fast-mode-2026-02-01"]
69
- # speed = "fast"
66
+ if model in ["claude-opus-5-5"]:
67
+ betas = ["fast-mode-2026-02-01"]
68
+ speed = "fast"
70
69
 
71
70
  tools: list[BetaToolUnionParam] = []
72
71
  if web_search:
@@ -26,6 +26,7 @@ async def contains_audio_or_video(messages: list[Message]) -> bool:
26
26
  async def create_gemini_client(
27
27
  api_key: str,
28
28
  vertexai: bool,
29
+ project: str | None,
29
30
  free_tier: bool,
30
31
  messages: list[Message],
31
32
  model: str,
@@ -36,10 +37,18 @@ async def create_gemini_client(
36
37
  code_execution: bool,
37
38
  structured_output_schema: dict[str, Any] | None,
38
39
  ) -> StreamGeminiClient | NonStreamGeminiClient:
39
- client = genai.Client(
40
- vertexai=vertexai,
41
- api_key=api_key,
42
- )
40
+ if vertexai:
41
+ client = genai.Client(
42
+ vertexai=True,
43
+ api_key=api_key,
44
+ project=project,
45
+ location="global",
46
+ )
47
+ else:
48
+ client = genai.Client(
49
+ vertexai=False,
50
+ api_key=api_key,
51
+ )
43
52
 
44
53
  system_instruction = await extract_system_messages(messages) or " "
45
54
  tools = []
@@ -13,7 +13,7 @@
13
13
  },
14
14
  {
15
15
  "apiType": "Google AI Studio",
16
- "model": "gemini-omni-flash-preview",
16
+ "model": "gemini-omni-1.1-flash",
17
17
  "input": 1.5,
18
18
  "output": 17.5
19
19
  },
@@ -157,7 +157,7 @@
157
157
  },
158
158
  {
159
159
  "apiType": "Vertex AI",
160
- "model": "gemini-omni-flash-preview",
160
+ "model": "gemini-omni-1.1-flash-preview",
161
161
  "input": 1.5,
162
162
  "output": 17.5
163
163
  },
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "LLM-Bridge"
7
- version = "2.2.3"
7
+ version = "2.3.0"
8
8
  dependencies = [
9
9
  "fastapi",
10
10
  "httpx",
11
11
  "tenacity",
12
12
  "openai==3.1.0",
13
- "google-genai==1.70.0", # google.genai
13
+ "google-genai==2.31.0", # google.genai
14
14
  "anthropic==0.96.0",
15
15
  "xai-sdk==1.18.0",
16
16
  "docxlatex>=1.1.1",
@@ -2,6 +2,7 @@ OPENAI_API_KEY=
2
2
  GOOGLE_AI_STUDIO_FREE_TIER_API_KEY=
3
3
  GOOGLE_AI_STUDIO_API_KEY=
4
4
  VERTEX_AI_API_KEY=
5
+ VERTEX_AI_PROJECT=
5
6
  ANTHROPIC_API_KEY=
6
7
  AZURE_API_KEY=
7
8
  AZURE_API_BASE=
@@ -12,6 +12,7 @@ api_keys = {
12
12
  "GOOGLE_AI_STUDIO_FREE_TIER_API_KEY": os.environ.get("GOOGLE_AI_STUDIO_FREE_TIER_API_KEY"),
13
13
  "GOOGLE_AI_STUDIO_API_KEY": os.environ.get("GOOGLE_AI_STUDIO_API_KEY"),
14
14
  "VERTEX_AI_API_KEY": os.environ.get("VERTEX_AI_API_KEY"),
15
+ "VERTEX_AI_PROJECT": os.environ.get("VERTEX_AI_PROJECT"),
15
16
  "ANTHROPIC_API_KEY": os.environ.get("ANTHROPIC_API_KEY"),
16
17
  "XAI_API_KEY": os.environ.get("XAI_API_KEY"),
17
18
  }
@@ -1,6 +1,10 @@
1
1
  version = 1
2
2
  revision = 3
3
3
  requires-python = ">=3.12"
4
+ resolution-markers = [
5
+ "python_full_version >= '3.14'",
6
+ "python_full_version < '3.14'",
7
+ ]
4
8
 
5
9
  [[package]]
6
10
  name = "aiohappyeyeballs"
@@ -524,15 +528,15 @@ wheels = [
524
528
 
525
529
  [[package]]
526
530
  name = "google-auth"
527
- version = "2.49.2"
531
+ version = "2.62.0"
528
532
  source = { registry = "https://pypi.org/simple" }
529
533
  dependencies = [
530
534
  { name = "cryptography" },
531
535
  { name = "pyasn1-modules" },
532
536
  ]
533
- sdist = { url = "https://files.pythonhosted.org/packages/c6/fc/e925290a1ad95c975c459e2df070fac2b90954e13a0370ac505dff78cb99/google_auth-2.49.2.tar.gz", hash = "sha256:c1ae38500e73065dcae57355adb6278cf8b5c8e391994ae9cbadbcb9631ab409", size = 333958, upload-time = "2026-04-10T00:41:21.888Z" }
537
+ sdist = { url = "https://files.pythonhosted.org/packages/f5/b9/4b2528f30114b106e3c3a7298ba38d85e682fd1f83fe7c4a5b77c7677082/google_auth-2.62.0.tar.gz", hash = "sha256:0bef0ce54bdf9ce226c5d66e4264413bd918141c31bbe49fb52eac882f513d69", size = 398180, upload-time = "2026-10-12T19:20:48.328Z" }
534
538
  wheels = [
535
- { url = "https://files.pythonhosted.org/packages/73/76/d241a5c927433420507215df6cac1b1fa4ac0ba7a794df42a84326c68da8/google_auth-2.49.2-py3-none-any.whl", hash = "sha256:c2720924dfc82dedb962c9f52cabb2ab16714fd0a6a707e40561d217574ed6d5", size = 240638, upload-time = "2026-04-10T00:41:14.501Z" },
539
+ { url = "https://files.pythonhosted.org/packages/eb/a3/87fe9b7203ec2e56ea6a57c75e6d632eaf9487c7f7978cdad1d801bee0af/google_auth-2.62.0-py3-none-any.whl", hash = "sha256:4ff4319aeb4ad128409759d397a9fcafad126d0031d241cc0dd6b9a00b43e3f3", size = 267911, upload-time = "2026-10-12T19:20:46.355Z" },
536
540
  ]
537
541
 
538
542
  [package.optional-dependencies]
@@ -542,7 +546,7 @@ requests = [
542
546
 
543
547
  [[package]]
544
548
  name = "google-genai"
545
- version = "1.70.0"
549
+ version = "2.31.0"
546
550
  source = { registry = "https://pypi.org/simple" }
547
551
  dependencies = [
548
552
  { name = "anyio" },
@@ -556,9 +560,9 @@ dependencies = [
556
560
  { name = "typing-extensions" },
557
561
  { name = "websockets" },
558
562
  ]
559
- sdist = { url = "https://files.pythonhosted.org/packages/74/dd/28e4682904b183acbfad3fe6409f13a42f69bb8eab6e882d3bcbea1dde01/google_genai-1.70.0.tar.gz", hash = "sha256:36b67b0fc6f319e08d1f1efd808b790107b1809c8743a05d55dfcf9d9fad7719", size = 519550, upload-time = "2026-04-01T10:52:46.487Z" }
563
+ sdist = { url = "https://files.pythonhosted.org/packages/34/69/6a3d3839ab56ec17d7923c8679b38955e286e0a9793df10ce6d13bc5f122/google_genai-2.31.0.tar.gz", hash = "sha256:71518537de2ba967a61960cba844691dca3dd4ff07726c01a6917d132213541e", size = 745679, upload-time = "2026-10-14T23:52:24.836Z" }
560
564
  wheels = [
561
- { url = "https://files.pythonhosted.org/packages/36/a3/d4564c8a9beaf6a3cef8d70fa6354318572cebfee65db4f01af0d41f45ba/google_genai-1.70.0-py3-none-any.whl", hash = "sha256:b74c24549d8b4208f4c736fd11857374788e1ffffc725de45d706e35c97fceee", size = 760584, upload-time = "2026-04-01T10:52:44.349Z" },
565
+ { url = "https://files.pythonhosted.org/packages/1c/64/1e9ab799830101ccbdcb67376a3f12b59e51f57643862999fd31af6938a1/google_genai-2.31.0-py3-none-any.whl", hash = "sha256:c87b9d495a24b09dedb29b852a201bea69ecd0b3f6c2561dc68f4055451b1b90", size = 1208245, upload-time = "2026-10-14T23:52:22.766Z" },
562
566
  ]
563
567
 
564
568
  [[package]]
@@ -794,7 +798,7 @@ wheels = [
794
798
 
795
799
  [[package]]
796
800
  name = "llm-bridge"
797
- version = "2.2.3"
801
+ version = "2.3.0"
798
802
  source = { editable = "." }
799
803
  dependencies = [
800
804
  { name = "anthropic" },
@@ -821,7 +825,7 @@ requires-dist = [
821
825
  { name = "anthropic", specifier = "==0.96.0" },
822
826
  { name = "docxlatex", specifier = ">=1.1.1" },
823
827
  { name = "fastapi" },
824
- { name = "google-genai", specifier = "==1.70.0" },
828
+ { name = "google-genai", specifier = "==2.31.0" },
825
829
  { name = "httpx" },
826
830
  { name = "openai", specifier = "==3.1.0" },
827
831
  { name = "openpyxl" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes