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.
- superqode/__init__.py +33 -0
- superqode/acp/__init__.py +23 -0
- superqode/acp/client.py +913 -0
- superqode/acp/permission_screen.py +457 -0
- superqode/acp/types.py +480 -0
- superqode/acp_discovery.py +856 -0
- superqode/agent/__init__.py +22 -0
- superqode/agent/edit_strategies.py +334 -0
- superqode/agent/loop.py +892 -0
- superqode/agent/qe_report_templates.py +39 -0
- superqode/agent/system_prompts.py +353 -0
- superqode/agent_output.py +721 -0
- superqode/agent_stream.py +953 -0
- superqode/agents/__init__.py +59 -0
- superqode/agents/acp_registry.py +305 -0
- superqode/agents/client.py +249 -0
- superqode/agents/data/augmentcode.com.toml +51 -0
- superqode/agents/data/cagent.dev.toml +51 -0
- superqode/agents/data/claude.com.toml +60 -0
- superqode/agents/data/codeassistant.dev.toml +51 -0
- superqode/agents/data/codex.openai.com.toml +57 -0
- superqode/agents/data/fastagent.ai.toml +66 -0
- superqode/agents/data/geminicli.com.toml +77 -0
- superqode/agents/data/goose.block.xyz.toml +54 -0
- superqode/agents/data/junie.jetbrains.com.toml +56 -0
- superqode/agents/data/kimi.moonshot.cn.toml +57 -0
- superqode/agents/data/llmlingagent.dev.toml +51 -0
- superqode/agents/data/molt.bot.toml +49 -0
- superqode/agents/data/opencode.ai.toml +60 -0
- superqode/agents/data/stakpak.dev.toml +51 -0
- superqode/agents/data/vtcode.dev.toml +51 -0
- superqode/agents/discovery.py +266 -0
- superqode/agents/messaging.py +160 -0
- superqode/agents/persona.py +166 -0
- superqode/agents/registry.py +421 -0
- superqode/agents/schema.py +72 -0
- superqode/agents/unified.py +367 -0
- superqode/app/__init__.py +111 -0
- superqode/app/constants.py +314 -0
- superqode/app/css.py +366 -0
- superqode/app/models.py +118 -0
- superqode/app/suggester.py +125 -0
- superqode/app/widgets.py +1591 -0
- superqode/app_enhanced.py +399 -0
- superqode/app_main.py +17187 -0
- superqode/approval.py +312 -0
- superqode/atomic.py +296 -0
- superqode/commands/__init__.py +1 -0
- superqode/commands/acp.py +965 -0
- superqode/commands/agents.py +180 -0
- superqode/commands/auth.py +278 -0
- superqode/commands/config.py +374 -0
- superqode/commands/init.py +826 -0
- superqode/commands/providers.py +819 -0
- superqode/commands/qe.py +1145 -0
- superqode/commands/roles.py +380 -0
- superqode/commands/serve.py +172 -0
- superqode/commands/suggestions.py +127 -0
- superqode/commands/superqe.py +460 -0
- superqode/config/__init__.py +51 -0
- superqode/config/loader.py +812 -0
- superqode/config/schema.py +498 -0
- superqode/core/__init__.py +111 -0
- superqode/core/roles.py +281 -0
- superqode/danger.py +386 -0
- superqode/data/superqode-template.yaml +1522 -0
- superqode/design_system.py +1080 -0
- superqode/dialogs/__init__.py +6 -0
- superqode/dialogs/base.py +39 -0
- superqode/dialogs/model.py +130 -0
- superqode/dialogs/provider.py +870 -0
- superqode/diff_view.py +919 -0
- superqode/enterprise.py +21 -0
- superqode/evaluation/__init__.py +25 -0
- superqode/evaluation/adapters.py +93 -0
- superqode/evaluation/behaviors.py +89 -0
- superqode/evaluation/engine.py +209 -0
- superqode/evaluation/scenarios.py +96 -0
- superqode/execution/__init__.py +36 -0
- superqode/execution/linter.py +538 -0
- superqode/execution/modes.py +347 -0
- superqode/execution/resolver.py +283 -0
- superqode/execution/runner.py +642 -0
- superqode/file_explorer.py +811 -0
- superqode/file_viewer.py +471 -0
- superqode/flash.py +183 -0
- superqode/guidance/__init__.py +58 -0
- superqode/guidance/config.py +203 -0
- superqode/guidance/prompts.py +71 -0
- superqode/harness/__init__.py +54 -0
- superqode/harness/accelerator.py +291 -0
- superqode/harness/config.py +319 -0
- superqode/harness/validator.py +147 -0
- superqode/history.py +279 -0
- superqode/integrations/superopt_runner.py +124 -0
- superqode/logging/__init__.py +49 -0
- superqode/logging/adapters.py +219 -0
- superqode/logging/formatter.py +923 -0
- superqode/logging/integration.py +341 -0
- superqode/logging/sinks.py +170 -0
- superqode/logging/unified_log.py +417 -0
- superqode/lsp/__init__.py +26 -0
- superqode/lsp/client.py +544 -0
- superqode/main.py +1069 -0
- superqode/mcp/__init__.py +89 -0
- superqode/mcp/auth_storage.py +380 -0
- superqode/mcp/client.py +1236 -0
- superqode/mcp/config.py +319 -0
- superqode/mcp/integration.py +337 -0
- superqode/mcp/oauth.py +436 -0
- superqode/mcp/oauth_callback.py +385 -0
- superqode/mcp/types.py +290 -0
- superqode/memory/__init__.py +31 -0
- superqode/memory/feedback.py +342 -0
- superqode/memory/store.py +522 -0
- superqode/notifications.py +369 -0
- superqode/optimization/__init__.py +5 -0
- superqode/optimization/config.py +33 -0
- superqode/permissions/__init__.py +25 -0
- superqode/permissions/rules.py +488 -0
- superqode/plan.py +323 -0
- superqode/providers/__init__.py +33 -0
- superqode/providers/gateway/__init__.py +165 -0
- superqode/providers/gateway/base.py +228 -0
- superqode/providers/gateway/litellm_gateway.py +1170 -0
- superqode/providers/gateway/openresponses_gateway.py +436 -0
- superqode/providers/health.py +297 -0
- superqode/providers/huggingface/__init__.py +74 -0
- superqode/providers/huggingface/downloader.py +472 -0
- superqode/providers/huggingface/endpoints.py +442 -0
- superqode/providers/huggingface/hub.py +531 -0
- superqode/providers/huggingface/inference.py +394 -0
- superqode/providers/huggingface/transformers_runner.py +516 -0
- superqode/providers/local/__init__.py +100 -0
- superqode/providers/local/base.py +438 -0
- superqode/providers/local/discovery.py +418 -0
- superqode/providers/local/lmstudio.py +256 -0
- superqode/providers/local/mlx.py +457 -0
- superqode/providers/local/ollama.py +486 -0
- superqode/providers/local/sglang.py +268 -0
- superqode/providers/local/tgi.py +260 -0
- superqode/providers/local/tool_support.py +477 -0
- superqode/providers/local/vllm.py +258 -0
- superqode/providers/manager.py +1338 -0
- superqode/providers/models.py +1016 -0
- superqode/providers/models_dev.py +578 -0
- superqode/providers/openresponses/__init__.py +87 -0
- superqode/providers/openresponses/converters/__init__.py +17 -0
- superqode/providers/openresponses/converters/messages.py +343 -0
- superqode/providers/openresponses/converters/tools.py +268 -0
- superqode/providers/openresponses/schema/__init__.py +56 -0
- superqode/providers/openresponses/schema/models.py +585 -0
- superqode/providers/openresponses/streaming/__init__.py +5 -0
- superqode/providers/openresponses/streaming/parser.py +338 -0
- superqode/providers/openresponses/tools/__init__.py +21 -0
- superqode/providers/openresponses/tools/apply_patch.py +352 -0
- superqode/providers/openresponses/tools/code_interpreter.py +290 -0
- superqode/providers/openresponses/tools/file_search.py +333 -0
- superqode/providers/openresponses/tools/mcp_adapter.py +252 -0
- superqode/providers/registry.py +716 -0
- superqode/providers/usage.py +332 -0
- superqode/pure_mode.py +384 -0
- superqode/qr/__init__.py +23 -0
- superqode/qr/dashboard.py +781 -0
- superqode/qr/generator.py +1018 -0
- superqode/qr/templates.py +135 -0
- superqode/safety/__init__.py +41 -0
- superqode/safety/sandbox.py +413 -0
- superqode/safety/warnings.py +256 -0
- superqode/server/__init__.py +33 -0
- superqode/server/lsp_server.py +775 -0
- superqode/server/web.py +250 -0
- superqode/session/__init__.py +25 -0
- superqode/session/persistence.py +580 -0
- superqode/session/sharing.py +477 -0
- superqode/session.py +475 -0
- superqode/sidebar.py +2991 -0
- superqode/stream_view.py +648 -0
- superqode/styles/__init__.py +3 -0
- superqode/superqe/__init__.py +184 -0
- superqode/superqe/acp_runner.py +1064 -0
- superqode/superqe/constitution/__init__.py +62 -0
- superqode/superqe/constitution/evaluator.py +308 -0
- superqode/superqe/constitution/loader.py +432 -0
- superqode/superqe/constitution/schema.py +250 -0
- superqode/superqe/events.py +591 -0
- superqode/superqe/frameworks/__init__.py +65 -0
- superqode/superqe/frameworks/base.py +234 -0
- superqode/superqe/frameworks/e2e.py +263 -0
- superqode/superqe/frameworks/executor.py +237 -0
- superqode/superqe/frameworks/javascript.py +409 -0
- superqode/superqe/frameworks/python.py +373 -0
- superqode/superqe/frameworks/registry.py +92 -0
- superqode/superqe/mcp_tools/__init__.py +47 -0
- superqode/superqe/mcp_tools/core_tools.py +418 -0
- superqode/superqe/mcp_tools/registry.py +230 -0
- superqode/superqe/mcp_tools/testing_tools.py +167 -0
- superqode/superqe/noise.py +89 -0
- superqode/superqe/orchestrator.py +778 -0
- superqode/superqe/roles.py +609 -0
- superqode/superqe/session.py +713 -0
- superqode/superqe/skills/__init__.py +57 -0
- superqode/superqe/skills/base.py +106 -0
- superqode/superqe/skills/core_skills.py +899 -0
- superqode/superqe/skills/registry.py +90 -0
- superqode/superqe/verifier.py +101 -0
- superqode/superqe_cli.py +76 -0
- superqode/tool_call.py +358 -0
- superqode/tools/__init__.py +93 -0
- superqode/tools/agent_tools.py +496 -0
- superqode/tools/base.py +324 -0
- superqode/tools/batch_tool.py +133 -0
- superqode/tools/diagnostics.py +311 -0
- superqode/tools/edit_tools.py +653 -0
- superqode/tools/enhanced_base.py +515 -0
- superqode/tools/file_tools.py +269 -0
- superqode/tools/file_tracking.py +45 -0
- superqode/tools/lsp_tools.py +610 -0
- superqode/tools/network_tools.py +350 -0
- superqode/tools/permissions.py +400 -0
- superqode/tools/question_tool.py +324 -0
- superqode/tools/search_tools.py +598 -0
- superqode/tools/shell_tools.py +259 -0
- superqode/tools/todo_tools.py +121 -0
- superqode/tools/validation.py +80 -0
- superqode/tools/web_tools.py +639 -0
- superqode/tui.py +1152 -0
- superqode/tui_integration.py +875 -0
- superqode/tui_widgets/__init__.py +27 -0
- superqode/tui_widgets/widgets/__init__.py +18 -0
- superqode/tui_widgets/widgets/progress.py +185 -0
- superqode/tui_widgets/widgets/tool_display.py +188 -0
- superqode/undo_manager.py +574 -0
- superqode/utils/__init__.py +5 -0
- superqode/utils/error_handling.py +323 -0
- superqode/utils/fuzzy.py +257 -0
- superqode/widgets/__init__.py +477 -0
- superqode/widgets/agent_collab.py +390 -0
- superqode/widgets/agent_store.py +936 -0
- superqode/widgets/agent_switcher.py +395 -0
- superqode/widgets/animation_manager.py +284 -0
- superqode/widgets/code_context.py +356 -0
- superqode/widgets/command_palette.py +412 -0
- superqode/widgets/connection_status.py +537 -0
- superqode/widgets/conversation_history.py +470 -0
- superqode/widgets/diff_indicator.py +155 -0
- superqode/widgets/enhanced_status_bar.py +385 -0
- superqode/widgets/enhanced_toast.py +476 -0
- superqode/widgets/file_browser.py +809 -0
- superqode/widgets/file_reference.py +585 -0
- superqode/widgets/issue_timeline.py +340 -0
- superqode/widgets/leader_key.py +264 -0
- superqode/widgets/mode_switcher.py +445 -0
- superqode/widgets/model_picker.py +234 -0
- superqode/widgets/permission_preview.py +1205 -0
- superqode/widgets/prompt.py +358 -0
- superqode/widgets/provider_connect.py +725 -0
- superqode/widgets/pty_shell.py +587 -0
- superqode/widgets/qe_dashboard.py +321 -0
- superqode/widgets/resizable_sidebar.py +377 -0
- superqode/widgets/response_changes.py +218 -0
- superqode/widgets/response_display.py +528 -0
- superqode/widgets/rich_tool_display.py +613 -0
- superqode/widgets/sidebar_panels.py +1180 -0
- superqode/widgets/slash_complete.py +356 -0
- superqode/widgets/split_view.py +612 -0
- superqode/widgets/status_bar.py +273 -0
- superqode/widgets/superqode_display.py +786 -0
- superqode/widgets/thinking_display.py +815 -0
- superqode/widgets/throbber.py +87 -0
- superqode/widgets/toast.py +206 -0
- superqode/widgets/unified_output.py +1073 -0
- superqode/workspace/__init__.py +75 -0
- superqode/workspace/artifacts.py +472 -0
- superqode/workspace/coordinator.py +353 -0
- superqode/workspace/diff_tracker.py +429 -0
- superqode/workspace/git_guard.py +373 -0
- superqode/workspace/git_snapshot.py +526 -0
- superqode/workspace/manager.py +750 -0
- superqode/workspace/snapshot.py +357 -0
- superqode/workspace/watcher.py +535 -0
- superqode/workspace/worktree.py +440 -0
- superqode-0.1.5.dist-info/METADATA +204 -0
- superqode-0.1.5.dist-info/RECORD +288 -0
- superqode-0.1.5.dist-info/WHEEL +5 -0
- superqode-0.1.5.dist-info/entry_points.txt +3 -0
- superqode-0.1.5.dist-info/licenses/LICENSE +648 -0
- 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
|
+
}
|