brickfrog commited on
Commit
903941a
·
verified ·
1 Parent(s): f5605ad

Upload folder using huggingface_hub

Browse files
ankigen/agents/base.py CHANGED
@@ -69,17 +69,24 @@ class BaseAgentWrapper:
69
  set_default_openai_client(self.openai_client, use_for_tracing=False)
70
 
71
  # Create model settings with temperature and optional reasoning effort
72
- model_settings_kwargs = {"temperature": self.config.temperature}
73
  effort = self.config.reasoning_effort
74
  if effort in ("auto", "", None):
75
  effort = None
76
 
77
  # GPT-5.x (not chat-latest) supports reasoning_effort
78
- if (
79
  effort
80
  and self.config.model.startswith("gpt-5")
81
  and "chat-latest" not in self.config.model
82
- ):
 
 
 
 
 
 
 
 
83
  from openai.types.shared import Reasoning
84
 
85
  model_settings_kwargs["reasoning"] = Reasoning(effort=effort)
 
69
  set_default_openai_client(self.openai_client, use_for_tracing=False)
70
 
71
  # Create model settings with temperature and optional reasoning effort
 
72
  effort = self.config.reasoning_effort
73
  if effort in ("auto", "", None):
74
  effort = None
75
 
76
  # GPT-5.x (not chat-latest) supports reasoning_effort
77
+ is_reasoning_model = (
78
  effort
79
  and self.config.model.startswith("gpt-5")
80
  and "chat-latest" not in self.config.model
81
+ )
82
+ # GPT-5.x with reasoning effort > none doesn't support temperature
83
+ model_settings_kwargs = (
84
+ {}
85
+ if is_reasoning_model and effort != "none"
86
+ else {"temperature": self.config.temperature}
87
+ )
88
+
89
+ if is_reasoning_model:
90
  from openai.types.shared import Reasoning
91
 
92
  model_settings_kwargs["reasoning"] = Reasoning(effort=effort)
