robotframework-gemini 0.3.0__tar.gz → 0.3.2__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.
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/PKG-INFO +56 -36
- robotframework_gemini-0.3.2/README.md +164 -0
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/pyproject.toml +12 -2
- robotframework_gemini-0.3.2/src/BrowserGeminiLibrary.py +10 -0
- robotframework_gemini-0.3.2/src/GeminiLibrary.py +9 -0
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/__init__.py +1 -1
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/client.py +2 -2
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/library.py +6 -1
- robotframework_gemini-0.3.2/src/robotframework_gemini/py.typed +0 -0
- robotframework_gemini-0.3.0/README.md +0 -144
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/.gitignore +0 -0
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/LICENSE +0 -0
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/browser_helpers.py +0 -0
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/legacy_env.py +0 -0
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/prompt_build.py +0 -0
- {robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/response_parse.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: robotframework-gemini
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
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
|
|
@@ -34,7 +34,7 @@ Description-Content-Type: text/markdown
|
|
|
34
34
|
|
|
35
35
|
# robotframework-gemini
|
|
36
36
|
|
|
37
|
-
Biblioteca
|
|
37
|
+
Biblioteca de **keywords do Robot Framework** para oráculos com **Google Gemini**: avaliação **só texto** (API, logs, JSON, etc.) ou **multimodal** com imagem (arquivo PNG ou captura do **Robot Framework Browser**).
|
|
38
38
|
|
|
39
39
|
- **Multimodal**: envia o texto do prompt e a captura como `Part` em bytes (`google-genai`).
|
|
40
40
|
- **Fluxo recomendado**: duas entradas — **contexto** (enquadramento do teste) e **avaliação** (critério ou pergunta objetiva).
|
|
@@ -59,35 +59,45 @@ 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
|
|
65
|
-
|
|
66
|
-
| `GEMINI_API_KEY`
|
|
67
|
-
| `GEMINI_MODEL`
|
|
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-3.1-flash-lite`). 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 |
|
|
68
70
|
|
|
69
|
-
|
|
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):
|
|
70
72
|
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
```robot
|
|
74
|
+
*** Variables ***
|
|
75
|
+
${GEMINI_API_KEY} %{GEMINI_API_KEY}
|
|
76
|
+
${GEMINI_MODEL} gemini-2.5-flash-lite
|
|
74
77
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
evaluation = "Do the visible list items match the selected category?"
|
|
78
|
-
model_response = orchestrator.evaluate_with_image(context, evaluation, Path("screen.png"))
|
|
78
|
+
*** Settings ***
|
|
79
|
+
Library GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
|
|
79
80
|
```
|
|
80
81
|
|
|
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):
|
|
82
89
|
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
context,
|
|
86
|
-
evaluation,
|
|
87
|
-
extra_instructions="Reply with one word only: Yes or No.",
|
|
88
|
-
)
|
|
90
|
+
```robot
|
|
91
|
+
Library robotframework_gemini.library.GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
|
|
89
92
|
```
|
|
90
93
|
|
|
94
|
+
> Evite commitar a chave literal no repositório; prefira `%{GEMINI_API_KEY}` ou secrets do CI.
|
|
95
|
+
|
|
96
|
+
## Documentação de Keywords
|
|
97
|
+
|
|
98
|
+
- Português: [docs/KEYWORDS.pt-BR.md](https://github.com/carlosnizolli/robotframework-gemini/blob/main/docs/KEYWORDS.pt-BR.md)
|
|
99
|
+
- English: [docs/KEYWORDS.en.md](https://github.com/carlosnizolli/robotframework-gemini/blob/main/docs/KEYWORDS.en.md)
|
|
100
|
+
|
|
91
101
|
## Uso no Robot Framework
|
|
92
102
|
|
|
93
103
|
> **Nota:** os exemplos usam `Set Variable` e `Catenate` em vez da keyword `VAR` (Robot Framework 7.0+) para manter retrocompatibilidade com versões anteriores do Robot Framework.
|
|
@@ -123,12 +133,32 @@ Checar tela por critério neutro
|
|
|
123
133
|
Log ${model_response}
|
|
124
134
|
```
|
|
125
135
|
|
|
126
|
-
Import
|
|
136
|
+
Import recomendado (RobotCode, runtime e PyPI):
|
|
127
137
|
|
|
128
138
|
```robot
|
|
129
|
-
Library
|
|
139
|
+
Library GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
|
|
130
140
|
```
|
|
131
141
|
|
|
142
|
+
Import explícito do pacote (IDEs que preferem o caminho completo):
|
|
143
|
+
|
|
144
|
+
```robot
|
|
145
|
+
Library robotframework_gemini.library.GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### IDE e RobotCode
|
|
149
|
+
|
|
150
|
+
| Forma de import | Quem resolve |
|
|
151
|
+
|-----------------|--------------|
|
|
152
|
+
| `Library GeminiLibrary` | Módulo top-level `GeminiLibrary.py` (instalado no wheel ou via `src/` no clone) |
|
|
153
|
+
| `Library robotframework_gemini.library.GeminiLibrary` | Pacote Python padrão |
|
|
154
|
+
|
|
155
|
+
No **clone do repositório**, sem instalar:
|
|
156
|
+
|
|
157
|
+
- [`robot.toml`](robot.toml) — `python-path = ["src"]` para RobotCode/LSP
|
|
158
|
+
- [`.vscode/settings.json`](.vscode/settings.json) — `extraPaths` para Pylance/Cursor
|
|
159
|
+
|
|
160
|
+
Com venv local: `pip install -e ".[dev]"` e recarregue a janela do IDE após mudanças.
|
|
161
|
+
|
|
132
162
|
Com arquivo já salvo:
|
|
133
163
|
|
|
134
164
|
```robot
|
|
@@ -151,19 +181,9 @@ ${rating_score}= Gemini Parse Rating ${model_response}
|
|
|
151
181
|
${rating_score}= Gemini Evaluate Text Rating Score ${context} ${evaluation}
|
|
152
182
|
```
|
|
153
183
|
|
|
154
|
-
Detalhes das três keywords de nota: [
|
|
155
|
-
|
|
156
|
-
Consulte também [`examples/demo_template.robot`](examples/demo_template.robot).
|
|
157
|
-
|
|
158
|
-
## Documentação de Keywords
|
|
159
|
-
|
|
160
|
-
- Português: [`docs/KEYWORDS.pt-BR.md`](docs/KEYWORDS.pt-BR.md)
|
|
161
|
-
- English: [`docs/KEYWORDS.en.md`](docs/KEYWORDS.en.md)
|
|
162
|
-
|
|
163
|
-
## Compatibilidade
|
|
184
|
+
Detalhes das três keywords de nota: [Notas 1–5 (pt-BR)](https://github.com/carlosnizolli/robotframework-gemini/blob/main/docs/KEYWORDS.pt-BR.md#notas-15-três-keywords-quando-usar).
|
|
164
185
|
|
|
165
|
-
|
|
166
|
-
- Variáveis legadas (`LLM_API_KEY`, `LLM_API_KEY_LIA`, `LLM_LIA_MODEL`) são mapeadas para `GEMINI_*` ao importar o pacote.
|
|
186
|
+
Consulte também [examples/demo_template.robot](https://github.com/carlosnizolli/robotframework-gemini/blob/main/examples/demo_template.robot).
|
|
167
187
|
|
|
168
188
|
## Testes
|
|
169
189
|
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# robotframework-gemini
|
|
2
|
+
|
|
3
|
+
Biblioteca de **keywords do Robot Framework** para oráculos com **Google Gemini**: avaliação **só texto** (API, logs, JSON, etc.) ou **multimodal** com imagem (arquivo PNG ou captura do **Robot Framework Browser**).
|
|
4
|
+
|
|
5
|
+
- **Multimodal**: envia o texto do prompt e a captura como `Part` em bytes (`google-genai`).
|
|
6
|
+
- **Fluxo recomendado**: duas entradas — **contexto** (enquadramento do teste) e **avaliação** (critério ou pergunta objetiva).
|
|
7
|
+
- **Browser opcional**: keywords de screenshot exigem `Library Browser`; keywords de texto funcionam sem navegador.
|
|
8
|
+
|
|
9
|
+
## Instalação
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pip install robotframework-gemini
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Com suporte a captura via Robot Framework Browser (Playwright):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install "robotframework-gemini[browser]"
|
|
19
|
+
python -m pip install robotframework
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Desenvolvimento local:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
python -m pip install -e ".[dev]"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Variáveis de ambiente e importação da Library
|
|
29
|
+
|
|
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-3.1-flash-lite`). 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-lite
|
|
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.
|
|
61
|
+
|
|
62
|
+
## Documentação de Keywords
|
|
63
|
+
|
|
64
|
+
- Português: [docs/KEYWORDS.pt-BR.md](https://github.com/carlosnizolli/robotframework-gemini/blob/main/docs/KEYWORDS.pt-BR.md)
|
|
65
|
+
- English: [docs/KEYWORDS.en.md](https://github.com/carlosnizolli/robotframework-gemini/blob/main/docs/KEYWORDS.en.md)
|
|
66
|
+
|
|
67
|
+
## Uso no Robot Framework
|
|
68
|
+
|
|
69
|
+
> **Nota:** os exemplos usam `Set Variable` e `Catenate` em vez da keyword `VAR` (Robot Framework 7.0+) para manter retrocompatibilidade com versões anteriores do Robot Framework.
|
|
70
|
+
|
|
71
|
+
### Só texto (sem Browser)
|
|
72
|
+
|
|
73
|
+
```robot
|
|
74
|
+
*** Settings ***
|
|
75
|
+
Library GeminiLibrary
|
|
76
|
+
|
|
77
|
+
*** Keywords ***
|
|
78
|
+
Validar resposta da API
|
|
79
|
+
${context}= Set Variable {"status": "ok", "items": 3}
|
|
80
|
+
${evaluation}= Set Variable O payload indica sucesso com itens?
|
|
81
|
+
${model_response}= Gemini Evaluate Text ${context} ${evaluation}
|
|
82
|
+
Log ${model_response}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Com captura de tela (Browser)
|
|
86
|
+
|
|
87
|
+
Declare a biblioteca **Browser** antes de **Gemini**:
|
|
88
|
+
|
|
89
|
+
```robot
|
|
90
|
+
*** Settings ***
|
|
91
|
+
Library Browser
|
|
92
|
+
Library GeminiLibrary
|
|
93
|
+
|
|
94
|
+
*** Keywords ***
|
|
95
|
+
Checar tela por critério neutro
|
|
96
|
+
${context}= Set Variable Lista filtrada por status Ativo.
|
|
97
|
+
${evaluation}= Set Variable Todos os itens visíveis mostram status Ativo?
|
|
98
|
+
${model_response}= Gemini Evaluate With Screen ${context} ${evaluation}
|
|
99
|
+
Log ${model_response}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Import recomendado (RobotCode, runtime e PyPI):
|
|
103
|
+
|
|
104
|
+
```robot
|
|
105
|
+
Library GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Import explícito do pacote (IDEs que preferem o caminho completo):
|
|
109
|
+
|
|
110
|
+
```robot
|
|
111
|
+
Library robotframework_gemini.library.GeminiLibrary api_key=${GEMINI_API_KEY} model=${GEMINI_MODEL}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### IDE e RobotCode
|
|
115
|
+
|
|
116
|
+
| Forma de import | Quem resolve |
|
|
117
|
+
|-----------------|--------------|
|
|
118
|
+
| `Library GeminiLibrary` | Módulo top-level `GeminiLibrary.py` (instalado no wheel ou via `src/` no clone) |
|
|
119
|
+
| `Library robotframework_gemini.library.GeminiLibrary` | Pacote Python padrão |
|
|
120
|
+
|
|
121
|
+
No **clone do repositório**, sem instalar:
|
|
122
|
+
|
|
123
|
+
- [`robot.toml`](robot.toml) — `python-path = ["src"]` para RobotCode/LSP
|
|
124
|
+
- [`.vscode/settings.json`](.vscode/settings.json) — `extraPaths` para Pylance/Cursor
|
|
125
|
+
|
|
126
|
+
Com venv local: `pip install -e ".[dev]"` e recarregue a janela do IDE após mudanças.
|
|
127
|
+
|
|
128
|
+
Com arquivo já salvo:
|
|
129
|
+
|
|
130
|
+
```robot
|
|
131
|
+
Browser.Take Screenshot ${OUTPUT_DIR}/tela.png
|
|
132
|
+
${model_response}= Gemini Evaluate With Image File ${context} ${evaluation} ${OUTPUT_DIR}/tela.png
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Veredito via prompt (primeira linha) e nota 1–5:
|
|
136
|
+
|
|
137
|
+
```robot
|
|
138
|
+
${model_response}= Gemini Evaluate With Screen ${context} ${evaluation}
|
|
139
|
+
... extra_instructions=Responda com uma palavra na primeira linha: Sim ou Não.
|
|
140
|
+
${verdict}= Get Line ${model_response} 0
|
|
141
|
+
Should Be Equal As Strings ${verdict} Sim
|
|
142
|
+
|
|
143
|
+
# Nota 1–5: duas etapas (log da justificativa) ou atalho em uma linha
|
|
144
|
+
${model_response}= Gemini Evaluate Text Rating ${context} ${evaluation}
|
|
145
|
+
${rating_score}= Gemini Parse Rating ${model_response}
|
|
146
|
+
|
|
147
|
+
${rating_score}= Gemini Evaluate Text Rating Score ${context} ${evaluation}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Detalhes das três keywords de nota: [Notas 1–5 (pt-BR)](https://github.com/carlosnizolli/robotframework-gemini/blob/main/docs/KEYWORDS.pt-BR.md#notas-15-três-keywords-quando-usar).
|
|
151
|
+
|
|
152
|
+
Consulte também [examples/demo_template.robot](https://github.com/carlosnizolli/robotframework-gemini/blob/main/examples/demo_template.robot).
|
|
153
|
+
|
|
154
|
+
## Testes
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
pytest
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Os testes usam mocks de `generate_content`; não há chamadas reais à API.
|
|
161
|
+
|
|
162
|
+
## Licença
|
|
163
|
+
|
|
164
|
+
MIT.
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "robotframework-gemini"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.2"
|
|
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 = "
|
|
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"]
|
{robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/client.py
RENAMED
|
@@ -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.
|
|
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.
|
|
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:
|
{robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/library.py
RENAMED
|
@@ -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
|
|
|
File without changes
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# robotframework-gemini
|
|
2
|
-
|
|
3
|
-
Biblioteca **Python** e **keywords do Robot Framework** para oráculos com **Google Gemini**: avaliação **só texto** (API, logs, JSON, etc.) ou **multimodal** com imagem (arquivo PNG ou captura do **Robot Framework Browser**).
|
|
4
|
-
|
|
5
|
-
- **Multimodal**: envia o texto do prompt e a captura como `Part` em bytes (`google-genai`).
|
|
6
|
-
- **Fluxo recomendado**: duas entradas — **contexto** (enquadramento do teste) e **avaliação** (critério ou pergunta objetiva).
|
|
7
|
-
- **Browser opcional**: keywords de screenshot exigem `Library Browser`; keywords de texto funcionam sem navegador.
|
|
8
|
-
|
|
9
|
-
## Instalação
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
pip install robotframework-gemini
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Com suporte a captura via Robot Framework Browser (Playwright):
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
pip install "robotframework-gemini[browser]"
|
|
19
|
-
python -m pip install robotframework
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Desenvolvimento local:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
python -m pip install -e ".[dev]"
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Variáveis de ambiente
|
|
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`. |
|
|
34
|
-
|
|
35
|
-
## Uso em Python (`GeminiOrchestrator`)
|
|
36
|
-
|
|
37
|
-
```python
|
|
38
|
-
from pathlib import Path
|
|
39
|
-
from robotframework_gemini import GeminiOrchestrator
|
|
40
|
-
|
|
41
|
-
orchestrator = GeminiOrchestrator()
|
|
42
|
-
context = "Web dashboard with the 'Active' category filter applied."
|
|
43
|
-
evaluation = "Do the visible list items match the selected category?"
|
|
44
|
-
model_response = orchestrator.evaluate_with_image(context, evaluation, Path("screen.png"))
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Para formato de saída restrito (ex.: Yes/No), use `extra_instructions`:
|
|
48
|
-
|
|
49
|
-
```python
|
|
50
|
-
model_response = orchestrator.evaluate_with_text(
|
|
51
|
-
context,
|
|
52
|
-
evaluation,
|
|
53
|
-
extra_instructions="Reply with one word only: Yes or No.",
|
|
54
|
-
)
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Uso no Robot Framework
|
|
58
|
-
|
|
59
|
-
> **Nota:** os exemplos usam `Set Variable` e `Catenate` em vez da keyword `VAR` (Robot Framework 7.0+) para manter retrocompatibilidade com versões anteriores do Robot Framework.
|
|
60
|
-
|
|
61
|
-
### Só texto (sem Browser)
|
|
62
|
-
|
|
63
|
-
```robot
|
|
64
|
-
*** Settings ***
|
|
65
|
-
Library GeminiLibrary
|
|
66
|
-
|
|
67
|
-
*** Keywords ***
|
|
68
|
-
Validar resposta da API
|
|
69
|
-
${context}= Set Variable {"status": "ok", "items": 3}
|
|
70
|
-
${evaluation}= Set Variable O payload indica sucesso com itens?
|
|
71
|
-
${model_response}= Gemini Evaluate Text ${context} ${evaluation}
|
|
72
|
-
Log ${model_response}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Com captura de tela (Browser)
|
|
76
|
-
|
|
77
|
-
Declare a biblioteca **Browser** antes de **Gemini**:
|
|
78
|
-
|
|
79
|
-
```robot
|
|
80
|
-
*** Settings ***
|
|
81
|
-
Library Browser
|
|
82
|
-
Library GeminiLibrary
|
|
83
|
-
|
|
84
|
-
*** Keywords ***
|
|
85
|
-
Checar tela por critério neutro
|
|
86
|
-
${context}= Set Variable Lista filtrada por status Ativo.
|
|
87
|
-
${evaluation}= Set Variable Todos os itens visíveis mostram status Ativo?
|
|
88
|
-
${model_response}= Gemini Evaluate With Screen ${context} ${evaluation}
|
|
89
|
-
Log ${model_response}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Import explícito (equivalente):
|
|
93
|
-
|
|
94
|
-
```robot
|
|
95
|
-
Library robotframework_gemini.library.GeminiLibrary
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Com arquivo já salvo:
|
|
99
|
-
|
|
100
|
-
```robot
|
|
101
|
-
Browser.Take Screenshot ${OUTPUT_DIR}/tela.png
|
|
102
|
-
${model_response}= Gemini Evaluate With Image File ${context} ${evaluation} ${OUTPUT_DIR}/tela.png
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Veredito via prompt (primeira linha) e nota 1–5:
|
|
106
|
-
|
|
107
|
-
```robot
|
|
108
|
-
${model_response}= Gemini Evaluate With Screen ${context} ${evaluation}
|
|
109
|
-
... extra_instructions=Responda com uma palavra na primeira linha: Sim ou Não.
|
|
110
|
-
${verdict}= Get Line ${model_response} 0
|
|
111
|
-
Should Be Equal As Strings ${verdict} Sim
|
|
112
|
-
|
|
113
|
-
# Nota 1–5: duas etapas (log da justificativa) ou atalho em uma linha
|
|
114
|
-
${model_response}= Gemini Evaluate Text Rating ${context} ${evaluation}
|
|
115
|
-
${rating_score}= Gemini Parse Rating ${model_response}
|
|
116
|
-
|
|
117
|
-
${rating_score}= Gemini Evaluate Text Rating Score ${context} ${evaluation}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Detalhes das três keywords de nota: [`docs/KEYWORDS.pt-BR.md#notas-15-três-keywords-quando-usar`](docs/KEYWORDS.pt-BR.md#notas-15-três-keywords-quando-usar).
|
|
121
|
-
|
|
122
|
-
Consulte também [`examples/demo_template.robot`](examples/demo_template.robot).
|
|
123
|
-
|
|
124
|
-
## Documentação de Keywords
|
|
125
|
-
|
|
126
|
-
- Português: [`docs/KEYWORDS.pt-BR.md`](docs/KEYWORDS.pt-BR.md)
|
|
127
|
-
- English: [`docs/KEYWORDS.en.md`](docs/KEYWORDS.en.md)
|
|
128
|
-
|
|
129
|
-
## Compatibilidade
|
|
130
|
-
|
|
131
|
-
- `BrowserGeminiLibrary` permanece como alias de `GeminiLibrary` para suítes existentes.
|
|
132
|
-
- Variáveis legadas (`LLM_API_KEY`, `LLM_API_KEY_LIA`, `LLM_LIA_MODEL`) são mapeadas para `GEMINI_*` ao importar o pacote.
|
|
133
|
-
|
|
134
|
-
## Testes
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
pytest
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Os testes usam mocks de `generate_content`; não há chamadas reais à API.
|
|
141
|
-
|
|
142
|
-
## Licença
|
|
143
|
-
|
|
144
|
-
MIT.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robotframework_gemini-0.3.0 → robotframework_gemini-0.3.2}/src/robotframework_gemini/legacy_env.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|