llm-gemini 0.4.2__tar.gz → 0.5__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: llm-gemini
3
- Version: 0.4.2
3
+ Version: 0.5
4
4
  Summary: LLM plugin to access Google's Gemini family of models
5
5
  Author: Simon Willison
6
6
  License: Apache-2.0
@@ -11,7 +11,7 @@ Project-URL: CI, https://github.com/simonw/llm-gemini/actions
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: llm>=0.18
14
+ Requires-Dist: llm>=0.19
15
15
  Requires-Dist: httpx
16
16
  Requires-Dist: ijson
17
17
  Provides-Extra: test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: llm-gemini
3
- Version: 0.4.2
3
+ Version: 0.5
4
4
  Summary: LLM plugin to access Google's Gemini family of models
5
5
  Author: Simon Willison
6
6
  License: Apache-2.0
@@ -11,7 +11,7 @@ Project-URL: CI, https://github.com/simonw/llm-gemini/actions
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: llm>=0.18
14
+ Requires-Dist: llm>=0.19
15
15
  Requires-Dist: httpx
16
16
  Requires-Dist: ijson
17
17
  Provides-Extra: test
@@ -1,4 +1,4 @@
1
- llm>=0.18
1
+ llm>=0.19
2
2
  httpx
3
3
  ijson
4
4
 
@@ -211,6 +211,19 @@ class _SharedGemini:
211
211
  return f'```\n{part["codeExecutionResult"]["output"].strip()}\n```\n'
212
212
  return ""
213
213
 
214
+ def set_usage(self, response):
215
+ try:
216
+ usage = response.response_json[-1].pop("usageMetadata")
217
+ input_tokens = usage.pop("promptTokenCount", None)
218
+ output_tokens = usage.pop("candidatesTokenCount", None)
219
+ usage.pop("totalTokenCount", None)
220
+ if input_tokens is not None:
221
+ response.set_usage(
222
+ input=input_tokens, output=output_tokens, details=usage or None
223
+ )
224
+ except (IndexError, KeyError):
225
+ pass
226
+
214
227
 
215
228
  class GeminiPro(_SharedGemini, llm.Model):
216
229
  def execute(self, prompt, stream, response, conversation):
@@ -242,6 +255,7 @@ class GeminiPro(_SharedGemini, llm.Model):
242
255
  gathered.append(event)
243
256
  events.clear()
244
257
  response.response_json = gathered
258
+ self.set_usage(response)
245
259
 
246
260
 
247
261
  class AsyncGeminiPro(_SharedGemini, llm.AsyncModel):
@@ -275,6 +289,7 @@ class AsyncGeminiPro(_SharedGemini, llm.AsyncModel):
275
289
  gathered.append(event)
276
290
  events.clear()
277
291
  response.response_json = gathered
292
+ self.set_usage(response)
278
293
 
279
294
 
280
295
  @llm.hookimpl
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "llm-gemini"
3
- version = "0.4.2"
3
+ version = "0.5"
4
4
  description = "LLM plugin to access Google's Gemini family of models"
5
5
  readme = "README.md"
6
6
  authors = [{name = "Simon Willison"}]
@@ -9,7 +9,7 @@ classifiers = [
9
9
  "License :: OSI Approved :: Apache Software License"
10
10
  ]
11
11
  dependencies = [
12
- "llm>=0.18",
12
+ "llm>=0.19",
13
13
  "httpx",
14
14
  "ijson"
15
15
  ]
@@ -17,10 +17,15 @@ async def test_prompt():
17
17
  "candidates": [
18
18
  {"content": {"parts": [{"text": "Percy"}], "role": "model"}}
19
19
  ],
20
- "usageMetadata": {"promptTokenCount": 10, "totalTokenCount": 10},
21
20
  "modelVersion": "gemini-1.5-flash-002",
22
21
  }
23
22
  ]
23
+ assert response.token_details is None
24
+ assert response.input_tokens == 10
25
+ # Not sure why our pytest-recording setup doesn't report output tokens
26
+ # https://github.com/simonw/llm-gemini/issues/25#issuecomment-2487464339
27
+ assert response.output_tokens is None
28
+
24
29
  # And try it async too
25
30
  async_model = llm.get_async_model("gemini-1.5-flash-latest")
26
31
  async_model.key = async_model.key or GEMINI_API_KEY
File without changes
File without changes
File without changes