qtype 0.1.7__py3-none-any.whl → 0.1.11__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/converters/tools_from_module.py +15 -0
- qtype/base/types.py +1 -9
- qtype/base/ui_shapes.py +38 -0
- qtype/commands/convert.py +3 -0
- qtype/dsl/model.py +71 -22
- qtype/interpreter/base/base_step_executor.py +10 -10
- qtype/interpreter/base/factory.py +6 -0
- qtype/interpreter/base/step_cache.py +3 -3
- qtype/interpreter/conversions.py +7 -4
- qtype/interpreter/executors/agent_executor.py +1 -2
- qtype/interpreter/executors/bedrock_reranker_executor.py +1 -2
- qtype/interpreter/executors/collect_executor.py +76 -0
- qtype/interpreter/executors/construct_executor.py +68 -0
- qtype/interpreter/executors/decoder_executor.py +1 -2
- qtype/interpreter/executors/doc_to_text_executor.py +1 -2
- qtype/interpreter/executors/document_embedder_executor.py +1 -2
- qtype/interpreter/executors/document_search_executor.py +1 -2
- qtype/interpreter/executors/document_source_executor.py +1 -2
- qtype/interpreter/executors/document_splitter_executor.py +5 -3
- qtype/interpreter/executors/echo_executor.py +1 -2
- qtype/interpreter/executors/explode_executor.py +49 -0
- qtype/interpreter/executors/field_extractor_executor.py +1 -2
- qtype/interpreter/executors/file_writer_executor.py +12 -13
- qtype/interpreter/executors/index_upsert_executor.py +3 -4
- qtype/interpreter/executors/invoke_embedding_executor.py +1 -2
- qtype/interpreter/executors/invoke_tool_executor.py +1 -2
- qtype/interpreter/executors/llm_inference_executor.py +1 -2
- qtype/interpreter/executors/prompt_template_executor.py +1 -2
- qtype/interpreter/executors/sql_source_executor.py +1 -2
- qtype/interpreter/executors/vector_search_executor.py +1 -2
- qtype/interpreter/flow.py +5 -2
- qtype/interpreter/types.py +18 -10
- qtype/interpreter/typing.py +53 -4
- qtype/interpreter/ui/404/index.html +1 -1
- qtype/interpreter/ui/404.html +1 -1
- qtype/interpreter/ui/_next/static/{20HoJN6otZ_LyHLHpCPE6 → YR7FgQl_Kpwjcqho0ogG4}/_buildManifest.js +1 -1
- qtype/interpreter/ui/_next/static/chunks/230-e22a519211de9624.js +33 -0
- qtype/interpreter/ui/_next/static/chunks/255-268261a96ffee0a9.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/app/_not-found/page-8f0e059659d8afd7.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/app/layout-1615bcffa82ff884.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/app/page-bfbb263eb356c6eb.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/ba12c10f-8d3b3efcaddd4728.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/framework-d7de93249215fb06.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/main-090112344d9a19ce.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/main-app-a5425c8070223ccc.js +1 -0
- qtype/interpreter/ui/_next/static/chunks/pages/{_app-0a0020ddd67f79cf.js → _app-7d307437aca18ad4.js} +1 -1
- qtype/interpreter/ui/_next/static/chunks/pages/{_error-03529f2c21436739.js → _error-cb2a52f75f2162e2.js} +1 -1
- qtype/interpreter/ui/_next/static/chunks/webpack-bd0771cb30dd12fa.js +1 -0
- qtype/interpreter/ui/_next/static/css/7906798f56607e8f.css +3 -0
- qtype/interpreter/ui/assets/video-sample.mp4 +0 -0
- qtype/interpreter/ui/index.html +1 -1
- qtype/interpreter/ui/index.txt +12 -12
- qtype/semantic/checker.py +83 -0
- qtype/semantic/generate.py +0 -1
- qtype/semantic/model.py +25 -18
- {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/METADATA +1 -1
- {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/RECORD +63 -58
- qtype/interpreter/ui/_next/static/chunks/434-b2112d19f25c44ff.js +0 -36
- qtype/interpreter/ui/_next/static/chunks/4bd1b696-cf72ae8a39fa05aa.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/964-2b041321a01cbf56.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/app/_not-found/page-e110d2a9d0a83d82.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/app/layout-a05273ead5de2c41.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/app/page-8c67d16ac90d23cb.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/ba12c10f-546f2714ff8abc66.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/framework-7c95b8e5103c9e90.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/main-app-6fc6346bc8f7f163.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/main-e26b9cb206da2cac.js +0 -1
- qtype/interpreter/ui/_next/static/chunks/webpack-08642e441b39b6c2.js +0 -1
- qtype/interpreter/ui/_next/static/css/8a8d1269e362fef7.css +0 -3
- /qtype/interpreter/ui/_next/static/{20HoJN6otZ_LyHLHpCPE6 → YR7FgQl_Kpwjcqho0ogG4}/_ssgManifest.js +0 -0
- {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/WHEEL +0 -0
- {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/entry_points.txt +0 -0
- {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/licenses/LICENSE +0 -0
- {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import AsyncIterator
|
|
2
|
+
|
|
3
|
+
from qtype.interpreter.base.base_step_executor import StepExecutor
|
|
4
|
+
from qtype.interpreter.base.executor_context import ExecutorContext
|
|
5
|
+
from qtype.interpreter.types import FlowMessage
|
|
6
|
+
from qtype.semantic.model import Explode
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ExplodeExecutor(StepExecutor):
|
|
10
|
+
"""Executor for Explode steps."""
|
|
11
|
+
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
step: Explode,
|
|
15
|
+
context: ExecutorContext,
|
|
16
|
+
**dependencies,
|
|
17
|
+
):
|
|
18
|
+
super().__init__(step, context, **dependencies)
|
|
19
|
+
if not isinstance(step, Explode):
|
|
20
|
+
raise ValueError("ExplodeExecutor can only execute Explode steps.")
|
|
21
|
+
self.step = step
|
|
22
|
+
|
|
23
|
+
async def process_message(
|
|
24
|
+
self,
|
|
25
|
+
message: FlowMessage,
|
|
26
|
+
) -> AsyncIterator[FlowMessage]:
|
|
27
|
+
"""Process a FlowMessage for the Explode step.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
message: A FlowMessage to process.
|
|
31
|
+
Yields:
|
|
32
|
+
FlowMessages with the results of processing.
|
|
33
|
+
"""
|
|
34
|
+
try:
|
|
35
|
+
input_name = self.step.inputs[0].id
|
|
36
|
+
output_name = self.step.outputs[0].id
|
|
37
|
+
|
|
38
|
+
input_value = message.variables.get(input_name)
|
|
39
|
+
|
|
40
|
+
if not isinstance(input_value, list):
|
|
41
|
+
raise ValueError(
|
|
42
|
+
f"Explode step expected a list for input '{input_name}', "
|
|
43
|
+
f"but got: {type(input_value).__name__}"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
for item in input_value:
|
|
47
|
+
yield message.copy_with_variables({output_name: item})
|
|
48
|
+
except Exception as e:
|
|
49
|
+
yield message.copy_with_error(self.step.id, e)
|
|
@@ -161,5 +161,4 @@ class FieldExtractorExecutor(StepExecutor):
|
|
|
161
161
|
except Exception as e:
|
|
162
162
|
# Emit error event to stream so frontend can display it
|
|
163
163
|
await self.stream_emitter.error(str(e))
|
|
164
|
-
message.
|
|
165
|
-
yield message
|
|
164
|
+
yield message.copy_with_error(self.step.id, e)
|
|
@@ -6,6 +6,7 @@ import pandas as pd
|
|
|
6
6
|
|
|
7
7
|
from qtype.interpreter.base.batch_step_executor import BatchedStepExecutor
|
|
8
8
|
from qtype.interpreter.base.executor_context import ExecutorContext
|
|
9
|
+
from qtype.interpreter.executors.collect_executor import _find_common_ancestors
|
|
9
10
|
from qtype.interpreter.types import FlowMessage
|
|
10
11
|
from qtype.semantic.model import ConstantPath, FileWriter, Variable
|
|
11
12
|
|
|
@@ -59,12 +60,11 @@ class FileWriterExecutor(BatchedStepExecutor):
|
|
|
59
60
|
await self.stream_emitter.status(
|
|
60
61
|
f"Wrote {len(df)} records to {file_path}"
|
|
61
62
|
)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
)
|
|
63
|
+
# Identify the common ancestors to propagate
|
|
64
|
+
result_vars = _find_common_ancestors(batch)
|
|
65
|
+
result_vars[output_name] = file_path # type: ignore[index]
|
|
66
|
+
yield FlowMessage(session=batch[0].session, variables=result_vars)
|
|
67
|
+
|
|
68
68
|
else:
|
|
69
69
|
# Group messages by file path (path is a Variable in this branch)
|
|
70
70
|
if not isinstance(self.step.path, Variable):
|
|
@@ -101,10 +101,9 @@ class FileWriterExecutor(BatchedStepExecutor):
|
|
|
101
101
|
await self.stream_emitter.status(
|
|
102
102
|
f"Wrote {len(df_group)} records to {file_path}"
|
|
103
103
|
)
|
|
104
|
-
#
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
)
|
|
104
|
+
# Identify the common ancestors to propagate
|
|
105
|
+
result_vars = _find_common_ancestors(msg_list)
|
|
106
|
+
result_vars[output_name] = file_path # type: ignore[index]
|
|
107
|
+
yield FlowMessage(
|
|
108
|
+
session=msg_list[0].session, variables=result_vars
|
|
109
|
+
)
|
|
@@ -100,8 +100,7 @@ class IndexUpsertExecutor(BatchedStepExecutor):
|
|
|
100
100
|
|
|
101
101
|
# Mark all messages with the error and yield them
|
|
102
102
|
for message in batch:
|
|
103
|
-
message.
|
|
104
|
-
yield message
|
|
103
|
+
yield message.copy_with_error(self.step.id, e)
|
|
105
104
|
|
|
106
105
|
async def _upsert_to_vector_store(
|
|
107
106
|
self, batch: list[FlowMessage]
|
|
@@ -220,13 +219,13 @@ class IndexUpsertExecutor(BatchedStepExecutor):
|
|
|
220
219
|
doc_id = item["index"]["_id"]
|
|
221
220
|
message = message_by_id[doc_id]
|
|
222
221
|
if "error" in item.get("index", {}):
|
|
223
|
-
message.
|
|
222
|
+
yield message.copy_with_error(
|
|
224
223
|
self.step.id,
|
|
225
224
|
Exception(item["index"]["error"]),
|
|
226
225
|
)
|
|
227
226
|
else:
|
|
228
227
|
num_inserted += 1
|
|
229
|
-
|
|
228
|
+
yield message
|
|
230
229
|
await self.stream_emitter.status(
|
|
231
230
|
f"Upserted {num_inserted} items to index {self.step.index.name}, {len(batch) - num_inserted} errors occurred."
|
|
232
231
|
)
|
|
@@ -100,5 +100,4 @@ class InvokeEmbeddingExecutor(StepExecutor):
|
|
|
100
100
|
except Exception as e:
|
|
101
101
|
# Emit error event to stream so frontend can display it
|
|
102
102
|
await self.stream_emitter.error(str(e))
|
|
103
|
-
message.
|
|
104
|
-
yield message
|
|
103
|
+
yield message.copy_with_error(self.step.id, e)
|
|
@@ -354,5 +354,4 @@ class InvokeToolExecutor(StepExecutor, ToolExecutionMixin):
|
|
|
354
354
|
except Exception as e:
|
|
355
355
|
# Emit error event to stream so frontend can display it
|
|
356
356
|
await self.stream_emitter.error(str(e))
|
|
357
|
-
message.
|
|
358
|
-
yield message
|
|
357
|
+
yield message.copy_with_error(self.step.id, e)
|
|
@@ -86,8 +86,7 @@ class LLMInferenceExecutor(StepExecutor):
|
|
|
86
86
|
except Exception as e:
|
|
87
87
|
# Emit error event to stream so frontend can display it
|
|
88
88
|
await self.stream_emitter.error(str(e))
|
|
89
|
-
message.
|
|
90
|
-
yield message
|
|
89
|
+
yield message.copy_with_error(self.step.id, e)
|
|
91
90
|
|
|
92
91
|
async def _process_chat(
|
|
93
92
|
self,
|
|
@@ -74,5 +74,4 @@ class PromptTemplateExecutor(StepExecutor):
|
|
|
74
74
|
except Exception as e:
|
|
75
75
|
# Emit error event to stream so frontend can display it
|
|
76
76
|
await self.stream_emitter.error(str(e))
|
|
77
|
-
message.
|
|
78
|
-
yield message
|
|
77
|
+
yield message.copy_with_error(self.step.id, e)
|
|
@@ -102,5 +102,4 @@ class SQLSourceExecutor(StepExecutor):
|
|
|
102
102
|
# Emit error event to stream so frontend can display it
|
|
103
103
|
await self.stream_emitter.error(str(e))
|
|
104
104
|
# Set error on the message and yield it
|
|
105
|
-
message.
|
|
106
|
-
yield message
|
|
105
|
+
yield message.copy_with_error(self.step.id, e)
|
|
@@ -87,5 +87,4 @@ class VectorSearchExecutor(StepExecutor):
|
|
|
87
87
|
logger.error(f"Vector search failed: {e}", exc_info=True)
|
|
88
88
|
# Emit error event to stream so frontend can display it
|
|
89
89
|
await self.stream_emitter.error(str(e))
|
|
90
|
-
message.
|
|
91
|
-
yield message
|
|
90
|
+
yield message.copy_with_error(self.step.id, e)
|
qtype/interpreter/flow.py
CHANGED
|
@@ -56,12 +56,15 @@ async def run_flow(
|
|
|
56
56
|
# Extract or create ExecutorContext
|
|
57
57
|
exec_context = kwargs.pop("context", None)
|
|
58
58
|
if exec_context is None:
|
|
59
|
+
# Track if we created the context so we know to clean it up
|
|
60
|
+
should_clean_context = True
|
|
59
61
|
exec_context = ExecutorContext(
|
|
60
62
|
secret_manager=NoOpSecretManager(),
|
|
61
63
|
tracer=trace.get_tracer(__name__),
|
|
62
64
|
on_progress=progress_callback,
|
|
63
65
|
)
|
|
64
66
|
else:
|
|
67
|
+
should_clean_context = False
|
|
65
68
|
if exec_context.on_progress is None and show_progress:
|
|
66
69
|
exec_context.on_progress = progress_callback
|
|
67
70
|
|
|
@@ -177,8 +180,8 @@ async def run_flow(
|
|
|
177
180
|
span.set_status(Status(StatusCode.ERROR, f"Flow failed: {e}"))
|
|
178
181
|
raise
|
|
179
182
|
finally:
|
|
180
|
-
# Clean up context resources if we created it
|
|
181
|
-
if
|
|
183
|
+
# Clean up context resources ONLY if we created it
|
|
184
|
+
if should_clean_context:
|
|
182
185
|
exec_context.cleanup()
|
|
183
186
|
# Detach the context and end the span
|
|
184
187
|
# Only detach if we successfully attached (span was recording)
|
qtype/interpreter/types.py
CHANGED
|
@@ -292,6 +292,10 @@ class FlowMessage(BaseModel):
|
|
|
292
292
|
This object is the primary data structure passed between StepExecutors.
|
|
293
293
|
"""
|
|
294
294
|
|
|
295
|
+
model_config = ConfigDict(
|
|
296
|
+
frozen=True
|
|
297
|
+
) # Enforces immutability at the model level
|
|
298
|
+
|
|
295
299
|
session: Session
|
|
296
300
|
variables: Dict[str, Any] = Field(
|
|
297
301
|
default_factory=dict,
|
|
@@ -303,21 +307,25 @@ class FlowMessage(BaseModel):
|
|
|
303
307
|
"""Checks if this state has encountered an error."""
|
|
304
308
|
return self.error is not None
|
|
305
309
|
|
|
306
|
-
def
|
|
307
|
-
"""
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
310
|
+
def copy_with_error(self, step_id: str, exc: Exception) -> "FlowMessage":
|
|
311
|
+
"""Returns a copy of this state marked as failed."""
|
|
312
|
+
return self.model_copy(
|
|
313
|
+
update={
|
|
314
|
+
"error": StepError(
|
|
315
|
+
step_id=step_id,
|
|
316
|
+
error_message=str(exc),
|
|
317
|
+
exception_type=type(exc).__name__,
|
|
318
|
+
)
|
|
319
|
+
}
|
|
320
|
+
)
|
|
314
321
|
|
|
315
322
|
# It's useful to have copy-on-write style helpers
|
|
316
323
|
def copy_with_variables(
|
|
317
324
|
self, new_variables: dict[str, Any]
|
|
318
325
|
) -> "FlowMessage":
|
|
319
|
-
|
|
320
|
-
|
|
326
|
+
new_vars = self.variables.copy()
|
|
327
|
+
new_vars.update(new_variables)
|
|
328
|
+
new_state = self.model_copy(update={"variables": new_vars})
|
|
321
329
|
return new_state
|
|
322
330
|
|
|
323
331
|
|
qtype/interpreter/typing.py
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import uuid
|
|
4
|
-
from typing import Any, Type
|
|
4
|
+
from typing import Any, Type, get_origin
|
|
5
5
|
|
|
6
|
-
from pydantic import BaseModel, Field, create_model
|
|
6
|
+
from pydantic import BaseModel, Field, TypeAdapter, create_model
|
|
7
7
|
|
|
8
|
-
from qtype.dsl.model import PrimitiveTypeEnum
|
|
8
|
+
from qtype.dsl.model import ListType, PrimitiveTypeEnum
|
|
9
|
+
from qtype.dsl.model import Variable as DSLVariable
|
|
9
10
|
from qtype.dsl.types import PRIMITIVE_TO_PYTHON_TYPE
|
|
10
11
|
from qtype.interpreter.types import FlowMessage, Session
|
|
11
12
|
from qtype.semantic.model import Flow, Variable
|
|
12
13
|
|
|
13
14
|
|
|
14
|
-
def _get_variable_type(var:
|
|
15
|
+
def _get_variable_type(var: DSLVariable) -> tuple[Type, dict[str, Any]]:
|
|
15
16
|
"""Get the Python type and metadata for a variable.
|
|
16
17
|
|
|
17
18
|
Returns:
|
|
@@ -23,6 +24,13 @@ def _get_variable_type(var: Variable) -> tuple[Type, dict[str, Any]]:
|
|
|
23
24
|
if isinstance(var.type, PrimitiveTypeEnum):
|
|
24
25
|
python_type = PRIMITIVE_TO_PYTHON_TYPE.get(var.type, str)
|
|
25
26
|
field_metadata["qtype_type"] = var.type.value
|
|
27
|
+
elif isinstance(var.type, ListType):
|
|
28
|
+
python_type = list[
|
|
29
|
+
_get_variable_type(DSLVariable(id="", type=var.type.element_type))[
|
|
30
|
+
0
|
|
31
|
+
]
|
|
32
|
+
]
|
|
33
|
+
field_metadata["qtype_type"] = f"list[{var.type.element_type}]"
|
|
26
34
|
elif (
|
|
27
35
|
isinstance(var.type, type)
|
|
28
36
|
and issubclass(var.type, BaseModel)
|
|
@@ -40,6 +48,11 @@ def _fields_from_variables(variables: list[Variable]) -> dict:
|
|
|
40
48
|
fields = {}
|
|
41
49
|
for var in variables:
|
|
42
50
|
python_type, type_metadata = _get_variable_type(var)
|
|
51
|
+
|
|
52
|
+
# Add UI config to schema if present (OpenAPI x- extension pattern)
|
|
53
|
+
if var.ui is not None:
|
|
54
|
+
type_metadata["x-ui"] = var.ui
|
|
55
|
+
|
|
43
56
|
field_info = Field(
|
|
44
57
|
title=var.id,
|
|
45
58
|
json_schema_extra=type_metadata,
|
|
@@ -125,3 +138,39 @@ def flow_results_to_output_container(
|
|
|
125
138
|
outputs.append(output_instance.model_dump())
|
|
126
139
|
|
|
127
140
|
return output_container(outputs=outputs, errors=errors)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def instantiate_variable(variable: DSLVariable, value: Any) -> Any:
|
|
144
|
+
"""
|
|
145
|
+
Unified contract to ensure data matches its QType definition.
|
|
146
|
+
Handles CustomTypes, DomainTypes, and Primitives.
|
|
147
|
+
"""
|
|
148
|
+
target_type, _ = _get_variable_type(variable)
|
|
149
|
+
|
|
150
|
+
# 1. Handle the 'Parameterized Generic' Check (The isinstance fix)
|
|
151
|
+
# We check if target_type is a generic (like list[T]) vs a simple class.
|
|
152
|
+
origin = get_origin(target_type)
|
|
153
|
+
|
|
154
|
+
if origin is None:
|
|
155
|
+
# It's a simple type (int, RAGChunk, etc.)
|
|
156
|
+
if isinstance(value, target_type):
|
|
157
|
+
return value
|
|
158
|
+
else:
|
|
159
|
+
# It's a generic (list[str], etc.).
|
|
160
|
+
# We skip the identity check and let TypeAdapter handle it.
|
|
161
|
+
pass
|
|
162
|
+
|
|
163
|
+
# 2. Handle Pydantic Models (Custom/Domain Types)
|
|
164
|
+
if hasattr(target_type, "model_validate"):
|
|
165
|
+
return target_type.model_validate(value)
|
|
166
|
+
|
|
167
|
+
# 3. Handle Primitives & Complex Python Types (List, Optional, Union)
|
|
168
|
+
try:
|
|
169
|
+
# TypeAdapter is the "V2 way" to validate things that aren't
|
|
170
|
+
# full Pydantic models (like List[int] or Optional[str])
|
|
171
|
+
return TypeAdapter(target_type).validate_python(value)
|
|
172
|
+
except Exception:
|
|
173
|
+
# Fallback to your original manual cast if TypeAdapter is overkill
|
|
174
|
+
if isinstance(target_type, type):
|
|
175
|
+
return target_type(value)
|
|
176
|
+
raise ValueError(f"Unsupported target type: {target_type}")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--YR7FgQl_Kpwjcqho0ogG4--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="./_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="./_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="./_next/static/css/7906798f56607e8f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="./_next/static/chunks/webpack-bd0771cb30dd12fa.js"/><script src="./_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="./_next/static/chunks/255-268261a96ffee0a9.js" async=""></script><script src="./_next/static/chunks/main-app-a5425c8070223ccc.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>QType</title><meta name="description" content="DSL for rapid prototyping of AI applications"/><link rel="icon" href="/ui/icon.png?5369ea17987f04b5" type="image/png" sizes="907x907"/><script src="./_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_c57559 __variable_152ec0 antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="./_next/static/chunks/webpack-bd0771cb30dd12fa.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[8924,[],\"\"]\n4:I[4431,[],\"OutletBoundary\"]\n6:I[5278,[],\"AsyncMetadataOutlet\"]\n8:I[4431,[],\"ViewportBoundary\"]\na:I[4431,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[7150,[],\"\"]\n:HL[\"./_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"./_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"./_next/static/css/7906798f56607e8f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"YR7FgQl_Kpwjcqho0ogG4\",\"p\":\".\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"./_next/static/css/7906798f56607e8f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_c57559 __variable_152ec0 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$L5\",[\"$\",\"$L6\",null,{\"promise\":\"$@7\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$La\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"fallback\":null,\"children\":\"$Lc\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n5:null\n"])</script><script>self.__next_f.push([1,"e:I[622,[],\"IconMark\"]\n7:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"QType\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"DSL for rapid prototyping of AI applications\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/ui/icon.png?5369ea17987f04b5\",\"type\":\"image/png\",\"sizes\":\"907x907\"}],[\"$\",\"$Le\",\"3\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"c:\"$7:metadata\"\n"])</script></body></html>
|
qtype/interpreter/ui/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--YR7FgQl_Kpwjcqho0ogG4--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="./_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="./_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="./_next/static/css/7906798f56607e8f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="./_next/static/chunks/webpack-bd0771cb30dd12fa.js"/><script src="./_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="./_next/static/chunks/255-268261a96ffee0a9.js" async=""></script><script src="./_next/static/chunks/main-app-a5425c8070223ccc.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>QType</title><meta name="description" content="DSL for rapid prototyping of AI applications"/><link rel="icon" href="/ui/icon.png?5369ea17987f04b5" type="image/png" sizes="907x907"/><script src="./_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_c57559 __variable_152ec0 antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="./_next/static/chunks/webpack-bd0771cb30dd12fa.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[8924,[],\"\"]\n4:I[4431,[],\"OutletBoundary\"]\n6:I[5278,[],\"AsyncMetadataOutlet\"]\n8:I[4431,[],\"ViewportBoundary\"]\na:I[4431,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[7150,[],\"\"]\n:HL[\"./_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"./_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"./_next/static/css/7906798f56607e8f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"YR7FgQl_Kpwjcqho0ogG4\",\"p\":\".\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"./_next/static/css/7906798f56607e8f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_c57559 __variable_152ec0 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$L5\",[\"$\",\"$L6\",null,{\"promise\":\"$@7\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$La\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"fallback\":null,\"children\":\"$Lc\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n5:null\n"])</script><script>self.__next_f.push([1,"e:I[622,[],\"IconMark\"]\n7:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"QType\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"DSL for rapid prototyping of AI applications\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/ui/icon.png?5369ea17987f04b5\",\"type\":\"image/png\",\"sizes\":\"907x907\"}],[\"$\",\"$Le\",\"3\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"c:\"$7:metadata\"\n"])</script></body></html>
|
qtype/interpreter/ui/_next/static/{20HoJN6otZ_LyHLHpCPE6 → YR7FgQl_Kpwjcqho0ogG4}/_buildManifest.js
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:3,errorRate:1e-4,numBits:58,numHashes:14,bitArray:[1,1,0,e,0,e,e,r,r,e,r,e,r,e,r,e,r,r,e,r,r,r,e,e,r,e,r,r,e,r,e,e,e,e,r,e,e,r,e,e,r,r,e,r,e,r,r,e,e,e,e,e,e,e,r,r,e,e]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-
|
|
1
|
+
self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:3,errorRate:1e-4,numBits:58,numHashes:14,bitArray:[1,1,0,e,0,e,e,r,r,e,r,e,r,e,r,e,r,r,e,r,r,r,e,e,r,e,r,r,e,r,e,e,e,e,r,e,e,r,e,e,r,r,e,r,e,r,r,e,e,e,e,e,e,e,r,r,e,e]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-cb2a52f75f2162e2.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|