IncludeCPP 4.0.2__py3-none-any.whl → 4.3.0__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.
@@ -32,8 +32,12 @@ MODELS = {
32
32
  'gpt-3.5-turbo': {'context': 16385, 'endpoint': 'gpt-3.5-turbo'},
33
33
  'gpt-4-turbo': {'context': 128000, 'endpoint': 'gpt-4-turbo'},
34
34
  'gpt-4o': {'context': 128000, 'endpoint': 'gpt-4o'},
35
+ 'gpt-4o-mini': {'context': 128000, 'endpoint': 'gpt-4o-mini'},
35
36
  'gpt-5': {'context': 256000, 'endpoint': 'gpt-5'},
36
37
  'gpt-5-nano': {'context': 32000, 'endpoint': 'gpt-5-nano'},
38
+ 'o1': {'context': 200000, 'endpoint': 'o1'},
39
+ 'o1-mini': {'context': 128000, 'endpoint': 'o1-mini'},
40
+ 'o1-preview': {'context': 128000, 'endpoint': 'o1-preview'},
37
41
  }
38
42
 
39
43
  DEFAULT_MODEL = 'gpt-5'
@@ -981,18 +985,43 @@ class AIManager:
981
985
  'Content-Type': 'application/json'
982
986
  }
983
987
  token_limit = min(16000, model_info['context'] // 2)
984
- data = {
985
- 'model': model_info['endpoint'],
986
- 'messages': [
987
- {'role': 'system', 'content': system_prompt},
988
- {'role': 'user', 'content': user_prompt}
989
- ]
990
- }
991
- if model.startswith('gpt-5'):
992
- data['max_completion_tokens'] = token_limit
988
+
989
+ # o1 models use different message format (no system message, combined into user)
990
+ # gpt-5 models use max_completion_tokens instead of max_tokens
991
+ is_o1_model = model.startswith('o1')
992
+ is_gpt5_model = model.startswith('gpt-5')
993
+
994
+ if is_o1_model:
995
+ # o1 models: combine system + user into single user message
996
+ combined_content = f"{system_prompt}\n\n---\n\n{user_prompt}"
997
+ data = {
998
+ 'model': model_info['endpoint'],
999
+ 'messages': [
1000
+ {'role': 'user', 'content': combined_content}
1001
+ ],
1002
+ 'max_completion_tokens': token_limit
1003
+ }
1004
+ # o1 models don't support temperature
1005
+ elif is_gpt5_model:
1006
+ # gpt-5 models: use max_completion_tokens, no custom temperature
1007
+ data = {
1008
+ 'model': model_info['endpoint'],
1009
+ 'messages': [
1010
+ {'role': 'system', 'content': system_prompt},
1011
+ {'role': 'user', 'content': user_prompt}
1012
+ ],
1013
+ 'max_completion_tokens': token_limit
1014
+ }
993
1015
  else:
994
- data['max_tokens'] = token_limit
995
- data['temperature'] = temperature
1016
+ data = {
1017
+ 'model': model_info['endpoint'],
1018
+ 'messages': [
1019
+ {'role': 'system', 'content': system_prompt},
1020
+ {'role': 'user', 'content': user_prompt}
1021
+ ],
1022
+ 'max_tokens': token_limit,
1023
+ 'temperature': temperature
1024
+ }
996
1025
  try:
997
1026
  response = requests.post(OPENAI_API_URL, headers=headers, json=data, timeout=timeout)
998
1027
  if response.status_code == 200:
@@ -1312,6 +1341,10 @@ class AIManager:
1312
1341
  import platform
1313
1342
  import subprocess
1314
1343
 
1344
+ # Early fail-fast checks
1345
+ if not self.config.get('api_key'):
1346
+ return False, 'No API key configured. Run: includecpp ai setup', []
1347
+
1315
1348
  # Build tools list for prompt
1316
1349
  tools_list = '\n'.join([
1317
1350
  f"- {name}: {info['desc']}\n Format:\n {info['format']}"
@@ -1371,9 +1404,9 @@ class AIManager:
1371
1404
 
1372
1405
  prompt = self._build_prompt_with_docs(prompt)
1373
1406
 
1374
- # Temperature and timeout
1407
+ # Temperature and timeout (reduced for faster failure detection)
1375
1408
  temperature = 0.1 if think_three else (0.2 if think_twice else 0.3)
1376
- timeout = None if think_three else (420 if think_twice else (300 if think else 180))
1409
+ timeout = 180 if think_three else (120 if think_twice else (90 if think else 60))
1377
1410
 
1378
1411
  # Execute with tool loop
1379
1412
  all_changes = []
@@ -0,0 +1,350 @@
1
+ """Auto-generated type stubs for IncludeCPP module wrappers.
2
+
3
+ This file enables VSCode IntelliSense autocomplete for C++ modules.
4
+ DO NOT EDIT - Auto-generated by IncludeCPP build system.
5
+ """
6
+
7
+ from typing import Any, List, Dict, Optional, Union, Protocol, overload
8
+
9
+ class Fast_listModuleWrapper(Protocol):
10
+ """Type hints for fast_list module wrapper (VSCode autocomplete support)."""
11
+
12
+ def getInfo(self) -> Dict[str, Any]:
13
+ """Get fast_list module information."""
14
+ ...
15
+
16
+ class FastList:
17
+ """C++ class: FastList"""
18
+
19
+ def __init__(self) -> None:
20
+ """Initialize FastList instance"""
21
+ ...
22
+
23
+ def add(self, *args: Any, **kwargs: Any) -> Any:
24
+ """C++ method: add"""
25
+ ...
26
+
27
+ def get(self, *args: Any, **kwargs: Any) -> Any:
28
+ """C++ method: get"""
29
+ ...
30
+
31
+ def size(self, *args: Any, **kwargs: Any) -> Any:
32
+ """C++ method: size"""
33
+ ...
34
+
35
+ def clear(self, *args: Any, **kwargs: Any) -> Any:
36
+ """C++ method: clear"""
37
+ ...
38
+
39
+
40
+ def fast_sort(self, *args: Any, **kwargs: Any) -> Any:
41
+ """C++ function: fast_sort"""
42
+ ...
43
+
44
+ def fast_reverse(self, *args: Any, **kwargs: Any) -> Any:
45
+ """C++ function: fast_reverse"""
46
+ ...
47
+
48
+ def fast_sum(self, *args: Any, **kwargs: Any) -> Any:
49
+ """C++ function: fast_sum"""
50
+ ...
51
+
52
+ def fast_max(self, *args: Any, **kwargs: Any) -> Any:
53
+ """C++ function: fast_max"""
54
+ ...
55
+
56
+ def fast_min(self, *args: Any, **kwargs: Any) -> Any:
57
+ """C++ function: fast_min"""
58
+ ...
59
+
60
+
61
+
62
+ class Game_mathModuleWrapper(Protocol):
63
+ """Type hints for game_math module wrapper (VSCode autocomplete support)."""
64
+
65
+ def getInfo(self) -> Dict[str, Any]:
66
+ """Get game_math module information."""
67
+ ...
68
+
69
+ class Vector2D:
70
+ """C++ class: Vector2D"""
71
+
72
+ @overload
73
+ def __init__(self) -> None: ...
74
+ @overload
75
+ def __init__(self, arg0: float, arg1: float) -> None: ...
76
+
77
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
78
+ """Initialize Vector2D instance"""
79
+ ...
80
+
81
+ def add(self, *args: Any, **kwargs: Any) -> Any:
82
+ """C++ method: add"""
83
+ ...
84
+
85
+ def dot(self, *args: Any, **kwargs: Any) -> Any:
86
+ """C++ method: dot"""
87
+ ...
88
+
89
+ def length(self, *args: Any, **kwargs: Any) -> Any:
90
+ """C++ method: length"""
91
+ ...
92
+
93
+ def normalize(self, *args: Any, **kwargs: Any) -> Any:
94
+ """C++ method: normalize"""
95
+ ...
96
+
97
+
98
+ def boxCollision(self, *args: Any, **kwargs: Any) -> Any:
99
+ """C++ function: boxCollision"""
100
+ ...
101
+
102
+ def circleCollision(self, *args: Any, **kwargs: Any) -> Any:
103
+ """C++ function: circleCollision"""
104
+ ...
105
+
106
+ def distance(self, *args: Any, **kwargs: Any) -> Any:
107
+ """C++ function: distance"""
108
+ ...
109
+
110
+ def square(self, *args: Any, **kwargs: Any) -> Any:
111
+ """C++ function: square"""
112
+ ...
113
+
114
+
115
+
116
+ class Solar_systemModuleWrapper(Protocol):
117
+ """Type hints for solar_system module wrapper (VSCode autocomplete support)."""
118
+
119
+ def getInfo(self) -> Dict[str, Any]:
120
+ """Get solar_system module information."""
121
+ ...
122
+
123
+ class CelestialBody:
124
+ """C++ class: CelestialBody"""
125
+
126
+ def __init__(self) -> None:
127
+ """Initialize CelestialBody instance"""
128
+ ...
129
+
130
+ def add_trajectory_point(self, *args: Any, **kwargs: Any) -> Any:
131
+ """C++ method: add_trajectory_point"""
132
+ ...
133
+
134
+
135
+ class SolarSystem:
136
+ """C++ class: SolarSystem"""
137
+
138
+ def __init__(self) -> None:
139
+ """Initialize SolarSystem instance"""
140
+ ...
141
+
142
+ def calculate_angular_momentum(self, *args: Any, **kwargs: Any) -> Any:
143
+ """C++ method: calculate_angular_momentum"""
144
+ ...
145
+
146
+ def calculate_total_energy(self, *args: Any, **kwargs: Any) -> Any:
147
+ """C++ method: calculate_total_energy"""
148
+ ...
149
+
150
+ def get_body_count(self, *args: Any, **kwargs: Any) -> Any:
151
+ """C++ method: get_body_count"""
152
+ ...
153
+
154
+ def get_distance_from_sun(self, *args: Any, **kwargs: Any) -> Any:
155
+ """C++ method: get_distance_from_sun"""
156
+ ...
157
+
158
+ def get_energy_error(self, *args: Any, **kwargs: Any) -> Any:
159
+ """C++ method: get_energy_error"""
160
+ ...
161
+
162
+ def get_masses(self, *args: Any, **kwargs: Any) -> Any:
163
+ """C++ method: get_masses"""
164
+ ...
165
+
166
+ def get_names(self, *args: Any, **kwargs: Any) -> Any:
167
+ """C++ method: get_names"""
168
+ ...
169
+
170
+ def get_orbital_period(self, *args: Any, **kwargs: Any) -> Any:
171
+ """C++ method: get_orbital_period"""
172
+ ...
173
+
174
+ def get_positions(self, *args: Any, **kwargs: Any) -> Any:
175
+ """C++ method: get_positions"""
176
+ ...
177
+
178
+ def get_positions_au(self, *args: Any, **kwargs: Any) -> Any:
179
+ """C++ method: get_positions_au"""
180
+ ...
181
+
182
+ def get_radii(self, *args: Any, **kwargs: Any) -> Any:
183
+ """C++ method: get_radii"""
184
+ ...
185
+
186
+ def get_simulation_time(self, *args: Any, **kwargs: Any) -> Any:
187
+ """C++ method: get_simulation_time"""
188
+ ...
189
+
190
+ def get_simulation_time_days(self, *args: Any, **kwargs: Any) -> Any:
191
+ """C++ method: get_simulation_time_days"""
192
+ ...
193
+
194
+ def get_simulation_time_years(self, *args: Any, **kwargs: Any) -> Any:
195
+ """C++ method: get_simulation_time_years"""
196
+ ...
197
+
198
+ def get_speed(self, *args: Any, **kwargs: Any) -> Any:
199
+ """C++ method: get_speed"""
200
+ ...
201
+
202
+ def get_step_count(self, *args: Any, **kwargs: Any) -> Any:
203
+ """C++ method: get_step_count"""
204
+ ...
205
+
206
+ def get_total_energy(self, *args: Any, **kwargs: Any) -> Any:
207
+ """C++ method: get_total_energy"""
208
+ ...
209
+
210
+ def get_trajectory(self, *args: Any, **kwargs: Any) -> Any:
211
+ """C++ method: get_trajectory"""
212
+ ...
213
+
214
+ def get_velocities(self, *args: Any, **kwargs: Any) -> Any:
215
+ """C++ method: get_velocities"""
216
+ ...
217
+
218
+ def init_real_solar_system(self, *args: Any, **kwargs: Any) -> Any:
219
+ """C++ method: init_real_solar_system"""
220
+ ...
221
+
222
+ def simulate(self, *args: Any, **kwargs: Any) -> Any:
223
+ """C++ method: simulate"""
224
+ ...
225
+
226
+ def step(self, *args: Any, **kwargs: Any) -> Any:
227
+ """C++ method: step"""
228
+ ...
229
+
230
+
231
+ def get_AU(self, *args: Any, **kwargs: Any) -> Any:
232
+ """C++ function: get_AU"""
233
+ ...
234
+
235
+ def get_DAY(self, *args: Any, **kwargs: Any) -> Any:
236
+ """C++ function: get_DAY"""
237
+ ...
238
+
239
+ def get_G(self, *args: Any, **kwargs: Any) -> Any:
240
+ """C++ function: get_G"""
241
+ ...
242
+
243
+ def get_YEAR(self, *args: Any, **kwargs: Any) -> Any:
244
+ """C++ function: get_YEAR"""
245
+ ...
246
+
247
+
248
+
249
+ class TemplatesModuleWrapper(Protocol):
250
+ """Type hints for templates module wrapper (VSCode autocomplete support)."""
251
+
252
+ def getInfo(self) -> Dict[str, Any]:
253
+ """Get templates module information."""
254
+ ...
255
+
256
+ class Pointf:
257
+ """C++ class: Pointf"""
258
+
259
+ @overload
260
+ def __init__(self) -> None: ...
261
+ @overload
262
+ def __init__(self, arg0: float, arg1: float) -> None: ...
263
+
264
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
265
+ """Initialize Pointf instance"""
266
+ ...
267
+
268
+ def distanceFromOrigin(self, *args: Any, **kwargs: Any) -> Any:
269
+ """C++ method: distanceFromOrigin"""
270
+ ...
271
+
272
+
273
+ class Pointi:
274
+ """C++ class: Pointi"""
275
+
276
+ @overload
277
+ def __init__(self) -> None: ...
278
+ @overload
279
+ def __init__(self, arg0: int, arg1: int) -> None: ...
280
+
281
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
282
+ """Initialize Pointi instance"""
283
+ ...
284
+
285
+ def distanceFromOrigin(self, *args: Any, **kwargs: Any) -> Any:
286
+ """C++ method: distanceFromOrigin"""
287
+ ...
288
+
289
+
290
+ def maximum(self, *args: Any, **kwargs: Any) -> Any:
291
+ """C++ function: maximum"""
292
+ ...
293
+
294
+ def sumVector(self, *args: Any, **kwargs: Any) -> Any:
295
+ """C++ function: sumVector"""
296
+ ...
297
+
298
+
299
+
300
+ # CppApi with typed include() overloads for each module
301
+ class CppApi:
302
+ """C++ API Manager with typed module loading.
303
+
304
+ The include() method returns a module wrapper with full type hints
305
+ for VSCode/PyCharm autocomplete support.
306
+ """
307
+
308
+ def __init__(self, project_root: Optional[str] = None, auto_update: bool = True) -> None:
309
+ """Initialize CppApi.
310
+
311
+ Args:
312
+ project_root: Path to project root (default: auto-detect)
313
+ auto_update: Whether to auto-rebuild on source changes
314
+ """
315
+ ...
316
+
317
+ @overload
318
+ def include(self, module_name: str = "fast_list", auto_update: Optional[bool] = None) -> Fast_listModuleWrapper: ...
319
+
320
+ @overload
321
+ def include(self, module_name: str = "game_math", auto_update: Optional[bool] = None) -> Game_mathModuleWrapper: ...
322
+
323
+ @overload
324
+ def include(self, module_name: str = "solar_system", auto_update: Optional[bool] = None) -> Solar_systemModuleWrapper: ...
325
+
326
+ @overload
327
+ def include(self, module_name: str = "templates", auto_update: Optional[bool] = None) -> TemplatesModuleWrapper: ...
328
+
329
+ @overload
330
+ def include(self, module_name: str, auto_update: Optional[bool] = None) -> Any: ...
331
+
332
+ def include(self, module_name: str, auto_update: Optional[bool] = None) -> Any:
333
+ """Load a C++ module.
334
+
335
+ Args:
336
+ module_name: Name of the module to load
337
+ auto_update: Override auto-update setting for this module
338
+
339
+ Returns:
340
+ ModuleWrapper with access to C++ classes, functions, and structs
341
+ """
342
+ ...
343
+
344
+ def rebuild(self, verbose: bool = False) -> bool:
345
+ """Rebuild all C++ modules."""
346
+ ...
347
+
348
+ def list_modules(self) -> List[str]:
349
+ """List available modules."""
350
+ ...