llm-gemini 0.4.1__py3-none-any.whl → 0.5__py3-none-any.whl
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_gemini-0.4.1.dist-info → llm_gemini-0.5.dist-info}/METADATA +19 -5
- llm_gemini-0.5.dist-info/RECORD +7 -0
- {llm_gemini-0.4.1.dist-info → llm_gemini-0.5.dist-info}/WHEEL +1 -1
- llm_gemini.py +16 -0
- llm_gemini-0.4.1.dist-info/RECORD +0 -7
- {llm_gemini-0.4.1.dist-info → llm_gemini-0.5.dist-info}/LICENSE +0 -0
- {llm_gemini-0.4.1.dist-info → llm_gemini-0.5.dist-info}/entry_points.txt +0 -0
- {llm_gemini-0.4.1.dist-info → llm_gemini-0.5.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: llm-gemini
|
3
|
-
Version: 0.
|
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,12 +11,12 @@ 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
|
14
|
+
Requires-Dist: llm>=0.19
|
15
15
|
Requires-Dist: httpx
|
16
16
|
Requires-Dist: ijson
|
17
17
|
Provides-Extra: test
|
18
|
-
Requires-Dist: pytest
|
19
|
-
Requires-Dist: pytest-recording
|
18
|
+
Requires-Dist: pytest; extra == "test"
|
19
|
+
Requires-Dist: pytest-recording; extra == "test"
|
20
20
|
|
21
21
|
# llm-gemini
|
22
22
|
|
@@ -60,7 +60,8 @@ Other models are:
|
|
60
60
|
|
61
61
|
- `gemini-1.5-flash-latest`
|
62
62
|
- `gemini-1.5-flash-8b-latest` - the least expensive
|
63
|
-
- `gemini-exp-1114` - recent experimental
|
63
|
+
- `gemini-exp-1114` - recent experimental #1
|
64
|
+
- `gemini-exp-1121` - recent experimental #2
|
64
65
|
|
65
66
|
### Images, audio and video
|
66
67
|
|
@@ -157,3 +158,16 @@ To run the tests:
|
|
157
158
|
```bash
|
158
159
|
pytest
|
159
160
|
```
|
161
|
+
|
162
|
+
This project uses [pytest-recording](https://github.com/kiwicom/pytest-recording) to record Gemini API responses for the tests.
|
163
|
+
|
164
|
+
If you add a new test that calls the API you can capture the API response like this:
|
165
|
+
```bash
|
166
|
+
PYTEST_GEMINI_API_KEY="$(llm keys get gemini)" pytest --record-mode once
|
167
|
+
```
|
168
|
+
You will need to have stored a valid Gemini API key using this command first:
|
169
|
+
```bash
|
170
|
+
llm keys set gemini
|
171
|
+
# Paste key here
|
172
|
+
```
|
173
|
+
|
@@ -0,0 +1,7 @@
|
|
1
|
+
llm_gemini.py,sha256=GFAYIFWCRyM1FhMbvZhm9DvRPmW-GUNlzgkBY-Gcq7g,11295
|
2
|
+
llm_gemini-0.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
3
|
+
llm_gemini-0.5.dist-info/METADATA,sha256=Ipci7xoIduAqjP-73H2jstoqj5Qp0KmnMUNifHp8JXg,5335
|
4
|
+
llm_gemini-0.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
5
|
+
llm_gemini-0.5.dist-info/entry_points.txt,sha256=n544bpgUPIBc5l_cnwsTxPc3gMGJHPtAyqBNp-CkMWk,26
|
6
|
+
llm_gemini-0.5.dist-info/top_level.txt,sha256=WUQmG6_2QKbT_8W4HH93qyKl_0SUteL4Ra6_PhyNGKU,11
|
7
|
+
llm_gemini-0.5.dist-info/RECORD,,
|
llm_gemini.py
CHANGED
@@ -38,6 +38,7 @@ def register_models(register):
|
|
38
38
|
"gemini-1.5-flash-8b-latest",
|
39
39
|
"gemini-1.5-flash-8b-001",
|
40
40
|
"gemini-exp-1114",
|
41
|
+
"gemini-exp-1121",
|
41
42
|
]:
|
42
43
|
register(GeminiPro(model_id), AsyncGeminiPro(model_id))
|
43
44
|
|
@@ -210,6 +211,19 @@ class _SharedGemini:
|
|
210
211
|
return f'```\n{part["codeExecutionResult"]["output"].strip()}\n```\n'
|
211
212
|
return ""
|
212
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
|
+
|
213
227
|
|
214
228
|
class GeminiPro(_SharedGemini, llm.Model):
|
215
229
|
def execute(self, prompt, stream, response, conversation):
|
@@ -241,6 +255,7 @@ class GeminiPro(_SharedGemini, llm.Model):
|
|
241
255
|
gathered.append(event)
|
242
256
|
events.clear()
|
243
257
|
response.response_json = gathered
|
258
|
+
self.set_usage(response)
|
244
259
|
|
245
260
|
|
246
261
|
class AsyncGeminiPro(_SharedGemini, llm.AsyncModel):
|
@@ -274,6 +289,7 @@ class AsyncGeminiPro(_SharedGemini, llm.AsyncModel):
|
|
274
289
|
gathered.append(event)
|
275
290
|
events.clear()
|
276
291
|
response.response_json = gathered
|
292
|
+
self.set_usage(response)
|
277
293
|
|
278
294
|
|
279
295
|
@llm.hookimpl
|
@@ -1,7 +0,0 @@
|
|
1
|
-
llm_gemini.py,sha256=_7yQ14ffRpyK3ChAOc6M2ufylg2kUKTQK4C3VKOiUgM,10672
|
2
|
-
llm_gemini-0.4.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
3
|
-
llm_gemini-0.4.1.dist-info/METADATA,sha256=OhySg0uA_de-JRZrYIJFZu_uSYVKXEGs4W_x3LkQUvE,4864
|
4
|
-
llm_gemini-0.4.1.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
5
|
-
llm_gemini-0.4.1.dist-info/entry_points.txt,sha256=n544bpgUPIBc5l_cnwsTxPc3gMGJHPtAyqBNp-CkMWk,26
|
6
|
-
llm_gemini-0.4.1.dist-info/top_level.txt,sha256=WUQmG6_2QKbT_8W4HH93qyKl_0SUteL4Ra6_PhyNGKU,11
|
7
|
-
llm_gemini-0.4.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|