ankigen/card_generator.py CHANGED
@@ -63,24 +63,18 @@ GENERATION_MODES = [
63
  def _parse_model_selection(model_selection: str) -> tuple[str, str | None]:
64
  """Parse model selection into model name and reasoning effort."""
65
  if not model_selection:
66
- return "gpt-5.2", None
67
 
68
  normalized = model_selection.strip().lower()
69
- if normalized == "gpt-5.2-auto":
70
- return "gpt-5.2", None
71
- if normalized == "gpt-5.2-instant":
72
- return "gpt-5.2", "none"
73
- if normalized == "gpt-5.2-thinking":
74
- return "gpt-5.2", "high"
75
-
76
- if "gpt-5.2" in normalized:
77
- if "instant" in normalized:
78
- return "gpt-5.2", "none"
79
- if "thinking" in normalized:
80
- return "gpt-5.2", "high"
81
- if "auto" in normalized:
82
- return "gpt-5.2", None
83
- return "gpt-5.2", None
84
 
85
  # Fallback for direct model names
86
  return model_selection, None
 
63
  def _parse_model_selection(model_selection: str) -> tuple[str, str | None]:
64
  """Parse model selection into model name and reasoning effort."""
65
  if not model_selection:
66
+ return "gpt-5.4", None
67
 
68
  normalized = model_selection.strip().lower()
69
+
70
+ # Match exact gpt-5.X-{auto,instant,thinking} variants only
71
+ for base in ("gpt-5.4", "gpt-5.2"):
72
+ if normalized == base or normalized == f"{base}-auto":
73
+ return base, None
74
+ if normalized == f"{base}-instant":
75
+ return base, "none"
76
+ if normalized == f"{base}-thinking":
77
+ return base, "high"
 
 
 
 
 
 
78
 
79
  # Fallback for direct model names
80
  return model_selection, None
ankigen/cli.py CHANGED
@@ -221,7 +221,14 @@ def export_cards(
221
  @click.option(
222
  "--model",
223
  type=click.Choice(
224
- ["gpt-5.2-auto", "gpt-5.2-instant", "gpt-5.2-thinking"],
 
 
 
 
 
 
 
225
  case_sensitive=False,
226
  ),
227
  help="Model to use for generation (auto-selected if not specified)",
 
221
  @click.option(
222
  "--model",
223
  type=click.Choice(
224
+ [
225
+ "gpt-5.2-auto",
226
+ "gpt-5.2-instant",
227
+ "gpt-5.2-thinking",
228
+ "gpt-5.4-auto",
229
+ "gpt-5.4-instant",
230
+ "gpt-5.4-thinking",
231
+ ],
232
  case_sensitive=False,
233
  ),
234
  help="Model to use for generation (auto-selected if not specified)",
requirements.txt CHANGED
@@ -1,5 +1,6 @@
1
  # This file was autogenerated by uv via the following command:
2
- # uv pip compile pyproject.toml --extra dev --extra cli -o requirements.txt
 
3
  aiofiles==24.1.0
4
  # via gradio
5
  annotated-doc==0.0.4
@@ -14,20 +15,19 @@ anyio==4.12.1
14
  # httpx
15
  # mcp
16
  # openai
17
- # pytest-anyio
18
  # sse-starlette
19
  # starlette
20
- attrs==25.4.0
21
  # via
22
  # jsonschema
23
  # referencing
 
 
24
  beautifulsoup4==4.13.5
25
- # via ankigen (pyproject.toml)
26
- black==26.3.0
27
- # via ankigen (pyproject.toml)
28
  brotli==1.2.0
29
  # via
30
- # ankigen (pyproject.toml)
31
  # gradio
32
  cached-property==2.0.1
33
  # via genanki
@@ -36,40 +36,33 @@ certifi==2026.2.25
36
  # httpcore
37
  # httpx
38
  # requests
39
- cffi==2.0.0
40
  # via cryptography
41
- cfgv==3.5.0
42
- # via pre-commit
43
- charset-normalizer==3.4.5
44
  # via requests
45
  chevron==0.14.0
46
  # via genanki
47
  click==8.3.1
48
  # via
49
- # ankigen (pyproject.toml)
50
- # black
51
  # typer
52
  # uvicorn
53
  colorama==0.4.6
54
- # via griffe
55
- coverage==7.13.4
56
- # via pytest-cov
 
57
  cryptography==46.0.5
58
  # via pyjwt
59
- distlib==0.4.0
60
- # via virtualenv
61
  distro==1.9.0
62
  # via openai
63
  fastapi==0.135.1
64
  # via gradio
65
  ffmpy==1.0.0
66
  # via gradio
67
- filelock==3.25.1
68
  # via
69
- # ankigen (pyproject.toml)
70
  # huggingface-hub
71
- # python-discovery
72
- # virtualenv
73
  frozendict==2.4.7
74
  # via genanki
75
  fsspec==2026.2.0
@@ -77,9 +70,9 @@ fsspec==2026.2.0
77
  # gradio-client
78
  # huggingface-hub
79
  genanki==0.13.1
80
- # via ankigen (pyproject.toml)
81
  gradio==6.9.0
82
- # via ankigen (pyproject.toml)
83
  gradio-client==2.3.0
84
  # via gradio
85
  griffe==1.15.0
@@ -90,7 +83,7 @@ h11==0.16.0
90
  # via
91
  # httpcore
92
  # uvicorn
93
- hf-xet==1.3.2
94
  # via huggingface-hub
95
  httpcore==1.0.9
96
  # via httpx
@@ -104,19 +97,15 @@ httpx==0.28.1
104
  # safehttpx
105
  httpx-sse==0.4.3
106
  # via mcp
107
- huggingface-hub==1.6.0
108
  # via
109
  # gradio
110
  # gradio-client
111
- identify==2.6.17
112
- # via pre-commit
113
  idna==3.11
114
  # via
115
  # anyio
116
  # httpx
117
  # requests
118
- iniconfig==2.3.0
119
- # via pytest
120
  jinja2==3.1.6
121
  # via gradio
122
  jiter==0.13.0
@@ -126,7 +115,7 @@ jsonschema==4.26.0
126
  jsonschema-specifications==2025.9.1
127
  # via jsonschema
128
  lxml==6.0.2
129
- # via ankigen (pyproject.toml)
130
  markdown-it-py==4.0.0
131
  # via rich
132
  markupsafe==3.0.3
@@ -137,57 +126,38 @@ mcp==1.26.0
137
  # via openai-agents
138
  mdurl==0.1.2
139
  # via markdown-it-py
140
- mypy-extensions==1.1.0
141
- # via black
142
- nodeenv==1.10.0
143
- # via pre-commit
144
  numpy==2.4.3
145
  # via
146
  # gradio
147
  # pandas
148
- openai==2.26.0
149
  # via
150
- # ankigen (pyproject.toml)
151
  # openai-agents
152
- openai-agents==0.11.1
153
- # via ankigen (pyproject.toml)
154
  orjson==3.11.7
155
  # via
156
- # ankigen (pyproject.toml)
157
  # gradio
158
  packaging==26.0
159
  # via
160
- # black
161
  # gradio
162
  # gradio-client
163
  # huggingface-hub
164
- # pytest
165
  pandas==3.0.1
166
  # via
167
- # ankigen (pyproject.toml)
168
  # gradio
169
- pathspec==1.0.4
170
- # via black
171
  pillow==12.1.1
172
  # via
173
- # ankigen (pyproject.toml)
174
  # gradio
175
- platformdirs==4.9.4
176
- # via
177
- # black
178
- # python-discovery
179
- # virtualenv
180
- pluggy==1.6.0
181
- # via
182
- # pytest
183
- # pytest-cov
184
- pre-commit==4.5.1
185
- # via ankigen (pyproject.toml)
186
- pycparser==3.0
187
  # via cffi
188
  pydantic==2.12.5
189
  # via
190
- # ankigen (pyproject.toml)
191
  # fastapi
192
  # gradio
193
  # mcp
@@ -201,46 +171,27 @@ pydantic-settings==2.13.1
201
  pydub==0.25.1
202
  # via gradio
203
  pygments==2.19.2
204
- # via
205
- # pytest
206
- # rich
207
- pyjwt==2.11.0
208
  # via mcp
209
- pytest==9.0.2
210
- # via
211
- # ankigen (pyproject.toml)
212
- # pytest-anyio
213
- # pytest-cov
214
- # pytest-mock
215
- pytest-anyio==0.0.0
216
- # via ankigen (pyproject.toml)
217
- pytest-cov==7.0.0
218
- # via ankigen (pyproject.toml)
219
- pytest-mock==3.15.1
220
- # via ankigen (pyproject.toml)
221
  python-dateutil==2.9.0.post0
222
  # via pandas
223
- python-discovery==1.1.3
224
- # via virtualenv
225
  python-dotenv==1.2.2
226
- # via
227
- # ankigen (pyproject.toml)
228
- # pydantic-settings
229
  python-multipart==0.0.22
230
  # via
231
- # ankigen (pyproject.toml)
232
  # gradio
233
  # mcp
234
- pytokens==0.4.1
235
- # via black
236
  pytz==2026.1.post1
237
  # via gradio
 
 
238
  pyyaml==6.0.3
239
  # via
240
  # genanki
241
  # gradio
242
  # huggingface-hub
243
- # pre-commit
244
  referencing==0.37.0
245
  # via
246
  # jsonschema
@@ -252,15 +203,11 @@ requests==2.32.5
252
  # openai-agents
253
  # tiktoken
254
  rich==14.3.3
255
- # via
256
- # ankigen (pyproject.toml)
257
- # typer
258
  rpds-py==0.30.0
259
  # via
260
  # jsonschema
261
  # referencing
262
- ruff==0.15.5
263
- # via ankigen (pyproject.toml)
264
  safehttpx==0.1.7
265
  # via gradio
266
  semantic-version==2.10.0
@@ -273,19 +220,19 @@ sniffio==1.3.1
273
  # via openai
274
  soupsieve==2.8.3
275
  # via beautifulsoup4
276
- sse-starlette==3.3.2
277
  # via mcp
278
  starlette==0.52.1
279
  # via
280
- # ankigen (pyproject.toml)
281
  # fastapi
282
  # gradio
283
  # mcp
284
  # sse-starlette
285
  tenacity==9.1.4
286
- # via ankigen (pyproject.toml)
287
  tiktoken==0.12.0
288
- # via ankigen (pyproject.toml)
289
  tomlkit==0.13.3
290
  # via gradio
291
  tqdm==4.67.3
@@ -320,16 +267,14 @@ typing-inspection==0.4.2
320
  # mcp
321
  # pydantic
322
  # pydantic-settings
 
 
323
  urllib3==2.6.3
324
  # via
325
- # ankigen (pyproject.toml)
326
  # requests
327
  # types-requests
328
- uvicorn==0.41.0
329
  # via
330
  # gradio
331
  # mcp
332
- virtualenv==21.2.0
333
- # via
334
- # ankigen (pyproject.toml)
335
- # pre-commit
 
1
  # This file was autogenerated by uv via the following command:
2
+ # uv export --no-hashes --frozen -o requirements.txt
3
+ -e .
4
  aiofiles==24.1.0
5
  # via gradio
6
  annotated-doc==0.0.4
 
15
  # httpx
16
  # mcp
17
  # openai
 
18
  # sse-starlette
19
  # starlette
20
+ attrs==26.1.0
21
  # via
22
  # jsonschema
23
  # referencing
24
+ audioop-lts==0.2.2 ; python_full_version >= '3.13'
25
+ # via gradio
26
  beautifulsoup4==4.13.5
27
+ # via ankigen
 
 
28
  brotli==1.2.0
29
  # via
30
+ # ankigen
31
  # gradio
32
  cached-property==2.0.1
33
  # via genanki
 
36
  # httpcore
37
  # httpx
38
  # requests
39
+ cffi==2.0.0 ; platform_python_implementation != 'PyPy'
40
  # via cryptography
41
+ charset-normalizer==3.4.6
 
 
42
  # via requests
43
  chevron==0.14.0
44
  # via genanki
45
  click==8.3.1
46
  # via
 
 
47
  # typer
48
  # uvicorn
49
  colorama==0.4.6
50
+ # via
51
+ # click
52
+ # griffe
53
+ # tqdm
54
  cryptography==46.0.5
55
  # via pyjwt
 
 
56
  distro==1.9.0
57
  # via openai
58
  fastapi==0.135.1
59
  # via gradio
60
  ffmpy==1.0.0
61
  # via gradio
62
+ filelock==3.25.2
63
  # via
64
+ # ankigen
65
  # huggingface-hub
 
 
66
  frozendict==2.4.7
67
  # via genanki
68
  fsspec==2026.2.0
 
70
  # gradio-client
71
  # huggingface-hub
72
  genanki==0.13.1
73
+ # via ankigen
74
  gradio==6.9.0
75
+ # via ankigen
76
  gradio-client==2.3.0
77
  # via gradio
78
  griffe==1.15.0
 
83
  # via
84
  # httpcore
85
  # uvicorn
86
+ hf-xet==1.4.2 ; platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
87
  # via huggingface-hub
88
  httpcore==1.0.9
89
  # via httpx
 
97
  # safehttpx
98
  httpx-sse==0.4.3
99
  # via mcp
100
+ huggingface-hub==1.7.2
101
  # via
102
  # gradio
103
  # gradio-client
 
 
104
  idna==3.11
105
  # via
106
  # anyio
107
  # httpx
108
  # requests
 
 
109
  jinja2==3.1.6
110
  # via gradio
111
  jiter==0.13.0
 
115
  jsonschema-specifications==2025.9.1
116
  # via jsonschema
117
  lxml==6.0.2
118
+ # via ankigen
119
  markdown-it-py==4.0.0
120
  # via rich
121
  markupsafe==3.0.3
 
126
  # via openai-agents
127
  mdurl==0.1.2
128
  # via markdown-it-py
 
 
 
 
129
  numpy==2.4.3
130
  # via
131
  # gradio
132
  # pandas
133
+ openai==2.29.0
134
  # via
135
+ # ankigen
136
  # openai-agents
137
+ openai-agents==0.12.5
138
+ # via ankigen
139
  orjson==3.11.7
140
  # via
141
+ # ankigen
142
  # gradio
143
  packaging==26.0
144
  # via
 
145
  # gradio
146
  # gradio-client
147
  # huggingface-hub
 
148
  pandas==3.0.1
149
  # via
150
+ # ankigen
151
  # gradio
 
 
152
  pillow==12.1.1
153
  # via
154
+ # ankigen
155
  # gradio
156
+ pycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy'
 
 
 
 
 
 
 
 
 
 
 
157
  # via cffi
158
  pydantic==2.12.5
159
  # via
160
+ # ankigen
161
  # fastapi
162
  # gradio
163
  # mcp
 
171
  pydub==0.25.1
172
  # via gradio
173
  pygments==2.19.2
174
+ # via rich
175
+ pyjwt==2.12.1
 
 
176
  # via mcp
 
 
 
 
 
 
 
 
 
 
 
 
177
  python-dateutil==2.9.0.post0
178
  # via pandas
 
 
179
  python-dotenv==1.2.2
180
+ # via pydantic-settings
 
 
181
  python-multipart==0.0.22
182
  # via
183
+ # ankigen
184
  # gradio
185
  # mcp
 
 
186
  pytz==2026.1.post1
187
  # via gradio
188
+ pywin32==311 ; sys_platform == 'win32'
189
+ # via mcp
190
  pyyaml==6.0.3
191
  # via
192
  # genanki
193
  # gradio
194
  # huggingface-hub
 
195
  referencing==0.37.0
196
  # via
197
  # jsonschema
 
203
  # openai-agents
204
  # tiktoken
205
  rich==14.3.3
206
+ # via typer
 
 
207
  rpds-py==0.30.0
208
  # via
209
  # jsonschema
210
  # referencing
 
 
211
  safehttpx==0.1.7
212
  # via gradio
213
  semantic-version==2.10.0
 
220
  # via openai
221
  soupsieve==2.8.3
222
  # via beautifulsoup4
223
+ sse-starlette==3.3.3
224
  # via mcp
225
  starlette==0.52.1
226
  # via
227
+ # ankigen
228
  # fastapi
229
  # gradio
230
  # mcp
231
  # sse-starlette
232
  tenacity==9.1.4
233
+ # via ankigen
234
  tiktoken==0.12.0
235
+ # via ankigen
236
  tomlkit==0.13.3
237
  # via gradio
238
  tqdm==4.67.3
 
267
  # mcp
268
  # pydantic
269
  # pydantic-settings
270
+ tzdata==2025.3 ; sys_platform == 'emscripten' or sys_platform == 'win32'
271
+ # via pandas
272
  urllib3==2.6.3
273
  # via
274
+ # ankigen
275
  # requests
276
  # types-requests
277
+ uvicorn==0.42.0
278
  # via
279
  # gradio
280
  # mcp
 
 
 
 
uv.lock CHANGED
The diff for this file is too large to render. See raw diff