robotframework-gemini 0.3.0__tar.gz → 0.3.1__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.4
2
2
  Name: robotframework-gemini
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Google Gemini oracles for Robot Framework: text-only and multimodal (image) assertions.
5
5
  Project-URL: Homepage, https://github.com/carlosnizolli/robotframework-gemini
6
6
  Project-URL: Documentation, https://github.com/carlosnizolli/robotframework-gemini#readme
@@ -59,12 +59,39 @@ Desenvolvimento local:
59
59
  python -m pip install -e ".[dev]"
60
60
  ```
61
61
 
62
- ## Variáveis de ambiente
62
+ ## Variáveis de ambiente e importação da Library
63
63
 
64
- | Variável | Função |
65
- |-------------------|---------------------------------------------|
66
- | `GEMINI_API_KEY` | Chave da API Gemini (obrigatória se não passar `api_key` na Library) |
67
- | `GEMINI_MODEL` | Modelo (ex.: `gemini-2.0-flash`). Se omitido, usa `gemini-2.0-flash`. |
64
+ | Variável / argumento | Função |
65
+ |----------------------|--------|
66
+ | `GEMINI_API_KEY` | Chave da API Gemini (obrigatória se não passar `api_key` na Library) |
67
+ | `GEMINI_MODEL` | Modelo (ex.: `gemini-2.5-flash`). Se omitido, usa `gemini-2.5-flash`. |
68
+ | `api_key` (import) | Sobrescreve `GEMINI_API_KEY` na importação da Library |
69
+ | `model` (import) | Sobrescreve `GEMINI_MODEL` na importação da Library |
70
+
71
+ Por padrão, a Library lê chave e modelo das variáveis de ambiente. Você também pode passá-los na importação (útil em CI ou suítes com credenciais em variáveis Robot):
72
+
73
+ ```robot
74
+ *** Variables ***
75
+ ${GEMINI_API_KEY} %{GEMINI_API_KEY}
76
+ ${GEMINI_MODEL} gemini-2.5-flash
77
+
78
+ *** Settings ***
79
+ Library GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
80
+ ```
81
+
82
+ Só o modelo (chave continua vinda do ambiente):
83
+
84
+ ```robot
85
+ Library GeminiLibrary model=gemini-2.5-flash
86
+ ```
87
+
88
+ Import explícito (equivalente):
89
+
90
+ ```robot
91
+ Library robotframework_gemini.library.GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
92
+ ```
93
+
94
+ > Evite commitar a chave literal no repositório; prefira `%{GEMINI_API_KEY}` ou secrets do CI.
68
95
 
69
96
  ## Uso em Python (`GeminiOrchestrator`)
70
97
 
@@ -73,6 +100,8 @@ from pathlib import Path
73
100
  from robotframework_gemini import GeminiOrchestrator
74
101
 
75
102
  orchestrator = GeminiOrchestrator()
103
+ # ou explicitamente:
104
+ # orchestrator = GeminiOrchestrator(api_key="...", model="gemini-2.5-flash")
76
105
  context = "Web dashboard with the 'Active' category filter applied."
77
106
  evaluation = "Do the visible list items match the selected category?"
78
107
  model_response = orchestrator.evaluate_with_image(context, evaluation, Path("screen.png"))
@@ -123,12 +152,32 @@ Checar tela por critério neutro
123
152
  Log ${model_response}
124
153
  ```
125
154
 
126
- Import explícito (equivalente):
155
+ Import recomendado (RobotCode, runtime e PyPI):
127
156
 
128
157
  ```robot
129
- Library robotframework_gemini.library.GeminiLibrary
158
+ Library GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
130
159
  ```
131
160
 
161
+ Import explícito do pacote (Python / IDEs que preferem o caminho completo):
162
+
163
+ ```robot
164
+ Library robotframework_gemini.library.GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
165
+ ```
166
+
167
+ ### IDE e RobotCode
168
+
169
+ | Forma de import | Quem resolve |
170
+ |-----------------|--------------|
171
+ | `Library GeminiLibrary` | Módulo top-level `GeminiLibrary.py` (instalado no wheel ou via `src/` no clone) |
172
+ | `Library robotframework_gemini.library.GeminiLibrary` | Pacote Python padrão |
173
+
174
+ No **clone do repositório**, sem instalar:
175
+
176
+ - [`robot.toml`](robot.toml) — `python-path = ["src"]` para RobotCode/LSP
177
+ - [`.vscode/settings.json`](.vscode/settings.json) — `extraPaths` para Pylance/Cursor
178
+
179
+ Com venv local: `pip install -e ".[dev]"` e recarregue a janela do IDE após mudanças.
180
+
132
181
  Com arquivo já salvo:
