superqode 0.1.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.
Files changed (288) hide show
  1. superqode/__init__.py +33 -0
  2. superqode/acp/__init__.py +23 -0
  3. superqode/acp/client.py +913 -0
  4. superqode/acp/permission_screen.py +457 -0
  5. superqode/acp/types.py +480 -0
  6. superqode/acp_discovery.py +856 -0
  7. superqode/agent/__init__.py +22 -0
  8. superqode/agent/edit_strategies.py +334 -0
  9. superqode/agent/loop.py +892 -0
  10. superqode/agent/qe_report_templates.py +39 -0
  11. superqode/agent/system_prompts.py +353 -0
  12. superqode/agent_output.py +721 -0
  13. superqode/agent_stream.py +953 -0
  14. superqode/agents/__init__.py +59 -0
  15. superqode/agents/acp_registry.py +305 -0
  16. superqode/agents/client.py +249 -0
  17. superqode/agents/data/augmentcode.com.toml +51 -0
  18. superqode/agents/data/cagent.dev.toml +51 -0
  19. superqode/agents/data/claude.com.toml +60 -0
  20. superqode/agents/data/codeassistant.dev.toml +51 -0
  21. superqode/agents/data/codex.openai.com.toml +57 -0
  22. superqode/agents/data/fastagent.ai.toml +66 -0
  23. superqode/agents/data/geminicli.com.toml +77 -0
  24. superqode/agents/data/goose.block.xyz.toml +54 -0
  25. superqode/agents/data/junie.jetbrains.com.toml +56 -0
  26. superqode/agents/data/kimi.moonshot.cn.toml +57 -0
  27. superqode/agents/data/llmlingagent.dev.toml +51 -0
  28. superqode/agents/data/molt.bot.toml +49 -0
  29. superqode/agents/data/opencode.ai.toml +60 -0
  30. superqode/agents/data/stakpak.dev.toml +51 -0
  31. superqode/agents/data/vtcode.dev.toml +51 -0
  32. superqode/agents/discovery.py +266 -0
  33. superqode/agents/messaging.py +160 -0
  34. superqode/agents/persona.py +166 -0
  35. superqode/agents/registry.py +421 -0
  36. superqode/agents/schema.py +72 -0
  37. superqode/agents/unified.py +367 -0
  38. superqode/app/__init__.py +111 -0
  39. superqode/app/constants.py +314 -0
  40. superqode/app/css.py +366 -0
  41. superqode/app/models.py +118 -0
  42. superqode/app/suggester.py +125 -0
  43. superqode/app/widgets.py +1591 -0
  44. superqode/app_enhanced.py +399 -0
  45. superqode/app_main.py +17187 -0
  46. superqode/approval.py +312 -0
  47. superqode/atomic.py +296 -0
  48. superqode/commands/__init__.py +1 -0
  49. superqode/commands/acp.py +965 -0
  50. superqode/commands/agents.py +180 -0
  51. superqode/commands/auth.py +278 -0
  52. superqode/commands/config.py +374 -0
  53. superqode/commands/init.py +826 -0
  54. superqode/commands/providers.py +819 -0
  55. superqode/commands/qe.py +1145 -0
  56. superqode/commands/roles.py +380 -0
  57. superqode/commands/serve.py +172 -0
  58. superqode/commands/suggestions.py +127 -0
  59. superqode/commands/superqe.py +460 -0
  60. superqode/config/__init__.py +51 -0
  61. superqode/config/loader.py +812 -0
  62. superqode/config/schema.py +498 -0
  63. superqode/core/__init__.py +111 -0
  64. superqode/core/roles.py +281 -0
  65. superqode/danger.py +386 -0
  66. superqode/data/superqode-template.yaml +1522 -0
  67. superqode/design_system.py +1080 -0
  68. superqode/dialogs/__init__.py +6 -0
  69. superqode/dialogs/base.py +39 -0
  70. superqode/dialogs/model.py +130 -0
  71. superqode/dialogs/provider.py +870 -0
  72. superqode/diff_view.py +919 -0
  73. superqode/enterprise.py +21 -0
  74. superqode/evaluation/__init__.py +25 -0
  75. superqode/evaluation/adapters.py +93 -0
  76. superqode/evaluation/behaviors.py +89 -0
  77. superqode/evaluation/engine.py +209 -0
  78. superqode/evaluation/scenarios.py +96 -0
  79. superqode/execution/__init__.py +36 -0
  80. superqode/execution/linter.py +538 -0
  81. superqode/execution/modes.py +347 -0
  82. superqode/execution/resolver.py +283 -0
  83. superqode/execution/runner.py +642 -0
  84. superqode/file_explorer.py +811 -0
  85. superqode/file_viewer.py +471 -0
  86. superqode/flash.py +183 -0
  87. superqode/guidance/__init__.py +58 -0
  88. superqode/guidance/config.py +203 -0
  89. superqode/guidance/prompts.py +71 -0
  90. superqode/harness/__init__.py +54 -0
  91. superqode/harness/accelerator.py +291 -0
  92. superqode/harness/config.py +319 -0
  93. superqode/harness/validator.py +147 -0
  94. superqode/history.py +279 -0
  95. superqode/integrations/superopt_runner.py +124 -0
  96. superqode/logging/__init__.py +49 -0
  97. superqode/logging/adapters.py +219 -0
  98. superqode/logging/formatter.py +923 -0
  99. superqode/logging/integration.py +341 -0
  100. superqode/logging/sinks.py +170 -0
  101. superqode/logging/unified_log.py +417 -0
  102. superqode/lsp/__init__.py +26 -0
  103. superqode/lsp/client.py +544 -0
  104. superqode/main.py +1069 -0
  105. superqode/mcp/__init__.py +89 -0
  106. superqode/mcp/auth_storage.py +380 -0
  107. superqode/mcp/client.py +1236 -0
  108. superqode/mcp/config.py +319 -0
  109. superqode/mcp/integration.py +337 -0
  110. superqode/mcp/oauth.py +436 -0
  111. superqode/mcp/oauth_callback.py +385 -0
  112. superqode/mcp/types.py +290 -0
  113. superqode/memory/__init__.py +31 -0
  114. superqode/memory/feedback.py +342 -0
  115. superqode/memory/store.py +522 -0
  116. superqode/notifications.py +369 -0
  117. superqode/optimization/__init__.py +5 -0
  118. superqode/optimization/config.py +33 -0
  119. superqode/permissions/__init__.py +25 -0
  120. superqode/permissions/rules.py +488 -0
  121. superqode/plan.py +323 -0
  122. superqode/providers/__init__.py +33 -0
  123. superqode/providers/gateway/__init__.py +165 -0
  124. superqode/providers/gateway/base.py +228 -0
  125. superqode/providers/gateway/litellm_gateway.py +1170 -0
  126. superqode/providers/gateway/openresponses_gateway.py +436 -0
  127. superqode/providers/health.py +297 -0
  128. superqode/providers/huggingface/__init__.py +74 -0
  129. superqode/providers/huggingface/downloader.py +472 -0
  130. superqode/providers/huggingface/endpoints.py +442 -0
  131. superqode/providers/huggingface/hub.py +531 -0
  132. superqode/providers/huggingface/inference.py +394 -0
  133. superqode/providers/huggingface/transformers_runner.py +516 -0
  134. superqode/providers/local/__init__.py +100 -0
  135. superqode/providers/local/base.py +438 -0
  136. superqode/providers/local/discovery.py +418 -0
  137. superqode/providers/local/lmstudio.py +256 -0
  138. superqode/providers/local/mlx.py +457 -0
  139. superqode/providers/local/ollama.py +486 -0
  140. superqode/providers/local/sglang.py +268 -0
  141. superqode/providers/local/tgi.py +260 -0
  142. superqode/providers/local/tool_support.py +477 -0
  143. superqode/providers/local/vllm.py +258 -0
  144. superqode/providers/manager.py +1338 -0
  145. superqode/providers/models.py +1016 -0
  146. superqode/providers/models_dev.py +578 -0
  147. superqode/providers/openresponses/__init__.py +87 -0
  148. superqode/providers/openresponses/converters/__init__.py +17 -0
  149. superqode/providers/openresponses/converters/messages.py +343 -0
  150. superqode/providers/openresponses/converters/tools.py +268 -0
  151. superqode/providers/openresponses/schema/__init__.py +56 -0
  152. superqode/providers/openresponses/schema/models.py +585 -0
  153. superqode/providers/openresponses/streaming/__init__.py +5 -0
  154. superqode/providers/openresponses/streaming/parser.py +338 -0
  155. superqode/providers/openresponses/tools/__init__.py +21 -0
  156. superqode/providers/openresponses/tools/apply_patch.py +352 -0
  157. superqode/providers/openresponses/tools/code_interpreter.py +290 -0
  158. superqode/providers/openresponses/tools/file_search.py +333 -0
  159. superqode/providers/openresponses/tools/mcp_adapter.py +252 -0
  160. superqode/providers/registry.py +716 -0
  161. superqode/providers/usage.py +332 -0
  162. superqode/pure_mode.py +384 -0
  163. superqode/qr/__init__.py +23 -0
  164. superqode/qr/dashboard.py +781 -0
  165. superqode/qr/generator.py +1018 -0
  166. superqode/qr/templates.py +135 -0
  167. superqode/safety/__init__.py +41 -0
  168. superqode/safety/sandbox.py +413 -0
  169. superqode/safety/warnings.py +256 -0
  170. superqode/server/__init__.py +33 -0
  171. superqode/server/lsp_server.py +775 -0
  172. superqode/server/web.py +250 -0
  173. superqode/session/__init__.py +25 -0
  174. superqode/session/persistence.py +580 -0
  175. superqode/session/sharing.py +477 -0
  176. superqode/session.py +475 -0
  177. superqode/sidebar.py +2991 -0
  178. superqode/stream_view.py +648 -0
  179. superqode/styles/__init__.py +3 -0
  180. superqode/superqe/__init__.py +184 -0
  181. superqode/superqe/acp_runner.py +1064 -0
  182. superqode/superqe/constitution/__init__.py +62 -0
  183. superqode/superqe/constitution/evaluator.py +308 -0
  184. superqode/superqe/constitution/loader.py +432 -0
  185. superqode/superqe/constitution/schema.py +250 -0
  186. superqode/superqe/events.py +591 -0
  187. superqode/superqe/frameworks/__init__.py +65 -0
  188. superqode/superqe/frameworks/base.py +234 -0
  189. superqode/superqe/frameworks/e2e.py +263 -0
  190. superqode/superqe/frameworks/executor.py +237 -0
  191. superqode/superqe/frameworks/javascript.py +409 -0
  192. superqode/superqe/frameworks/python.py +373 -0
  193. superqode/superqe/frameworks/registry.py +92 -0
  194. superqode/superqe/mcp_tools/__init__.py +47 -0
  195. superqode/superqe/mcp_tools/core_tools.py +418 -0
  196. superqode/superqe/mcp_tools/registry.py +230 -0
  197. superqode/superqe/mcp_tools/testing_tools.py +167 -0
  198. superqode/superqe/noise.py +89 -0
  199. superqode/superqe/orchestrator.py +778 -0
  200. superqode/superqe/roles.py +609 -0
  201. superqode/superqe/session.py +713 -0
  202. superqode/superqe/skills/__init__.py +57 -0
  203. superqode/superqe/skills/base.py +106 -0
  204. superqode/superqe/skills/core_skills.py +899 -0
  205. superqode/superqe/skills/registry.py +90 -0
  206. superqode/superqe/verifier.py +101 -0
  207. superqode/superqe_cli.py +76 -0
  208. superqode/tool_call.py +358 -0
  209. superqode/tools/__init__.py +93 -0
  210. superqode/tools/agent_tools.py +496 -0
  211. superqode/tools/base.py +324 -0
  212. superqode/tools/batch_tool.py +133 -0
  213. superqode/tools/diagnostics.py +311 -0
  214. superqode/tools/edit_tools.py +653 -0
  215. superqode/tools/enhanced_base.py +515 -0
  216. superqode/tools/file_tools.py +269 -0
  217. superqode/tools/file_tracking.py +45 -0
  218. superqode/tools/lsp_tools.py +610 -0
  219. superqode/tools/network_tools.py +350 -0
  220. superqode/tools/permissions.py +400 -0
  221. superqode/tools/question_tool.py +324 -0
  222. superqode/tools/search_tools.py +598 -0
  223. superqode/tools/shell_tools.py +259 -0
  224. superqode/tools/todo_tools.py +121 -0
  225. superqode/tools/validation.py +80 -0
  226. superqode/tools/web_tools.py +639 -0
  227. superqode/tui.py +1152 -0
  228. superqode/tui_integration.py +875 -0
  229. superqode/tui_widgets/__init__.py +27 -0
  230. superqode/tui_widgets/widgets/__init__.py +18 -0
  231. superqode/tui_widgets/widgets/progress.py +185 -0
  232. superqode/tui_widgets/widgets/tool_display.py +188 -0
  233. superqode/undo_manager.py +574 -0
  234. superqode/utils/__init__.py +5 -0
  235. superqode/utils/error_handling.py +323 -0
  236. superqode/utils/fuzzy.py +257 -0
  237. superqode/widgets/__init__.py +477 -0
  238. superqode/widgets/agent_collab.py +390 -0
  239. superqode/widgets/agent_store.py +936 -0
  240. superqode/widgets/agent_switcher.py +395 -0
  241. superqode/widgets/animation_manager.py +284 -0
  242. superqode/widgets/code_context.py +356 -0
  243. superqode/widgets/command_palette.py +412 -0
  244. superqode/widgets/connection_status.py +537 -0
  245. superqode/widgets/conversation_history.py +470 -0
  246. superqode/widgets/diff_indicator.py +155 -0
  247. superqode/widgets/enhanced_status_bar.py +385 -0
  248. superqode/widgets/enhanced_toast.py +476 -0
  249. superqode/widgets/file_browser.py +809 -0
  250. superqode/widgets/file_reference.py +585 -0
  251. superqode/widgets/issue_timeline.py +340 -0
  252. superqode/widgets/leader_key.py +264 -0
  253. superqode/widgets/mode_switcher.py +445 -0
  254. superqode/widgets/model_picker.py +234 -0
  255. superqode/widgets/permission_preview.py +1205 -0
  256. superqode/widgets/prompt.py +358 -0
  257. superqode/widgets/provider_connect.py +725 -0
  258. superqode/widgets/pty_shell.py +587 -0
  259. superqode/widgets/qe_dashboard.py +321 -0
  260. superqode/widgets/resizable_sidebar.py +377 -0
  261. superqode/widgets/response_changes.py +218 -0
  262. superqode/widgets/response_display.py +528 -0
  263. superqode/widgets/rich_tool_display.py +613 -0
  264. superqode/widgets/sidebar_panels.py +1180 -0
  265. superqode/widgets/slash_complete.py +356 -0
  266. superqode/widgets/split_view.py +612 -0
  267. superqode/widgets/status_bar.py +273 -0
  268. superqode/widgets/superqode_display.py +786 -0
  269. superqode/widgets/thinking_display.py +815 -0
  270. superqode/widgets/throbber.py +87 -0
  271. superqode/widgets/toast.py +206 -0
  272. superqode/widgets/unified_output.py +1073 -0
  273. superqode/workspace/__init__.py +75 -0
  274. superqode/workspace/artifacts.py +472 -0
  275. superqode/workspace/coordinator.py +353 -0
  276. superqode/workspace/diff_tracker.py +429 -0
  277. superqode/workspace/git_guard.py +373 -0
  278. superqode/workspace/git_snapshot.py +526 -0
  279. superqode/workspace/manager.py +750 -0
  280. superqode/workspace/snapshot.py +357 -0
  281. superqode/workspace/watcher.py +535 -0
  282. superqode/workspace/worktree.py +440 -0
  283. superqode-0.1.5.dist-info/METADATA +204 -0
  284. superqode-0.1.5.dist-info/RECORD +288 -0
  285. superqode-0.1.5.dist-info/WHEEL +5 -0
  286. superqode-0.1.5.dist-info/entry_points.txt +3 -0
  287. superqode-0.1.5.dist-info/licenses/LICENSE +648 -0
  288. superqode-0.1.5.dist-info/top_level.txt +1 -0
