qtype 0.0.12__py3-none-any.whl → 0.1.7__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.
- qtype/application/commons/tools.py +1 -1
- qtype/application/converters/tools_from_api.py +476 -11
- qtype/application/converters/tools_from_module.py +38 -14
- qtype/application/converters/types.py +15 -30
- qtype/application/documentation.py +1 -1
- qtype/application/facade.py +102 -85
- qtype/base/types.py +227 -7
- qtype/cli.py +5 -1
- qtype/commands/convert.py +52 -6
- qtype/commands/generate.py +44 -4
- qtype/commands/run.py +78 -36
- qtype/commands/serve.py +74 -44
- qtype/commands/validate.py +37 -14
- qtype/commands/visualize.py +46 -25
- qtype/dsl/__init__.py +6 -5
- qtype/dsl/custom_types.py +1 -1
- qtype/dsl/domain_types.py +86 -5
- qtype/dsl/linker.py +384 -0
- qtype/dsl/loader.py +315 -0
- qtype/dsl/model.py +753 -264
- qtype/dsl/parser.py +200 -0
- qtype/dsl/types.py +50 -0
- qtype/interpreter/api.py +63 -136
- qtype/interpreter/auth/aws.py +19 -9
- qtype/interpreter/auth/generic.py +93 -16
- qtype/interpreter/base/base_step_executor.py +436 -0
- qtype/interpreter/base/batch_step_executor.py +171 -0
- qtype/interpreter/base/exceptions.py +50 -0
- qtype/interpreter/base/executor_context.py +91 -0
- qtype/interpreter/base/factory.py +84 -0
- qtype/interpreter/base/progress_tracker.py +110 -0
- qtype/interpreter/base/secrets.py +339 -0
- qtype/interpreter/base/step_cache.py +74 -0
- qtype/interpreter/base/stream_emitter.py +469 -0
- qtype/interpreter/conversions.py +495 -24
- qtype/interpreter/converters.py +79 -0
- qtype/interpreter/endpoints.py +355 -0
- qtype/interpreter/executors/agent_executor.py +242 -0
- qtype/interpreter/executors/aggregate_executor.py +93 -0
- qtype/interpreter/executors/bedrock_reranker_executor.py +195 -0
- qtype/interpreter/executors/decoder_executor.py +163 -0
- qtype/interpreter/executors/doc_to_text_executor.py +112 -0
- qtype/interpreter/executors/document_embedder_executor.py +123 -0
- qtype/interpreter/executors/document_search_executor.py +113 -0
- qtype/interpreter/executors/document_source_executor.py +118 -0
- qtype/interpreter/executors/document_splitter_executor.py +105 -0
- qtype/interpreter/executors/echo_executor.py +63 -0
- qtype/interpreter/executors/field_extractor_executor.py +165 -0
- qtype/interpreter/executors/file_source_executor.py +101 -0
- qtype/interpreter/executors/file_writer_executor.py +110 -0
- qtype/interpreter/executors/index_upsert_executor.py +232 -0
- qtype/interpreter/executors/invoke_embedding_executor.py +104 -0
- qtype/interpreter/executors/invoke_flow_executor.py +51 -0
- qtype/interpreter/executors/invoke_tool_executor.py +358 -0
- qtype/interpreter/executors/llm_inference_executor.py +272 -0
- qtype/interpreter/executors/prompt_template_executor.py +78 -0
- qtype/interpreter/executors/sql_source_executor.py +106 -0
- qtype/interpreter/executors/vector_search_executor.py +91 -0
- qtype/interpreter/flow.py +172 -22
- qtype/interpreter/logging_progress.py +61 -0
- qtype/interpreter/metadata_api.py +115 -0
- qtype/interpreter/resource_cache.py +5 -4
- qtype/interpreter/rich_progress.py +225 -0
- qtype/interpreter/stream/chat/__init__.py +15 -0
- qtype/interpreter/stream/chat/converter.py +391 -0
- qtype/interpreter/{chat → stream/chat}/file_conversions.py +2 -2
- qtype/interpreter/stream/chat/ui_request_to_domain_type.py +140 -0
- qtype/interpreter/stream/chat/vercel.py +609 -0
- qtype/interpreter/stream/utils/__init__.py +15 -0
- qtype/interpreter/stream/utils/build_vercel_ai_formatter.py +74 -0
- qtype/interpreter/stream/utils/callback_to_stream.py +66 -0
- qtype/interpreter/stream/utils/create_streaming_response.py +18 -0
- qtype/interpreter/stream/utils/default_chat_extract_text.py +20 -0
- qtype/interpreter/stream/utils/error_streaming_response.py +20 -0
- qtype/interpreter/telemetry.py +135 -8
- qtype/interpreter/tools/__init__.py +5 -0
- qtype/interpreter/tools/function_tool_helper.py +265 -0
- qtype/interpreter/types.py +330 -0
- qtype/interpreter/typing.py +83 -89
- qtype/interpreter/ui/404/index.html +1 -1
- qtype/interpreter/ui/404.html +1 -1
- qtype/interpreter/ui/_next/static/{OT8QJQW3J70VbDWWfrEMT → 20HoJN6otZ_LyHLHpCPE6}/_buildManifest.js +1 -1
- qtype/interpreter/ui/_next/static/chunks/434-b2112d19f25c44ff.js +36 -0
- qtype/interpreter/ui/_next/static/chunks/{964-ed4ab073db645007.js → 964-2b041321a01cbf56.js} +1 -1
- qtype/interpreter/ui/_next/static/chunks/app/{layout-5ccbc44fd528d089.js → layout-a05273ead5de2c41.js} +1 -1
- qtype/interpreter/ui/_next/static/chunks/app/page-8c67d16ac90d23cb.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/ba12c10f-546f2714ff8abc66.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/{main-6d261b6c5d6fb6c2.js → main-e26b9cb206da2cac.js} +1 -1
- qtype/interpreter/ui/_next/static/chunks/webpack-08642e441b39b6c2.js +1 -0
- qtype/interpreter/ui/_next/static/css/8a8d1269e362fef7.css +3 -0
- qtype/interpreter/ui/_next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
- qtype/interpreter/ui/icon.png +0 -0
- qtype/interpreter/ui/index.html +1 -1
- qtype/interpreter/ui/index.txt +5 -5
- qtype/semantic/checker.py +643 -0
- qtype/semantic/generate.py +268 -85
- qtype/semantic/loader.py +95 -0
- qtype/semantic/model.py +535 -163
- qtype/semantic/resolver.py +63 -19
- qtype/semantic/visualize.py +50 -35
- {qtype-0.0.12.dist-info → qtype-0.1.7.dist-info}/METADATA +22 -5
- qtype-0.1.7.dist-info/RECORD +137 -0
- qtype/dsl/base_types.py +0 -38
- qtype/dsl/validator.py +0 -464
- qtype/interpreter/batch/__init__.py +0 -0
- qtype/interpreter/batch/flow.py +0 -95
- qtype/interpreter/batch/sql_source.py +0 -95
- qtype/interpreter/batch/step.py +0 -63
- qtype/interpreter/batch/types.py +0 -41
- qtype/interpreter/batch/utils.py +0 -179
- qtype/interpreter/chat/chat_api.py +0 -237
- qtype/interpreter/chat/vercel.py +0 -314
- qtype/interpreter/exceptions.py +0 -10
- qtype/interpreter/step.py +0 -67
- qtype/interpreter/steps/__init__.py +0 -0
- qtype/interpreter/steps/agent.py +0 -114
- qtype/interpreter/steps/condition.py +0 -36
- qtype/interpreter/steps/decoder.py +0 -88
- qtype/interpreter/steps/llm_inference.py +0 -150
- qtype/interpreter/steps/prompt_template.py +0 -54
- qtype/interpreter/steps/search.py +0 -24
- qtype/interpreter/steps/tool.py +0 -53
- qtype/interpreter/streaming_helpers.py +0 -123
- qtype/interpreter/ui/_next/static/chunks/736-7fc606e244fedcb1.js +0 -36
- qtype/interpreter/ui/_next/static/chunks/app/page-c72e847e888e549d.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/ba12c10f-22556063851a6df2.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/webpack-8289c17c67827f22.js +0 -1
- qtype/interpreter/ui/_next/static/css/a262c53826df929b.css +0 -3
- qtype/interpreter/ui/_next/static/media/569ce4b8f30dc480-s.p.woff2 +0 -0
- qtype/interpreter/ui/favicon.ico +0 -0
- qtype/loader.py +0 -389
- qtype-0.0.12.dist-info/RECORD +0 -105
- /qtype/interpreter/ui/_next/static/{OT8QJQW3J70VbDWWfrEMT → 20HoJN6otZ_LyHLHpCPE6}/_ssgManifest.js +0 -0
- {qtype-0.0.12.dist-info → qtype-0.1.7.dist-info}/WHEEL +0 -0
- {qtype-0.0.12.dist-info → qtype-0.1.7.dist-info}/entry_points.txt +0 -0
- {qtype-0.0.12.dist-info → qtype-0.1.7.dist-info}/licenses/LICENSE +0 -0
- {qtype-0.0.12.dist-info → qtype-0.1.7.dist-info}/top_level.txt +0 -0
qtype/semantic/resolver.py
CHANGED
|
@@ -9,26 +9,58 @@ are resolved to actual object references.
|
|
|
9
9
|
import logging
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
12
|
-
import
|
|
12
|
+
from pydantic import BaseModel
|
|
13
|
+
|
|
14
|
+
import qtype.base.types as base_types
|
|
13
15
|
import qtype.dsl.model as dsl
|
|
14
16
|
import qtype.semantic.model as ir
|
|
15
17
|
from qtype.base.exceptions import SemanticError
|
|
16
|
-
from qtype.dsl.validator import _is_dsl_type, _resolve_forward_ref
|
|
17
18
|
|
|
18
19
|
logger = logging.getLogger(__name__)
|
|
19
20
|
|
|
20
21
|
FIELDS_TO_IGNORE = {"Application.references"}
|
|
21
22
|
|
|
22
23
|
|
|
24
|
+
def _is_dsl_type(type_obj: Any) -> bool:
|
|
25
|
+
"""Check if a type is a DSL type that should be converted to semantic."""
|
|
26
|
+
if not hasattr(type_obj, "__name__"):
|
|
27
|
+
return False
|
|
28
|
+
|
|
29
|
+
# Check if it's defined in the DSL module
|
|
30
|
+
return (
|
|
31
|
+
hasattr(type_obj, "__module__")
|
|
32
|
+
and (
|
|
33
|
+
type_obj.__module__ == dsl.__name__
|
|
34
|
+
or type_obj.__module__ == base_types.__name__
|
|
35
|
+
)
|
|
36
|
+
and not type_obj.__name__.startswith("_")
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _resolve_forward_ref(field_type: Any) -> Any:
|
|
41
|
+
"""
|
|
42
|
+
Resolve a ForwardRef type to its actual type.
|
|
43
|
+
This is used to handle cases where the type is a string that refers to a class.
|
|
44
|
+
"""
|
|
45
|
+
if hasattr(field_type, "__forward_arg__"):
|
|
46
|
+
# Extract the string from ForwardRef and process it
|
|
47
|
+
forward_ref_str = field_type.__forward_arg__
|
|
48
|
+
# Use eval to get the actual type from the string
|
|
49
|
+
return eval(forward_ref_str, dict(vars(dsl)))
|
|
50
|
+
return field_type
|
|
51
|
+
|
|
52
|
+
|
|
23
53
|
def to_semantic_ir(
|
|
24
|
-
dslobj:
|
|
54
|
+
dslobj: BaseModel,
|
|
25
55
|
symbol_table: dict[str, Any],
|
|
26
56
|
) -> Any:
|
|
27
57
|
"""
|
|
28
|
-
Convert a DSL
|
|
58
|
+
Convert a DSL object to its semantic intermediate representation (IR).
|
|
59
|
+
|
|
60
|
+
Handles both regular BaseModel types and RootModel types (like *List documents).
|
|
29
61
|
|
|
30
62
|
Args:
|
|
31
|
-
|
|
63
|
+
dslobj: The DSL object to convert (StrictBaseModel or RootModel).
|
|
32
64
|
|
|
33
65
|
Returns:
|
|
34
66
|
ir.Application: The semantic IR representation of the DSL object.
|
|
@@ -43,8 +75,10 @@ def to_semantic_ir(
|
|
|
43
75
|
# If the object is a list, we will resolve each item in the list.
|
|
44
76
|
return [to_semantic_ir(item, symbol_table) for item in dslobj] # type: ignore
|
|
45
77
|
|
|
46
|
-
|
|
47
|
-
|
|
78
|
+
# Return these types as-is as they are not changed
|
|
79
|
+
if isinstance(dslobj, dsl.Enum) or isinstance(
|
|
80
|
+
dslobj, base_types.CacheConfig
|
|
81
|
+
):
|
|
48
82
|
return dslobj
|
|
49
83
|
|
|
50
84
|
if _is_dsl_type(_resolve_forward_ref(type(dslobj))):
|
|
@@ -66,32 +100,42 @@ def to_semantic_ir(
|
|
|
66
100
|
result = ir_class(**params)
|
|
67
101
|
symbol_table[obj_id] = result # type: ignore
|
|
68
102
|
return result
|
|
69
|
-
elif isinstance(dslobj, list):
|
|
70
|
-
return [to_semantic_ir(item, symbol_table) for item in dslobj] # type: ignore
|
|
71
103
|
else:
|
|
72
104
|
return dslobj
|
|
73
105
|
|
|
74
106
|
|
|
75
|
-
def resolve(
|
|
107
|
+
def resolve(document: dsl.DocumentType) -> ir.DocumentType:
|
|
76
108
|
"""
|
|
77
|
-
Resolve a DSL
|
|
109
|
+
Resolve a DSL Document into its semantic intermediate representation.
|
|
78
110
|
|
|
79
|
-
This function transforms
|
|
80
|
-
resolving all ID references to actual object references.
|
|
111
|
+
This function transforms any DSL DocumentType (Application, ModelList, etc.)
|
|
112
|
+
into its IR equivalent, resolving all ID references to actual object references.
|
|
81
113
|
|
|
82
114
|
Args:
|
|
83
|
-
|
|
115
|
+
document: The DSL Document to transform (Application or any *List type)
|
|
84
116
|
|
|
85
117
|
Returns:
|
|
86
|
-
|
|
118
|
+
ir.DocumentType: The resolved IR document
|
|
87
119
|
"""
|
|
88
|
-
#
|
|
120
|
+
# Build up the semantic representation.
|
|
89
121
|
# This will create a map of all objects by their ID, ensuring that we can resolve
|
|
90
122
|
# references to actual objects.
|
|
91
|
-
result = to_semantic_ir(
|
|
92
|
-
|
|
123
|
+
result = to_semantic_ir(document, {})
|
|
124
|
+
|
|
125
|
+
# Verify the result is one of the valid DocumentType variants
|
|
126
|
+
if not isinstance(
|
|
127
|
+
result,
|
|
128
|
+
(
|
|
129
|
+
ir.Application,
|
|
130
|
+
ir.AuthorizationProviderList,
|
|
131
|
+
ir.ModelList,
|
|
132
|
+
ir.ToolList,
|
|
133
|
+
ir.TypeList,
|
|
134
|
+
ir.VariableList,
|
|
135
|
+
),
|
|
136
|
+
):
|
|
93
137
|
raise SemanticError(
|
|
94
|
-
"The root object must be
|
|
138
|
+
f"The root object must be a valid DocumentType, but got: "
|
|
95
139
|
f"{type(result).__name__}"
|
|
96
140
|
)
|
|
97
141
|
return result
|
qtype/semantic/visualize.py
CHANGED
|
@@ -17,7 +17,6 @@ from qtype.semantic.model import (
|
|
|
17
17
|
APITool,
|
|
18
18
|
Application,
|
|
19
19
|
AuthorizationProvider,
|
|
20
|
-
Condition,
|
|
21
20
|
Decoder,
|
|
22
21
|
DocumentIndex,
|
|
23
22
|
DocumentSearch,
|
|
@@ -118,19 +117,31 @@ def _generate_flow_subgraph(
|
|
|
118
117
|
flow: Flow, flow_id: str
|
|
119
118
|
) -> tuple[list[str], list[str]]:
|
|
120
119
|
"""Generate a flow subgraph with internal nodes and return external connections."""
|
|
121
|
-
mode_indicator = "💬" if flow.mode == "Chat" else "🔄"
|
|
122
120
|
# Add more spacing and line breaks for better SVG rendering
|
|
123
121
|
description = f"\n{flow.description}" if flow.description else ""
|
|
124
122
|
|
|
123
|
+
# Choose direction based on flow characteristics:
|
|
124
|
+
# - Flows with interface (e.g., Conversational) use LR (left-right)
|
|
125
|
+
# - Linear pipelines without interface use TB (top-bottom)
|
|
126
|
+
direction = "LR" if flow.interface else "TB"
|
|
127
|
+
|
|
125
128
|
lines = [
|
|
126
|
-
f' subgraph {flow_id} ["
|
|
127
|
-
" direction
|
|
129
|
+
f' subgraph {flow_id} ["🔄 Flow: {flow.id}{description}"]',
|
|
130
|
+
f" direction {direction}",
|
|
128
131
|
]
|
|
129
132
|
|
|
130
133
|
# Generate nodes for each step
|
|
131
134
|
step_nodes = []
|
|
132
135
|
external_connections = []
|
|
133
136
|
|
|
137
|
+
# Add start node if flow has inputs
|
|
138
|
+
start_node_id = None
|
|
139
|
+
if flow.inputs:
|
|
140
|
+
start_node_id = f"{flow_id}_START"
|
|
141
|
+
lines.append(
|
|
142
|
+
f' {start_node_id}@{{shape: circle, label: "▶️ Start"}}'
|
|
143
|
+
)
|
|
144
|
+
|
|
134
145
|
for i, step in enumerate(flow.steps):
|
|
135
146
|
node_id = f"{flow_id}_S{i}"
|
|
136
147
|
node_def, ext_conn = _generate_step_node(step, node_id, flow_id)
|
|
@@ -139,7 +150,9 @@ def _generate_flow_subgraph(
|
|
|
139
150
|
external_connections.extend(ext_conn)
|
|
140
151
|
|
|
141
152
|
# Connect steps based on input/output variables
|
|
142
|
-
step_connections = _generate_step_connections(
|
|
153
|
+
step_connections = _generate_step_connections(
|
|
154
|
+
step_nodes, flow_id, start_node_id, flow.inputs
|
|
155
|
+
)
|
|
143
156
|
lines.extend(step_connections)
|
|
144
157
|
|
|
145
158
|
lines.append(" end")
|
|
@@ -185,25 +198,6 @@ def _generate_step_node(
|
|
|
185
198
|
lines.append(
|
|
186
199
|
f' {node_id}@{{shape: doc, label: "📄 Template: {step.id}"}}'
|
|
187
200
|
)
|
|
188
|
-
elif isinstance(step, Condition):
|
|
189
|
-
lines.append(
|
|
190
|
-
f' {node_id}@{{shape: diamond, label: "❓ Condition: {step.id}"}}'
|
|
191
|
-
)
|
|
192
|
-
# Add conditional branches
|
|
193
|
-
then_id = f"{node_id}_THEN"
|
|
194
|
-
then_def, then_ext = _generate_step_node(step.then, then_id, flow_id)
|
|
195
|
-
lines.extend(then_def)
|
|
196
|
-
lines.append(f" {node_id} -->|Yes| {then_id}")
|
|
197
|
-
external_connections.extend(then_ext)
|
|
198
|
-
|
|
199
|
-
if step.else_:
|
|
200
|
-
else_id = f"{node_id}_ELSE"
|
|
201
|
-
else_def, else_ext = _generate_step_node(
|
|
202
|
-
step.else_, else_id, flow_id
|
|
203
|
-
)
|
|
204
|
-
lines.extend(else_def)
|
|
205
|
-
lines.append(f" {node_id} -->|No| {else_id}")
|
|
206
|
-
external_connections.extend(else_ext)
|
|
207
201
|
elif isinstance(step, Decoder):
|
|
208
202
|
format_label = (
|
|
209
203
|
step.format.value
|
|
@@ -211,7 +205,7 @@ def _generate_step_node(
|
|
|
211
205
|
else str(step.format)
|
|
212
206
|
)
|
|
213
207
|
lines.append(
|
|
214
|
-
f' {node_id}@{{shape: lean-r, label: "🔍 Decode: {step.id}
|
|
208
|
+
f' {node_id}@{{shape: lean-r, label: "🔍 Decode: {step.id} ({format_label})"}}'
|
|
215
209
|
)
|
|
216
210
|
elif isinstance(step, VectorSearch):
|
|
217
211
|
lines.append(
|
|
@@ -234,14 +228,14 @@ def _generate_step_node(
|
|
|
234
228
|
elif isinstance(step, APITool):
|
|
235
229
|
method_label = step.method.upper()
|
|
236
230
|
lines.append(
|
|
237
|
-
f' {node_id}
|
|
231
|
+
f' {node_id}["⚡ API: {step.id} ({method_label})"]'
|
|
238
232
|
)
|
|
239
233
|
if step.auth:
|
|
240
234
|
auth_id = f"AUTH_{_sanitize_id(step.auth.id)}"
|
|
241
235
|
external_connections.append(f" {node_id} -.-> {auth_id}")
|
|
242
236
|
elif isinstance(step, PythonFunctionTool):
|
|
243
237
|
lines.append(
|
|
244
|
-
f' {node_id}@{{shape: rect, label: "🐍 Python: {step.id}
|
|
238
|
+
f' {node_id}@{{shape: rect, label: "🐍 Python: {step.id} {step.function_name}"}}'
|
|
245
239
|
)
|
|
246
240
|
elif isinstance(step, Tool):
|
|
247
241
|
lines.append(
|
|
@@ -257,30 +251,51 @@ def _generate_step_node(
|
|
|
257
251
|
|
|
258
252
|
|
|
259
253
|
def _generate_step_connections(
|
|
260
|
-
step_nodes: list[tuple[str, Step]],
|
|
254
|
+
step_nodes: list[tuple[str, Step]],
|
|
255
|
+
flow_id: str,
|
|
256
|
+
start_node_id: str | None = None,
|
|
257
|
+
flow_inputs: list[Any] | None = None,
|
|
261
258
|
) -> list[str]:
|
|
262
259
|
"""Generate connections between steps based on variable flow."""
|
|
263
260
|
lines = []
|
|
264
261
|
|
|
265
|
-
#
|
|
262
|
+
# If we have a start node and flow inputs, add them to initial output map
|
|
266
263
|
output_map: dict[str, str] = {}
|
|
267
|
-
|
|
268
|
-
for
|
|
269
|
-
output_map[
|
|
264
|
+
if start_node_id and flow_inputs:
|
|
265
|
+
for flow_input in flow_inputs:
|
|
266
|
+
output_map[flow_input.id] = start_node_id
|
|
270
267
|
|
|
271
|
-
#
|
|
268
|
+
# Process each step: connect inputs, then register outputs
|
|
269
|
+
# This ensures we connect to the previous producer before updating map
|
|
272
270
|
for node_id, step in step_nodes:
|
|
271
|
+
# First, connect this step's inputs to their producers
|
|
273
272
|
for input_var in step.inputs:
|
|
274
273
|
if input_var.id in output_map:
|
|
275
274
|
producer_id = output_map[input_var.id]
|
|
275
|
+
# Skip self-referencing connections (when a step both
|
|
276
|
+
# consumes and produces the same variable)
|
|
277
|
+
if producer_id == node_id:
|
|
278
|
+
continue
|
|
276
279
|
# Get a simple string representation of the variable type
|
|
277
280
|
var_type = str(input_var.type).split(".")[
|
|
278
281
|
-1
|
|
279
282
|
] # Get the last part after dots
|
|
283
|
+
var_id_and_type = f"{input_var.id}: {var_type}"
|
|
284
|
+
|
|
285
|
+
is_list = str(var_type).startswith("list[") and str(
|
|
286
|
+
var_type
|
|
287
|
+
).endswith("]")
|
|
288
|
+
if is_list:
|
|
289
|
+
var_id_and_type = f'"{var_id_and_type}"'
|
|
290
|
+
|
|
280
291
|
lines.append(
|
|
281
|
-
f" {producer_id} -->|{
|
|
292
|
+
f" {producer_id} -->|{var_id_and_type}| {node_id}"
|
|
282
293
|
)
|
|
283
294
|
|
|
295
|
+
# Then, register this step's outputs for future steps
|
|
296
|
+
for output_var in step.outputs:
|
|
297
|
+
output_map[output_var.id] = node_id
|
|
298
|
+
|
|
284
299
|
# If no connections were made, create a simple sequential flow
|
|
285
300
|
if not lines and len(step_nodes) > 1:
|
|
286
301
|
for i in range(len(step_nodes) - 1):
|
|
@@ -422,7 +437,7 @@ def _generate_shared_resources(app: Application) -> list[str]:
|
|
|
422
437
|
if isinstance(tool, APITool):
|
|
423
438
|
method_label = tool.method.upper()
|
|
424
439
|
lines.append(
|
|
425
|
-
f' {tool_id}
|
|
440
|
+
f' {tool_id}["⚡ {tool.id} ({method_label})"]'
|
|
426
441
|
)
|
|
427
442
|
if tool.auth:
|
|
428
443
|
auth_id = f"AUTH_{_sanitize_id(tool.auth.id)}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qtype
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: DSL for Generative AI Prototyping
|
|
5
5
|
Author-email: Lou Kratz <lou.kratz+qtype@bazaarvoice.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -9,29 +9,46 @@ Requires-Python: >=3.10
|
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Requires-Dist: jsonschema>=4.24.0
|
|
12
|
-
Requires-Dist: pydantic>=2.
|
|
12
|
+
Requires-Dist: pydantic>=2.12.4
|
|
13
13
|
Requires-Dist: pyyaml>=6.0.2
|
|
14
14
|
Requires-Dist: python-dotenv>=1.0.0
|
|
15
15
|
Requires-Dist: openai>=1.93.0
|
|
16
16
|
Requires-Dist: fsspec>=2025.5.1
|
|
17
|
-
Requires-Dist: pydantic-yaml>=1.5.1
|
|
18
17
|
Requires-Dist: mkdocs-awesome-pages-plugin>=2.10.1
|
|
19
|
-
Requires-Dist: mermaid-py>=0.8.0
|
|
20
18
|
Requires-Dist: pip-system-certs>=5.2
|
|
19
|
+
Requires-Dist: openapi3-parser>=1.1.21
|
|
20
|
+
Requires-Dist: pydantic-yaml>=1.6.0
|
|
21
|
+
Requires-Dist: google-cloud-aiplatform>=1.120.0
|
|
21
22
|
Provides-Extra: interpreter
|
|
23
|
+
Requires-Dist: aiostream>=0.7.1; extra == "interpreter"
|
|
22
24
|
Requires-Dist: arize-phoenix-otel>=0.12.1; extra == "interpreter"
|
|
23
25
|
Requires-Dist: boto3>=1.34.0; extra == "interpreter"
|
|
26
|
+
Requires-Dist: datasets>=4.4.1; extra == "interpreter"
|
|
27
|
+
Requires-Dist: diskcache>=5.6.3; extra == "interpreter"
|
|
28
|
+
Requires-Dist: docling>=2.55.1; extra == "interpreter"
|
|
29
|
+
Requires-Dist: docx2txt>=0.9; extra == "interpreter"
|
|
24
30
|
Requires-Dist: fastapi>=0.116.1; extra == "interpreter"
|
|
31
|
+
Requires-Dist: jsonpath-ng>=1.7.0; extra == "interpreter"
|
|
32
|
+
Requires-Dist: langfuse>=3.9.0; extra == "interpreter"
|
|
25
33
|
Requires-Dist: llama-index-embeddings-bedrock>=0.5.2; extra == "interpreter"
|
|
26
34
|
Requires-Dist: llama-index-embeddings-openai>=0.3.1; extra == "interpreter"
|
|
27
|
-
Requires-Dist: llama-index-llms-bedrock-converse>=0.
|
|
35
|
+
Requires-Dist: llama-index-llms-bedrock-converse>=0.10.5; extra == "interpreter"
|
|
28
36
|
Requires-Dist: llama-index-llms-bedrock>=0.3.8; extra == "interpreter"
|
|
37
|
+
Requires-Dist: llama-index-llms-vertex>=0.6.1; extra == "interpreter"
|
|
38
|
+
Requires-Dist: llama-index-postprocessor-bedrock-rerank>=0.5.1; extra == "interpreter"
|
|
39
|
+
Requires-Dist: llama-index-readers-huggingface-fs>=0.4.1; extra == "interpreter"
|
|
40
|
+
Requires-Dist: llama-index-vector-stores-qdrant>=0.8.6; extra == "interpreter"
|
|
29
41
|
Requires-Dist: llama-index>=0.12.45; extra == "interpreter"
|
|
30
42
|
Requires-Dist: openinference-instrumentation-llama-index>=4.3.4; extra == "interpreter"
|
|
43
|
+
Requires-Dist: opensearch-py>=2.7.0; extra == "interpreter"
|
|
44
|
+
Requires-Dist: opentelemetry-exporter-otlp>=1.35.0; extra == "interpreter"
|
|
45
|
+
Requires-Dist: opentelemetry-sdk>=1.35.0; extra == "interpreter"
|
|
31
46
|
Requires-Dist: pandas>=2.2.3; extra == "interpreter"
|
|
32
47
|
Requires-Dist: psycopg2-binary>=2.9.10; extra == "interpreter"
|
|
48
|
+
Requires-Dist: pyarrow>=21.0.0; extra == "interpreter"
|
|
33
49
|
Requires-Dist: pyathena[sqlalchemy]>=3.18.0; extra == "interpreter"
|
|
34
50
|
Requires-Dist: python-magic>=0.4.27; extra == "interpreter"
|
|
51
|
+
Requires-Dist: s3fs>=2025.7.0; extra == "interpreter"
|
|
35
52
|
Requires-Dist: sqlalchemy>=2.0.42; extra == "interpreter"
|
|
36
53
|
Requires-Dist: uvicorn[standard]>=0.35.0; extra == "interpreter"
|
|
37
54
|
Dynamic: license-file
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
qtype/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
qtype/cli.py,sha256=AC2i9dROss5JsEhbaRpIz4kHVvm0Tq-ope3ENL8Qw5w,4797
|
|
3
|
+
qtype/application/__init__.py,sha256=WS3x0b0NRt-nRmj1trsytlvMpQS5KN7Hi6THGfY8bKE,230
|
|
4
|
+
qtype/application/documentation.py,sha256=ifmdt0jBW410baQuCUxovYDQQj-kxPZ4fmf6rWps9JY,4988
|
|
5
|
+
qtype/application/facade.py,sha256=JjexkpTzP-aAJHs4AaxJbB4CU10jn3zcPFpQ6FYWJFg,5803
|
|
6
|
+
qtype/application/commons/__init__.py,sha256=QyWAB2cvimM4DxNo2oBFCGkfBikH-ZeMBMGWmJcq4Uc,135
|
|
7
|
+
qtype/application/commons/tools.py,sha256=U_jJdVN2NO5v9b3qb6dPIiVykfal6tp6NvcLGWR6HC8,5035
|
|
8
|
+
qtype/application/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
qtype/application/converters/tools_from_api.py,sha256=h1g4nOLEpLPqbXAtqSLPA1WuRELMOMsI392kA61nsxc,16831
|
|
10
|
+
qtype/application/converters/tools_from_module.py,sha256=PDfQVMytpCjcMxoCUb_Viqxn3IzD7Lb9tHqsbb9tcT0,9047
|
|
11
|
+
qtype/application/converters/types.py,sha256=OsJQ2fmgQm5NaxgS9cvHER9anfv3qttbt7co3f-MxPE,440
|
|
12
|
+
qtype/base/__init__.py,sha256=4jwcB8cDHzDNF3NBv8WqHNk3sDZDNvUFNjx2CKZ-pyY,283
|
|
13
|
+
qtype/base/exceptions.py,sha256=NR6-p6FnIabFPid9xIUTTeNhCYoIw8sbxEzaWQ11a4o,1155
|
|
14
|
+
qtype/base/logging.py,sha256=eqStjILlmhNryYRqUiyTdDHoUoiLKSY8J0GevvzvTKQ,1075
|
|
15
|
+
qtype/base/types.py,sha256=zkweSHfpP6MrDEHzEpEWTZ-xVxQLZJj1QhKv-Mj4s0A,6834
|
|
16
|
+
qtype/commands/__init__.py,sha256=Qo4M07zm5I63r8STxDjvt5fhP1jygdXTsExNGELkefc,257
|
|
17
|
+
qtype/commands/convert.py,sha256=wh2-MSBlnMU5peAzVeQcGqqFzQbeCuL5WC5-EDZ-TFM,4636
|
|
18
|
+
qtype/commands/generate.py,sha256=OQEkuh3dTVu6ZUNAuH_HkU-9YktYySL0qjTdrz28FY8,7285
|
|
19
|
+
qtype/commands/run.py,sha256=rDIiDioWU-dNuw39F12Bb6buknsNGzzVhd41i9Yms8Y,6633
|
|
20
|
+
qtype/commands/serve.py,sha256=lb5akSZ8fYLlCl8u8HDFFk6kyCHHwSRnP5wNzZry8sg,3216
|
|
21
|
+
qtype/commands/validate.py,sha256=f0aOk6A08910bFfamfg8xafByADMx4EktXAGMrEeUXU,3067
|
|
22
|
+
qtype/commands/visualize.py,sha256=J1eqwaVWTteGzib84g7Qtp0JlX9wIMmRQWSv1RhAns8,3763
|
|
23
|
+
qtype/dsl/__init__.py,sha256=clrmM1ZlK6c0Le_183eo5bc9dDK53Ebp-vH5ZVfwhfw,397
|
|
24
|
+
qtype/dsl/custom_types.py,sha256=N3qswimv0foH40YDubHaTZ3HYF9RUbZ2x5eQ4i798Ko,2901
|
|
25
|
+
qtype/dsl/domain_types.py,sha256=-pX74DKwrRanoXBxYqAdN_f44ike6ssRV3tZ20R2PhQ,4319
|
|
26
|
+
qtype/dsl/linker.py,sha256=c7PPTULy7_z_9u_qeseIaomR_B8kBa9YzOhQpjeGaSM,12975
|
|
27
|
+
qtype/dsl/loader.py,sha256=mht0BqfmyTNHIEDaF3iTEmYQLJBP5GIZULwexxw9Dpg,9771
|
|
28
|
+
qtype/dsl/model.py,sha256=g3cZ4-vh_WxrjJ1ev6kFfQcX2-NOZHb70ZT-7m-nHHY,40907
|
|
29
|
+
qtype/dsl/parser.py,sha256=Ww32bLQ2vGOObsA-vWjaMh4TOKRwEA7FAt9U6wjKZkw,5490
|
|
30
|
+
qtype/dsl/types.py,sha256=k6cgThA287bZ_pvTKQvxWhatcYCPNne8zpqOYOvLvOg,1687
|
|
31
|
+
qtype/interpreter/__init__.py,sha256=IaRF90JLFbsTLKz9LTOMI_Pz4xwVaEyXPNaXV7sLou8,43
|
|
32
|
+
qtype/interpreter/api.py,sha256=V7hjsmDhe1IwbcwdM5bnPGBiwH3TtlMLjUJdGJumCdA,4193
|
|
33
|
+
qtype/interpreter/conversions.py,sha256=VKRJm5ofM3tWzXKg_zLTvKzi7GNBDv6MiE4HnQ52eFY,21871
|
|
34
|
+
qtype/interpreter/converters.py,sha256=gWyfizl7d-DT6jJ2aOrneUcZcwB-LdMDEvl-VT0-mLQ,2348
|
|
35
|
+
qtype/interpreter/endpoints.py,sha256=un4iCYCk86lYKpTDFdzlByvebdctNwRF3n4oD4ZwpTw,11946
|
|
36
|
+
qtype/interpreter/flow.py,sha256=rncholeAv7gn3Pr99N9mIA5oFY4OMHVQX6IJljtVO34,6566
|
|
37
|
+
qtype/interpreter/logging_progress.py,sha256=RmyNXdbpPZ7ye8cbSab0Tw10x3T38U3S8rj2bOTfbso,1848
|
|
38
|
+
qtype/interpreter/metadata_api.py,sha256=LfJjt9atsgiAra6aVBXLoJrPa06_CBUagYysT556nt8,3267
|
|
39
|
+
qtype/interpreter/resource_cache.py,sha256=K0kzpm223COWk7FN9qyOvNOEoOcABR4yLeADL9ekE_o,1188
|
|
40
|
+
qtype/interpreter/rich_progress.py,sha256=J7TokOIqIUVWJZCfGEexQCwvvj6b1SjRtKThk2DU0CA,6761
|
|
41
|
+
qtype/interpreter/telemetry.py,sha256=Hcwd9sMW55LejgOIpPwjkWsmTvB2vnpSr4TshTAKljk,4901
|
|
42
|
+
qtype/interpreter/types.py,sha256=YBwav_frbFptGrIw60ebI-jfAu28GQUZEQ9mwfCjLFc,10045
|
|
43
|
+
qtype/interpreter/typing.py,sha256=Ka5wkkpQFZQKgKMCR3p7bD7W4uHpOryevEi-isc2RCw,3888
|
|
44
|
+
qtype/interpreter/auth/__init__.py,sha256=L98AxaSizb6LMdXEr8FGe9MBtPBnfCeWxjI0oi7sg_o,62
|
|
45
|
+
qtype/interpreter/auth/aws.py,sha256=eMXyEBqzv7I243fS-A1zHPQkN--yPFEh1Hxp4rxmyEs,8154
|
|
46
|
+
qtype/interpreter/auth/cache.py,sha256=uVyJ_jkbprRdlvbnm1DVIaYyTDLEsPXvi3xjuRneH2k,1825
|
|
47
|
+
qtype/interpreter/auth/generic.py,sha256=WHXu3SxWzxJn_bv6R20Aod84Vwe73xTYHx754dY1MSg,6178
|
|
48
|
+
qtype/interpreter/base/base_step_executor.py,sha256=HntCYGGki0xnl29AwH98DXf3i9kaeFFgr52JC9EQHGM,16478
|
|
49
|
+
qtype/interpreter/base/batch_step_executor.py,sha256=g5_yPd5VTy_slW5ZXyamgFyTRd0CoaeVfDHj8x4PvUk,5906
|
|
50
|
+
qtype/interpreter/base/exceptions.py,sha256=7CIexzDfIjvAA0c6qwg4jsDcTQM1pKQLj6szxcqil_c,1586
|
|
51
|
+
qtype/interpreter/base/executor_context.py,sha256=qDMb7GJebCw3E6oMiCSpu0-aRq-l6MPx6yPLwM2quOs,3561
|
|
52
|
+
qtype/interpreter/base/factory.py,sha256=9etq_vvds-C9QrwVutkPZmGwrMJ_WZwrkeXOzjOUEpk,3534
|
|
53
|
+
qtype/interpreter/base/progress_tracker.py,sha256=zHtTp0JGrn1M3wNEEVfkwQmuHD-WKXV7tv4fDdHv1xs,3488
|
|
54
|
+
qtype/interpreter/base/secrets.py,sha256=74NoU0Fx96vva6LGWXk7EkvFWD4uZEk12NjWrGHWZTc,11241
|
|
55
|
+
qtype/interpreter/base/step_cache.py,sha256=iNtEFN-bvfG5S5iPhXR_U7iVtK-RWh9_nhCRetckukU,2432
|
|
56
|
+
qtype/interpreter/base/stream_emitter.py,sha256=8l5bCFTjMA3Takjh51QdWw8ERb7_GamHVoU-x6xkG5I,13828
|
|
57
|
+
qtype/interpreter/executors/agent_executor.py,sha256=pll5tdUD977fmMMfoXVhY-dLQttv-aqT04gyjrF6seo,8378
|
|
58
|
+
qtype/interpreter/executors/aggregate_executor.py,sha256=Z3NJekpeo7aqqvOcXQqb6d6t9g4UB1r3N1lSV9EwZq4,3495
|
|
59
|
+
qtype/interpreter/executors/bedrock_reranker_executor.py,sha256=p25BMmM1paAlK2vfpwJ9T5st_2B-bmZoDnVFp9ynZIY,7154
|
|
60
|
+
qtype/interpreter/executors/decoder_executor.py,sha256=KqLhnhiclMIcUNf3bu7H4vDAOXCQeVO0rc2hIXm1qZ4,5610
|
|
61
|
+
qtype/interpreter/executors/doc_to_text_executor.py,sha256=ZkTtKUL0BfNIiuj-OcYybn1f0By6ujRmd1U4VEAtJt4,3804
|
|
62
|
+
qtype/interpreter/executors/document_embedder_executor.py,sha256=dBx1yfjzGPAOAfCx0zr1uOkfs7JUWgHoKYanqnCFAQk,4089
|
|
63
|
+
qtype/interpreter/executors/document_search_executor.py,sha256=ZmKAt__jC5cxZY0gSm9AgpC6n7MFavTHE01tQED3zFk,4051
|
|
64
|
+
qtype/interpreter/executors/document_source_executor.py,sha256=ZpBrBaE16YeRk750TxvE08NnCIUzArjESZImESomaIo,4247
|
|
65
|
+
qtype/interpreter/executors/document_splitter_executor.py,sha256=00x32yo1wGUvW88_lUahfGU94prUPGaOTk5GBUJbBJA,3882
|
|
66
|
+
qtype/interpreter/executors/echo_executor.py,sha256=oQUgzQTHruT4on7wgEBOcikwOy6KP82d5zrul5QLoRU,2194
|
|
67
|
+
qtype/interpreter/executors/field_extractor_executor.py,sha256=geDmT6GyvbDDJvPX1hPChAydDZ_LSHlOdskK-6ZGvbI,5796
|
|
68
|
+
qtype/interpreter/executors/file_source_executor.py,sha256=OUT_zJrYN3iFMUgLECde93C4rv8PthcQsuJ--CJvEsI,3605
|
|
69
|
+
qtype/interpreter/executors/file_writer_executor.py,sha256=x4BpgdXM7Xhz1tJJ5MmBIjFO4y80VC1V1ow3tox_Xrw,4099
|
|
70
|
+
qtype/interpreter/executors/index_upsert_executor.py,sha256=5MxG3GX2bbjX6jhCpCdEZ0YFJOshn649cfaOT50PLCA,8518
|
|
71
|
+
qtype/interpreter/executors/invoke_embedding_executor.py,sha256=5iXh2elP51gdnuUvRDH_RuWugsm3KCJb8S15Oy4p8zg,3834
|
|
72
|
+
qtype/interpreter/executors/invoke_flow_executor.py,sha256=U30cYM3F_zy1_2CD1Dde59xyZD0rDa5W46lST1hxF6s,1682
|
|
73
|
+
qtype/interpreter/executors/invoke_tool_executor.py,sha256=hhbE8YTr0x5-kz_xsvdWGGzkLkVdvDoAVAF-3ZUK5as,12786
|
|
74
|
+
qtype/interpreter/executors/llm_inference_executor.py,sha256=A6b_Ns_734TCn_DMhdNSqWc5qX970FryhpsX_jtEu_4,9593
|
|
75
|
+
qtype/interpreter/executors/prompt_template_executor.py,sha256=AKZWQvsoY2fQoSg5N8_R7LIlC8AKTwjNKOz_MuvASc0,2700
|
|
76
|
+
qtype/interpreter/executors/sql_source_executor.py,sha256=-fUWQK2S7NBe3oJG1lmkNRujASHFyXu3H8h-WrobbQw,3932
|
|
77
|
+
qtype/interpreter/executors/vector_search_executor.py,sha256=8IJpobn8XYX_WCDGPN5XGGXzsE2Fpvg2nM4hc8DV9GI,3189
|
|
78
|
+
qtype/interpreter/stream/chat/__init__.py,sha256=evNfJJp3VUiTgip8___vBryAZubS-cij-8YYAjOJXX8,401
|
|
79
|
+
qtype/interpreter/stream/chat/converter.py,sha256=0kAYtX_QNDZHJbzFHJGTHYLlKbl79hDkmZuFECG7FSQ,13623
|
|
80
|
+
qtype/interpreter/stream/chat/file_conversions.py,sha256=klSsXjATfSoOzKEjAiabGRXKErIHxP6-bVWbNM3EM4E,1751
|
|
81
|
+
qtype/interpreter/stream/chat/ui_request_to_domain_type.py,sha256=QcRxUkHW4GWookBPRClh95wPDivvD-xvgt0TC-Az9QY,4695
|
|
82
|
+
qtype/interpreter/stream/chat/vercel.py,sha256=3q3H2xTZ17tCKCt53GurrKUKtG3kBMEqZ_OT9KAudMY,19164
|
|
83
|
+
qtype/interpreter/stream/utils/__init__.py,sha256=V7slu_wB4H7MiM6pysKjww0eDVg53bo_NvkEbtM2NuU,533
|
|
84
|
+
qtype/interpreter/stream/utils/build_vercel_ai_formatter.py,sha256=P_EL2VB_hWigN4OQrtnZgBj1C3hm3_rajdlY60Ay_j8,2511
|
|
85
|
+
qtype/interpreter/stream/utils/callback_to_stream.py,sha256=oAriHcFNUTYsA__6A3bNDdjGe4JMpRUStCq7UUKzRRc,1904
|
|
86
|
+
qtype/interpreter/stream/utils/create_streaming_response.py,sha256=OsefnAV6i1RnfP3EjnfvVwfl3fscKvBleBs6I6ubJ1s,495
|
|
87
|
+
qtype/interpreter/stream/utils/default_chat_extract_text.py,sha256=opEwJujQ1pNn_pEbHtVWfEJpO8tiArnm4G4XqJQp-o8,502
|
|
88
|
+
qtype/interpreter/stream/utils/error_streaming_response.py,sha256=wX9oD3w4x9_hIT15rDTGboOAix80gW_VkvpIo4CMVi0,613
|
|
89
|
+
qtype/interpreter/tools/__init__.py,sha256=kgUmX4jVdKe2kXSFfdxWeO4BOU2W2tUY005KGDyKoys,153
|
|
90
|
+
qtype/interpreter/tools/function_tool_helper.py,sha256=Qne_-XX9S0Cxld1AGs6zCnzA3Y3CVIkHC-M7PU4it70,9816
|
|
91
|
+
qtype/interpreter/ui/404.html,sha256=DlXv3HnsqQO0N3zexYRIYLdxp-LLKBOL_1TKNVyTzB8,6907
|
|
92
|
+
qtype/interpreter/ui/file.svg,sha256=K2eBLDJcGZoCU2zb7qDFk6cvcH0yO3LuPgjbqwZ1O9Q,391
|
|
93
|
+
qtype/interpreter/ui/globe.svg,sha256=thS5vxg5JZV2YayFFJj-HYAp_UOmL7_thvniYkpX588,1035
|
|
94
|
+
qtype/interpreter/ui/icon.png,sha256=_6nLJGL8ZsuOMyDMPxTM2oIdAUMCTLRejxN0fRyiqug,605542
|
|
95
|
+
qtype/interpreter/ui/index.html,sha256=s6Q8X8A3PlVocc0gcjyI5nE2xWTsn1u22XxfsaEyqS0,6429
|
|
96
|
+
qtype/interpreter/ui/index.txt,sha256=6lP5PY6zC9jiNN8G-RhdHuc0w8M1vXkBXMFbH_pdy2U,3630
|
|
97
|
+
qtype/interpreter/ui/next.svg,sha256=VZld-tbstJRaHoVt3KA8XhaqW_E_0htN9qdK55NXvPw,1375
|
|
98
|
+
qtype/interpreter/ui/vercel.svg,sha256=8IEzey_uY1tFW2MnVAaj5_OdagFOJa2Q2rWmfmKhKsQ,128
|
|
99
|
+
qtype/interpreter/ui/window.svg,sha256=ZEdoxKrrR2e84pM0TusMEl-4BKlNgBRAQkByIC2F46E,385
|
|
100
|
+
qtype/interpreter/ui/404/index.html,sha256=DlXv3HnsqQO0N3zexYRIYLdxp-LLKBOL_1TKNVyTzB8,6907
|
|
101
|
+
qtype/interpreter/ui/_next/static/20HoJN6otZ_LyHLHpCPE6/_buildManifest.js,sha256=0vsMOGOUUSRTopZZCMo6vOZAv9Cv1y_Op2pDCfR_gm8,544
|
|
102
|
+
qtype/interpreter/ui/_next/static/20HoJN6otZ_LyHLHpCPE6/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
|
103
|
+
qtype/interpreter/ui/_next/static/chunks/434-b2112d19f25c44ff.js,sha256=w8wMuRUv16h3AnZYPN7mBdmX4LdeLz2QOgnYFVcd6rU,483590
|
|
104
|
+
qtype/interpreter/ui/_next/static/chunks/4bd1b696-cf72ae8a39fa05aa.js,sha256=LZF4GSB27wWEGfcZ8svgftIhKsR-dbSEPQOMFE1UMZk,172729
|
|
105
|
+
qtype/interpreter/ui/_next/static/chunks/964-2b041321a01cbf56.js,sha256=bNvMJDSoselMWYBOle3aNrTUGI5QH4fqwFJylKAOQBI,166060
|
|
106
|
+
qtype/interpreter/ui/_next/static/chunks/ba12c10f-546f2714ff8abc66.js,sha256=ZQ18rys4yLfPxrJKDFAPCunmM4EAf1EdWgGKHSSmoVc,27560
|
|
107
|
+
qtype/interpreter/ui/_next/static/chunks/framework-7c95b8e5103c9e90.js,sha256=DOKGYsI-E-_-bPetqL9T2YAkmfJw74DS4rMmb0q-Nu4,182720
|
|
108
|
+
qtype/interpreter/ui/_next/static/chunks/main-app-6fc6346bc8f7f163.js,sha256=1ZmGHUk2IyojKisUhbDSHd92tWVBzkjQFWXfHfa6xGw,557
|
|
109
|
+
qtype/interpreter/ui/_next/static/chunks/main-e26b9cb206da2cac.js,sha256=RyWVg7xUCd25ftCvewNChywH-GzG0ndCwzfxUk6FAik,117652
|
|
110
|
+
qtype/interpreter/ui/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
|
111
|
+
qtype/interpreter/ui/_next/static/chunks/webpack-08642e441b39b6c2.js,sha256=pKy0RNL4jzGXP3Xpxl2t9xP7WcPL31k5EN26E7sDDMY,3359
|
|
112
|
+
qtype/interpreter/ui/_next/static/chunks/app/layout-a05273ead5de2c41.js,sha256=dJnsPHn-pQkAnEQyKEW3qbIoj3TWzqGj8E0H4ou6jUQ,589
|
|
113
|
+
qtype/interpreter/ui/_next/static/chunks/app/page-8c67d16ac90d23cb.js,sha256=niPKzFSKcHll7mDY5vDbbuvxgSbCva2sfz10i-d6iqw,39753
|
|
114
|
+
qtype/interpreter/ui/_next/static/chunks/app/_not-found/page-e110d2a9d0a83d82.js,sha256=0vU7y8ruY2D5Gsa9ymwbZeK7yZbfPDm0yYiQ8SG8ZmI,2670
|
|
115
|
+
qtype/interpreter/ui/_next/static/chunks/pages/_app-0a0020ddd67f79cf.js,sha256=42mX-qEGt0LNFAAUjOhcM71wHqZHO_xQFM53G5WPiSc,233
|
|
116
|
+
qtype/interpreter/ui/_next/static/chunks/pages/_error-03529f2c21436739.js,sha256=m8CkMJwrMUfIvaSXNXOsO6TOxsWPXQjBa9R52GCvaQk,218
|
|
117
|
+
qtype/interpreter/ui/_next/static/css/8a8d1269e362fef7.css,sha256=OZ73MS7C4fys9hY6jq0vApbjzR5CuB0U48gk2bdbEl0,42203
|
|
118
|
+
qtype/interpreter/ui/_next/static/media/4cf2300e9c8272f7-s.p.woff2,sha256=op-QCm1gPpiUSTJ5VuesYeo-aybKdCb2TnzM8s1K7Tc,28388
|
|
119
|
+
qtype/interpreter/ui/_next/static/media/747892c23ea88013-s.woff2,sha256=fVYJU4p5VF7JReAZdx7VYuLGWmwcPEzMTqNDcuJ3w5Y,13036
|
|
120
|
+
qtype/interpreter/ui/_next/static/media/8d697b304b401681-s.woff2,sha256=L-8o3IIethe91jtC7gxTC4zX1J0g83yrYaTKeWUUpwM,14676
|
|
121
|
+
qtype/interpreter/ui/_next/static/media/93f479601ee12b01-s.p.woff2,sha256=t6wUSzlMvYEFLWOX7AwzOXl3sdfpvAledE5lKjeMb7M,31288
|
|
122
|
+
qtype/interpreter/ui/_next/static/media/9610d9e46709d722-s.woff2,sha256=N08hXnJfWWXM9XN7Rteie_5rOzIOaof0kGjkiIksSAk,12608
|
|
123
|
+
qtype/interpreter/ui/_next/static/media/ba015fad6dcf6784-s.woff2,sha256=92BKU6ACUPZttLR91EMnzipD9u3shQ1SF7uAI4gZ790,15292
|
|
124
|
+
qtype/semantic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
125
|
+
qtype/semantic/base_types.py,sha256=wfUlT0gV3_Mk1xLLI64SSXCB9GFmn29yz5adTaHrsOI,1540
|
|
126
|
+
qtype/semantic/checker.py,sha256=TJTxSIMXNERpry98jqFNd8Ga5ljTvHOVosYb0AYbpbc,22291
|
|
127
|
+
qtype/semantic/generate.py,sha256=s56N0ollRJVVxy6RUKZWFFReKYcSSVw33ixvT2MQRuA,21116
|
|
128
|
+
qtype/semantic/loader.py,sha256=QRhTc_AJfsWSMn8ThaW60GmIGjFMN-3bBUy4pktFjz4,3041
|
|
129
|
+
qtype/semantic/model.py,sha256=7yZ-Ufuo-gNJbhFXALuKZxILdhNB5zbL3a3oQQARI8g,28602
|
|
130
|
+
qtype/semantic/resolver.py,sha256=bWPCSB8KJpVqN_n41U_r-qzUiT8vAMBOD3pOGmxL6TY,4618
|
|
131
|
+
qtype/semantic/visualize.py,sha256=thjrZcfQuZJWrZ9EMAPhAa2kNikR5rLIJrfcD3hJ8XY,17426
|
|
132
|
+
qtype-0.1.7.dist-info/licenses/LICENSE,sha256=1KA5EgYBSR0O6nCH2HEvk6Di53YKJ9r_VCR7G8G8qAY,11341
|
|
133
|
+
qtype-0.1.7.dist-info/METADATA,sha256=N-2oIlfAJKDpgwT1XjZOKsH70kSUy6mSUSDR6j7ME0c,5657
|
|
134
|
+
qtype-0.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
135
|
+
qtype-0.1.7.dist-info/entry_points.txt,sha256=5y4vj8RLvgl2tXSj-Hm7v5-Tn3kP4-UonjNoN-mfaQE,41
|
|
136
|
+
qtype-0.1.7.dist-info/top_level.txt,sha256=ONroH5B0mZ51jr7NSWCK0weFwwCO7wBLmyVS1YqNU14,6
|
|
137
|
+
qtype-0.1.7.dist-info/RECORD,,
|
qtype/dsl/base_types.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from enum import Enum
|
|
4
|
-
|
|
5
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
-
|
|
7
|
-
# ---------------- Shared Base Types and Enums ----------------
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class PrimitiveTypeEnum(str, Enum):
|
|
11
|
-
"""Represents the type of data a user or system input can accept within the DSL."""
|
|
12
|
-
|
|
13
|
-
audio = "audio"
|
|
14
|
-
boolean = "boolean"
|
|
15
|
-
bytes = "bytes"
|
|
16
|
-
date = "date"
|
|
17
|
-
datetime = "datetime"
|
|
18
|
-
int = "int"
|
|
19
|
-
file = "file"
|
|
20
|
-
float = "float"
|
|
21
|
-
image = "image"
|
|
22
|
-
text = "text"
|
|
23
|
-
time = "time"
|
|
24
|
-
video = "video"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class StepCardinality(str, Enum):
|
|
28
|
-
"""Does this step emit 1 (one) or 0...N (many) items?"""
|
|
29
|
-
|
|
30
|
-
one = "one"
|
|
31
|
-
many = "many"
|
|
32
|
-
auto = "auto" # Let's the step determine this in semantic resolution. Currently only Flows can do this..
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class StrictBaseModel(BaseModel):
|
|
36
|
-
"""Base model with extra fields forbidden."""
|
|
37
|
-
|
|
38
|
-
model_config = ConfigDict(extra="forbid")
|