133
182
 
134
183
  ```robot
@@ -25,12 +25,39 @@ Desenvolvimento local:
25
25
  python -m pip install -e ".[dev]"
26
26
  ```
27
27
 
28
- ## Variáveis de ambiente
28
+ ## Variáveis de ambiente e importação da Library
29
29
 
30
- | Variável | Função |
31
- |-------------------|---------------------------------------------|
32
- | `GEMINI_API_KEY` | Chave da API Gemini (obrigatória se não passar `api_key` na Library) |
33
- | `GEMINI_MODEL` | Modelo (ex.: `gemini-2.0-flash`). Se omitido, usa `gemini-2.0-flash`. |
30
+ | Variável / argumento | Função |
31
+ |----------------------|--------|
32
+ | `GEMINI_API_KEY` | Chave da API Gemini (obrigatória se não passar `api_key` na Library) |
33
+ | `GEMINI_MODEL` | Modelo (ex.: `gemini-2.5-flash`). Se omitido, usa `gemini-2.5-flash`. |
34
+ | `api_key` (import) | Sobrescreve `GEMINI_API_KEY` na importação da Library |
35
+ | `model` (import) | Sobrescreve `GEMINI_MODEL` na importação da Library |
36
+
37
+ Por padrão, a Library lê chave e modelo das variáveis de ambiente. Você também pode passá-los na importação (útil em CI ou suítes com credenciais em variáveis Robot):
38
+
39
+ ```robot
40
+ *** Variables ***
41
+ ${GEMINI_API_KEY} %{GEMINI_API_KEY}
42
+ ${GEMINI_MODEL} gemini-2.5-flash
43
+
44
+ *** Settings ***
45
+ Library GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
46
+ ```
47
+
48
+ Só o modelo (chave continua vinda do ambiente):
49
+
50
+ ```robot
51
+ Library GeminiLibrary model=gemini-2.5-flash
52
+ ```
53
+
54
+ Import explícito (equivalente):
55
+
56
+ ```robot
57
+ Library robotframework_gemini.library.GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
58
+ ```
59
+
60
+ > Evite commitar a chave literal no repositório; prefira `%{GEMINI_API_KEY}` ou secrets do CI.
34
61
 
35
62
  ## Uso em Python (`GeminiOrchestrator`)
36
63
 
@@ -39,6 +66,8 @@ from pathlib import Path
39
66
  from robotframework_gemini import GeminiOrchestrator
40
67
 
41
68
  orchestrator = GeminiOrchestrator()
69
+ # ou explicitamente:
70
+ # orchestrator = GeminiOrchestrator(api_key="...", model="gemini-2.5-flash")
42
71
  context = "Web dashboard with the 'Active' category filter applied."
43
72
  evaluation = "Do the visible list items match the selected category?"
44
73
  model_response = orchestrator.evaluate_with_image(context, evaluation, Path("screen.png"))
@@ -89,12 +118,32 @@ Checar tela por critério neutro
89
118
  Log ${model_response}
90
119
  ```
91
120
 
92
- Import explícito (equivalente):
121
+ Import recomendado (RobotCode, runtime e PyPI):
93
122
 
94
123
  ```robot
95
- Library robotframework_gemini.library.GeminiLibrary
124
+ Library GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
96
125
  ```
97
126
 
127
+ Import explícito do pacote (Python / IDEs que preferem o caminho completo):
128
+
129
+ ```robot
130
+ Library robotframework_gemini.library.GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
131
+ ```
132
+
133
+ ### IDE e RobotCode
134
+
135
+ | Forma de import | Quem resolve |
136
+ |-----------------|--------------|
137
+ | `Library GeminiLibrary` | Módulo top-level `GeminiLibrary.py` (instalado no wheel ou via `src/` no clone) |
138
+ | `Library robotframework_gemini.library.GeminiLibrary` | Pacote Python padrão |
139
+
140
+ No **clone do repositório**, sem instalar:
141
+
142
+ - [`robot.toml`](robot.toml) — `python-path = ["src"]` para RobotCode/LSP
143
+ - [`.vscode/settings.json`](.vscode/settings.json) — `extraPaths` para Pylance/Cursor
144
+
145
+ Com venv local: `pip install -e ".[dev]"` e recarregue a janela do IDE após mudanças.
146
+
98
147
  Com arquivo já salvo:
99
148
 
100
149
  ```robot
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "robotframework-gemini"
7
- version = "0.3.0"
7
+ version = "0.3.1"
8
8
  description = "Google Gemini oracles for Robot Framework: text-only and multimodal (image) assertions."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -47,14 +47,24 @@ dev = [
47
47
  ]