@@ -0,0 +1,585 @@
1
+ """
2
+ Open Responses Schema Models.
3
+
4
+ Core Pydantic models for the Open Responses specification.
5
+ Based on the OpenAPI spec at: public/openapi/openapi.json
6
+
7
+ These models cover the essential types needed for:
8
+ - Request/Response handling
9
+ - Message/Item conversion
10
+ - Tool definitions
11
+ - Streaming events
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from dataclasses import dataclass, field
17
+ from enum import Enum
18
+ from typing import Any, Dict, List, Literal, Optional, Union
19
+
20
+
21
+ # =============================================================================
22
+ # Enums
23
+ # =============================================================================
24
+
25
+
26
+ class ResponseStatus(str, Enum):
27
+ """Status of a response."""
28
+
29
+ QUEUED = "queued"
30
+ IN_PROGRESS = "in_progress"
31
+ COMPLETED = "completed"
32
+ INCOMPLETE = "incomplete"
33
+ FAILED = "failed"
34
+ CANCELLED = "cancelled"
35
+
36
+
37
+ class ItemType(str, Enum):
38
+ """Type of an input/output item."""
39
+
40
+ MESSAGE = "message"
41
+ FUNCTION_CALL = "function_call"
42
+ FUNCTION_CALL_OUTPUT = "function_call_output"
43
+ REASONING = "reasoning"
44
+
45
+
46
+ class ContentType(str, Enum):
47
+ """Type of content in a message."""
48
+
49
+ TEXT = "text"
50
+ INPUT_TEXT = "input_text"
51
+ OUTPUT_TEXT = "output_text"
52
+ INPUT_IMAGE = "input_image"
53
+ INPUT_FILE = "input_file"
54
+ REFUSAL = "refusal"
55
+
56
+
57
+ class ToolType(str, Enum):
58
+ """Type of tool."""
59
+
60
+ FUNCTION = "function"
61
+ CODE_INTERPRETER = "code_interpreter"
62
+ FILE_SEARCH = "file_search"
63
+ APPLY_PATCH = "apply_patch"
64
+ WEB_SEARCH = "web_search"
65
+ COMPUTER_USE_PREVIEW = "computer_use_preview"
66
+ MCP = "mcp"
67
+
68
+
69
+ class ReasoningEffort(str, Enum):
70
+ """Reasoning effort level."""
71
+
72
+ LOW = "low"
73
+ MEDIUM = "medium"
74
+ HIGH = "high"
75
+
76
+
77
+ class TruncationStrategy(str, Enum):
78
+ """Truncation strategy for context."""
79
+
80
+ AUTO = "auto"
81
+ DISABLED = "disabled"
82
+
83
+
84
+ # =============================================================================
85
+ # Content Types
86
+ # =============================================================================
87
+
88
+
89
+ @dataclass
90
+ class TextContentParam:
91
+ """Text content in a message."""
92
+
93
+ type: Literal["text", "input_text"] = "text"
94
+ text: str = ""
95
+
96
+
97
+ @dataclass
98
+ class ImageContentParam:
99
+ """Image content in a message."""
100
+
101
+ type: Literal["input_image"] = "input_image"
102
+ image_url: str = ""
103
+ detail: Literal["auto", "low", "high"] = "auto"
104
+
105
+
106
+ @dataclass
107
+ class FileContentParam:
108
+ """File content in a message."""
109
+
110
+ type: Literal["input_file"] = "input_file"
111
+ file_id: str = ""
112
+ filename: Optional[str] = None
113
+
114
+
115
+ ContentParam = Union[TextContentParam, ImageContentParam, FileContentParam, str]
116
+
117
+
118
+ # =============================================================================
119
+ # Item Types (Input)
120
+ # =============================================================================
121
+
122
+
123
+ @dataclass
124
+ class UserMessageItemParam:
125
+ """User message input item."""
126
+
127
+ type: Literal["message"] = "message"
128
+ role: Literal["user"] = "user"
129
+ content: Union[str, List[ContentParam]] = ""
130
+
131
+
132
+ @dataclass
133
+ class AssistantMessageItemParam:
134
+ """Assistant message input item."""
135
+
136
+ type: Literal["message"] = "message"
137
+ role: Literal["assistant"] = "assistant"
138
+ content: Union[str, List[ContentParam]] = ""
139
+
140
+
141
+ @dataclass
142
+ class SystemMessageItemParam:
143
+ """System message input item."""
144
+
145
+ type: Literal["message"] = "message"
146
+ role: Literal["system"] = "system"
147
+ content: Union[str, List[ContentParam]] = ""
148
+
149
+
150
+ @dataclass
151
+ class FunctionCallItemParam:
152
+ """Function call input item."""
153
+
154
+ type: Literal["function_call"] = "function_call"
155
+ call_id: str = ""
156
+ name: str = ""
157
+ arguments: str = "{}"
158
+
159
+
160
+ @dataclass
161
+ class FunctionCallOutputItemParam:
162
+ """Function call output input item."""
163
+
164
+ type: Literal["function_call_output"] = "function_call_output"
165
+ call_id: str = ""
166
+ output: str = ""
167
+
168
+
169
+ ItemParam = Union[
170
+ UserMessageItemParam,
171
+ AssistantMessageItemParam,
172
+ SystemMessageItemParam,
173
+ FunctionCallItemParam,
174
+ FunctionCallOutputItemParam,
175
+ ]
176
+
177
+
178
+ # =============================================================================
179
+ # Output Item Types
180
+ # =============================================================================
181
+
182
+
183
+ @dataclass
184
+ class TextOutput:
185
+ """Text output content."""
186
+
187
+ type: Literal["output_text"] = "output_text"
188
+ text: str = ""
189
+ annotations: List[Dict[str, Any]] = field(default_factory=list)
190
+
191
+
192
+ @dataclass
193
+ class ReasoningOutput:
194
+ """Reasoning/thinking output content."""
195
+
196
+ type: Literal["reasoning"] = "reasoning"
197
+ text: str = ""
198
+
199
+
200
+ @dataclass
201
+ class RefusalOutput:
202
+ """Refusal output content."""
203
+
204
+ type: Literal["refusal"] = "refusal"
205
+ refusal: str = ""
206
+
207
+
208
+ @dataclass
209
+ class FunctionCallOutput:
210
+ """Function call output item."""
211
+
212
+ type: Literal["function_call"] = "function_call"
213
+ id: str = ""
214
+ call_id: str = ""
215
+ name: str = ""
216
+ arguments: str = "{}"
217
+ status: Literal["in_progress", "completed", "incomplete"] = "completed"
218
+
219
+
220
+ @dataclass
221
+ class MessageOutput:
222
+ """Message output item."""
223
+
224
+ type: Literal["message"] = "message"
225
+ id: str = ""
226
+ role: Literal["assistant"] = "assistant"
227
+ content: List[Union[TextOutput, ReasoningOutput, RefusalOutput]] = field(default_factory=list)
228
+ status: Literal["in_progress", "completed", "incomplete"] = "completed"
229
+
230
+
231
+ OutputItem = Union[MessageOutput, FunctionCallOutput]
232
+
233
+
234
+ # =============================================================================
235
+ # Tool Types
236
+ # =============================================================================
237
+
238
+
239
+ @dataclass
240
+ class FunctionDefinition:
241
+ """Function definition for a tool."""
242
+
243
+ name: str = ""
244
+ description: str = ""
245
+ parameters: Dict[str, Any] = field(default_factory=dict)
246
+ strict: bool = False
247
+
248
+
249
+ @dataclass
250
+ class FunctionToolParam:
251
+ """Function tool definition."""
252
+
253
+ type: Literal["function"] = "function"
254
+ function: FunctionDefinition = field(default_factory=FunctionDefinition)
255
+
256
+
257
+ @dataclass
258
+ class CodeInterpreterToolParam:
259
+ """Code interpreter tool definition."""
260
+
261
+ type: Literal["code_interpreter"] = "code_interpreter"
262
+ container: Optional[str] = None
263
+
264
+
265
+ @dataclass
266
+ class FileSearchToolParam:
267
+ """File search tool definition."""
268
+
269
+ type: Literal["file_search"] = "file_search"
270
+ vector_store_ids: List[str] = field(default_factory=list)
271
+ max_num_results: int = 20
272
+ ranking_options: Optional[Dict[str, Any]] = None
273
+
274
+
275
+ @dataclass
276
+ class ApplyPatchToolParam:
277
+ """Apply patch tool definition."""
278
+
279
+ type: Literal["apply_patch"] = "apply_patch"
280
+
281
+
282
+ @dataclass
283
+ class WebSearchToolParam:
284
+ """Web search tool definition."""
285
+
286
+ type: Literal["web_search"] = "web_search"
287
+ user_location: Optional[Dict[str, Any]] = None
288
+ search_context_size: Literal["low", "medium", "high"] = "medium"
289
+
290
+
291
+ ToolParam = Union[
292
+ FunctionToolParam,
293
+ CodeInterpreterToolParam,
294
+ FileSearchToolParam,
295
+ ApplyPatchToolParam,
296
+ WebSearchToolParam,
297
+ ]
298
+
299
+
300
+ # =============================================================================
301
+ # Tool Choice
302
+ # =============================================================================
303
+
304
+
305
+ @dataclass
306
+ class SpecificFunctionToolChoice:
307
+ """Specific function tool choice."""
308
+
309
+ type: Literal["function"] = "function"
310
+ name: str = ""
311
+
312
+
313
+ ToolChoiceParam = Union[
314
+ Literal["auto", "none", "required"],
315
+ SpecificFunctionToolChoice,
316
+ ]
317
+
318
+
319
+ # =============================================================================
320
+ # Reasoning Configuration
321
+ # =============================================================================
322
+
323
+
324
+ @dataclass
325
+ class ReasoningConfig:
326
+ """Configuration for reasoning/thinking."""
327
+
328
+ effort: ReasoningEffort = ReasoningEffort.MEDIUM
329
+ summary: Optional[Literal["auto", "concise", "detailed"]] = None
330
+
331
+
332
+ # =============================================================================
333
+ # Request/Response
334
+ # =============================================================================
335
+
336
+
337
+ @dataclass
338
+ class ResponseRequest:
339
+ """Request to create a response."""
340
+
341
+ model: str = ""
342
+ input: Union[str, List[ItemParam]] = field(default_factory=list)
343
+ instructions: Optional[str] = None
344
+ tools: List[ToolParam] = field(default_factory=list)
345
+ tool_choice: ToolChoiceParam = "auto"
346
+ temperature: Optional[float] = None
347
+ max_output_tokens: Optional[int] = None
348
+ top_p: Optional[float] = None
349
+ stream: bool = False
350
+ reasoning: Optional[ReasoningConfig] = None
351
+ truncation: TruncationStrategy = TruncationStrategy.AUTO
352
+ metadata: Dict[str, str] = field(default_factory=dict)
353
+ store: bool = False
354
+ parallel_tool_calls: bool = True
355
+
356
+
357
+ @dataclass
358
+ class ResponseUsage:
359
+ """Token usage information."""
360
+
361
+ input_tokens: int = 0
362
+ output_tokens: int = 0
363
+ total_tokens: int = 0
364
+ input_tokens_details: Optional[Dict[str, int]] = None
365
+ output_tokens_details: Optional[Dict[str, int]] = None
366
+
367
+
368
+ @dataclass
369
+ class ResponseError:
370
+ """Error information."""
371
+
372
+ code: str = ""
373
+ message: str = ""
374
+
375
+
376
+ @dataclass
377
+ class IncompleteDetails:
378
+ """Details about why a response is incomplete."""
379
+
380
+ reason: Literal["max_output_tokens", "content_filter"] = "max_output_tokens"
381
+
382
+
383
+ @dataclass
384
+ class Response:
385
+ """Response from the API."""
386
+
387
+ id: str = ""
388
+ object: Literal["response"] = "response"
389
+ created_at: int = 0
390
+ model: str = ""
391
+ status: ResponseStatus = ResponseStatus.COMPLETED
392
+ output: List[OutputItem] = field(default_factory=list)
393
+ usage: Optional[ResponseUsage] = None
394
+ error: Optional[ResponseError] = None
395
+ incomplete_details: Optional[IncompleteDetails] = None
396
+ metadata: Dict[str, str] = field(default_factory=dict)
397
+
398
+
399
+ # =============================================================================
400
+ # Streaming Events
401
+ # =============================================================================
402
+
403
+
404
+ @dataclass
405
+ class ResponseCreatedEvent:
406
+ """Response created streaming event."""
407
+
408
+ type: Literal["response.created"] = "response.created"
409
+ response: Response = field(default_factory=Response)
410
+
411
+
412
+ @dataclass
413
+ class ResponseInProgressEvent:
414
+ """Response in progress streaming event."""
415
+
416
+ type: Literal["response.in_progress"] = "response.in_progress"
417
+ response: Response = field(default_factory=Response)
418
+
419
+
420
+ @dataclass
421
+ class ResponseCompletedEvent:
422
+ """Response completed streaming event."""
423
+
424
+ type: Literal["response.completed"] = "response.completed"
425
+ response: Response = field(default_factory=Response)
426
+
427
+
428
+ @dataclass
429
+ class ResponseFailedEvent:
430
+ """Response failed streaming event."""
431
+
432
+ type: Literal["response.failed"] = "response.failed"
433
+ response: Response = field(default_factory=Response)
434
+
435
+
436
+ @dataclass
437
+ class ResponseIncompleteEvent:
438
+ """Response incomplete streaming event."""
439
+
440
+ type: Literal["response.incomplete"] = "response.incomplete"
441
+ response: Response = field(default_factory=Response)
442
+
443
+
444
+ @dataclass
445
+ class ResponseOutputItemAddedEvent:
446
+ """Output item added streaming event."""
447
+
448
+ type: Literal["response.output_item.added"] = "response.output_item.added"
449
+ output_index: int = 0
450
+ item: OutputItem = field(default_factory=MessageOutput)
451
+
452
+
453
+ @dataclass
454
+ class ResponseOutputItemDoneEvent:
455
+ """Output item done streaming event."""
456
+
457
+ type: Literal["response.output_item.done"] = "response.output_item.done"
458
+ output_index: int = 0
459
+ item: OutputItem = field(default_factory=MessageOutput)
460
+
461
+
462
+ @dataclass
463
+ class ResponseContentPartAddedEvent:
464
+ """Content part added streaming event."""
465
+
466
+ type: Literal["response.content_part.added"] = "response.content_part.added"
467
+ output_index: int = 0
468
+ content_index: int = 0
469
+ part: Union[TextOutput, ReasoningOutput] = field(default_factory=TextOutput)
470
+
471
+
472
+ @dataclass
473
+ class ResponseContentPartDoneEvent:
474
+ """Content part done streaming event."""
475
+
476
+ type: Literal["response.content_part.done"] = "response.content_part.done"
477
+ output_index: int = 0
478
+ content_index: int = 0
479
+ part: Union[TextOutput, ReasoningOutput] = field(default_factory=TextOutput)
480
+
481
+
482
+ @dataclass
483
+ class ResponseOutputTextDeltaEvent:
484
+ """Output text delta streaming event."""
485
+
486
+ type: Literal["response.output_text.delta"] = "response.output_text.delta"
487
+ output_index: int = 0
488
+ content_index: int = 0
489
+ delta: str = ""
490
+
491
+
492
+ @dataclass
493
+ class ResponseOutputTextDoneEvent:
494
+ """Output text done streaming event."""
495
+
496
+ type: Literal["response.output_text.done"] = "response.output_text.done"
497
+ output_index: int = 0
498
+ content_index: int = 0
499
+ text: str = ""
500
+
501
+
502
+ @dataclass
503
+ class ResponseReasoningDeltaEvent:
504
+ """Reasoning delta streaming event."""
505
+
506
+ type: Literal["response.reasoning.delta"] = "response.reasoning.delta"
507
+ output_index: int = 0
508
+ content_index: int = 0
509
+ delta: str = ""
510
+
511
+
512
+ @dataclass
513
+ class ResponseReasoningDoneEvent:
514
+ """Reasoning done streaming event."""
515
+
516
+ type: Literal["response.reasoning.done"] = "response.reasoning.done"
517
+ output_index: int = 0
518
+ content_index: int = 0
519
+ text: str = ""
520
+
521
+
522
+ @dataclass
523
+ class ResponseFunctionCallArgumentsDeltaEvent:
524
+ """Function call arguments delta streaming event."""
525
+
526
+ type: Literal["response.function_call_arguments.delta"] = (
527
+ "response.function_call_arguments.delta"
528
+ )
529
+ output_index: int = 0
530
+ call_id: str = ""
531
+ delta: str = ""
532
+
533
+
534
+ @dataclass
535
+ class ResponseFunctionCallArgumentsDoneEvent:
536
+ """Function call arguments done streaming event."""
537
+
538
+ type: Literal["response.function_call_arguments.done"] = "response.function_call_arguments.done"
539
+ output_index: int = 0
540
+ call_id: str = ""
541
+ name: str = ""
542
+ arguments: str = ""
543
+
544
+
545
+ # Union of all streaming events
546
+ StreamingEvent = Union[
547
+ ResponseCreatedEvent,
548
+ ResponseInProgressEvent,
549
+ ResponseCompletedEvent,
550
+ ResponseFailedEvent,
551
+ ResponseIncompleteEvent,
552
+ ResponseOutputItemAddedEvent,
553
+ ResponseOutputItemDoneEvent,
554
+ ResponseContentPartAddedEvent,
555
+ ResponseContentPartDoneEvent,
556
+ ResponseOutputTextDeltaEvent,
557
+ ResponseOutputTextDoneEvent,
558
+ ResponseReasoningDeltaEvent,
559
+ ResponseReasoningDoneEvent,
560
+ ResponseFunctionCallArgumentsDeltaEvent,
561
+ ResponseFunctionCallArgumentsDoneEvent,
562
+ ]
563
+
564
+
565
+ # =============================================================================
566
+ # Event Type Mapping
567
+ # =============================================================================
568
+
569
+ STREAMING_EVENT_TYPES = {
570
+ "response.created": ResponseCreatedEvent,
571
+ "response.in_progress": ResponseInProgressEvent,
572
+ "response.completed": ResponseCompletedEvent,
573
+ "response.failed": ResponseFailedEvent,
574
+ "response.incomplete": ResponseIncompleteEvent,
575
+ "response.output_item.added": ResponseOutputItemAddedEvent,
576
+ "response.output_item.done": ResponseOutputItemDoneEvent,
577
+ "response.content_part.added": ResponseContentPartAddedEvent,
578
+ "response.content_part.done": ResponseContentPartDoneEvent,
579
+ "response.output_text.delta": ResponseOutputTextDeltaEvent,
580
+ "response.output_text.done": ResponseOutputTextDoneEvent,
581
+ "response.reasoning.delta": ResponseReasoningDeltaEvent,
582
+ "response.reasoning.done": ResponseReasoningDoneEvent,
583
+ "response.function_call_arguments.delta": ResponseFunctionCallArgumentsDeltaEvent,
584
+ "response.function_call_arguments.done": ResponseFunctionCallArgumentsDoneEvent,
585
+ }
@@ -0,0 +1,5 @@
1
+ """Open Responses streaming support."""
2
+
3
+ from .parser import StreamingEventParser, parse_sse_event
4
+
5
+ __all__ = ["StreamingEventParser", "parse_sse_event"]