48
48
 
49
49
  [project.entry-points."robotframework.libraries"]
50
- GeminiLibrary = "robotframework_gemini.library:GeminiLibrary"
50
+ GeminiLibrary = "GeminiLibrary:GeminiLibrary"
51
+ BrowserGeminiLibrary = "BrowserGeminiLibrary:BrowserGeminiLibrary"
51
52
 
52
53
  [tool.hatch.build.targets.wheel]
53
54
  packages = ["src/robotframework_gemini"]
54
55
 
56
+ [tool.hatch.build.targets.wheel.force-include]
57
+ "src/GeminiLibrary.py" = "GeminiLibrary.py"
58
+ "src/BrowserGeminiLibrary.py" = "BrowserGeminiLibrary.py"
59
+
60
+ [tool.hatch.build.targets.editable]
61
+ dev-mode-dirs = ["src"]
62
+
55
63
  [tool.hatch.build.targets.sdist]
56
64
  include = [
57
65
  "src/robotframework_gemini",
66
+ "src/GeminiLibrary.py",
67
+ "src/BrowserGeminiLibrary.py",
58
68
  "LICENSE",
59
69
  "README.md",
60
70
  ]
@@ -0,0 +1,10 @@
1
+ """Backward-compatible shim for ``Library BrowserGeminiLibrary``."""
2
+
3
+ from robotframework_gemini.library import GeminiLibrary
4
+
5
+
6
+ class BrowserGeminiLibrary(GeminiLibrary):
7
+ """Alias of :class:`robotframework_gemini.library.GeminiLibrary`."""
8
+
9
+
10
+ __all__ = ["BrowserGeminiLibrary"]
@@ -0,0 +1,9 @@
1
+ """Top-level shim so ``Library GeminiLibrary`` resolves via ``import GeminiLibrary``.
2
+
3
+ Robot Framework entry points work at runtime; RobotCode and other tools often
4
+ import the library name as a Python module first.
5
+ """
6
+
7
+ from robotframework_gemini.library import GeminiLibrary
8
+
9
+ __all__ = ["GeminiLibrary"]
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "__version__",
19
19
  ]
20
20
 
21
- __version__ = "0.3.0"
21
+ __version__ = "0.3.1"
@@ -33,7 +33,7 @@ class GeminiOrchestrator:
33
33
 
34
34
  Environment:
35
35
  - GEMINI_API_KEY for the API key (unless ``api_key`` is passed explicitly)
36
- - GEMINI_MODEL for model id (e.g. gemini-2.0-flash); defaults to gemini-2.0-flash
36
+ - GEMINI_MODEL for model id (e.g. gemini-2.5-flash); defaults to gemini-2.5-flash
37
37
  """
38
38
 
39
39
  def __init__(
@@ -47,7 +47,7 @@ class GeminiOrchestrator:
47
47
  raise ValueError(
48
48
  "Missing API key: set GEMINI_API_KEY (or pass api_key=...)"
49
49
  )
50
- self.model = model or os.environ.get("GEMINI_MODEL") or "gemini-2.0-flash"
50
+ self.model = model or os.environ.get("GEMINI_MODEL") or "gemini-2.5-flash"
51
51
  self._client = genai.Client(api_key=key)
52
52
 
53
53
  def generate_from_text(self, prompt: str) -> str:
@@ -33,7 +33,12 @@ ensure_gemini_env_from_legacy()
33
33
 
34
34
 
35
35
  class GeminiLibrary:
36
- """Keywords for Gemini text oracles and optional Browser screenshot capture."""
36
+ """Keywords for Gemini text oracles and optional Browser screenshot capture.
37
+
38
+ Import arguments:
39
+ - ``api_key`` — Gemini API key (falls back to ``GEMINI_API_KEY`` when omitted)
40
+ - ``model`` — model id (falls back to ``GEMINI_MODEL``, then ``gemini-2.5-flash``)
41
+ """
37
42
 
38
43
  ROBOT_LIBRARY_SCOPE = "GLOBAL"
39
44