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.
Files changed (75) hide show
  1. qtype/application/converters/tools_from_module.py +15 -0
  2. qtype/base/types.py +1 -9
  3. qtype/base/ui_shapes.py +38 -0
  4. qtype/commands/convert.py +3 -0
  5. qtype/dsl/model.py +71 -22
  6. qtype/interpreter/base/base_step_executor.py +10 -10
  7. qtype/interpreter/base/factory.py +6 -0
  8. qtype/interpreter/base/step_cache.py +3 -3
  9. qtype/interpreter/conversions.py +7 -4
  10. qtype/interpreter/executors/agent_executor.py +1 -2
  11. qtype/interpreter/executors/bedrock_reranker_executor.py +1 -2
  12. qtype/interpreter/executors/collect_executor.py +76 -0
  13. qtype/interpreter/executors/construct_executor.py +68 -0
  14. qtype/interpreter/executors/decoder_executor.py +1 -2
  15. qtype/interpreter/executors/doc_to_text_executor.py +1 -2
  16. qtype/interpreter/executors/document_embedder_executor.py +1 -2
  17. qtype/interpreter/executors/document_search_executor.py +1 -2
  18. qtype/interpreter/executors/document_source_executor.py +1 -2
  19. qtype/interpreter/executors/document_splitter_executor.py +5 -3
  20. qtype/interpreter/executors/echo_executor.py +1 -2
  21. qtype/interpreter/executors/explode_executor.py +49 -0
  22. qtype/interpreter/executors/field_extractor_executor.py +1 -2
  23. qtype/interpreter/executors/file_writer_executor.py +12 -13
  24. qtype/interpreter/executors/index_upsert_executor.py +3 -4
  25. qtype/interpreter/executors/invoke_embedding_executor.py +1 -2
  26. qtype/interpreter/executors/invoke_tool_executor.py +1 -2
  27. qtype/interpreter/executors/llm_inference_executor.py +1 -2
  28. qtype/interpreter/executors/prompt_template_executor.py +1 -2
  29. qtype/interpreter/executors/sql_source_executor.py +1 -2
  30. qtype/interpreter/executors/vector_search_executor.py +1 -2
  31. qtype/interpreter/flow.py +5 -2
  32. qtype/interpreter/types.py +18 -10
  33. qtype/interpreter/typing.py +53 -4
  34. qtype/interpreter/ui/404/index.html +1 -1
  35. qtype/interpreter/ui/404.html +1 -1
  36. qtype/interpreter/ui/_next/static/{20HoJN6otZ_LyHLHpCPE6 → YR7FgQl_Kpwjcqho0ogG4}/_buildManifest.js +1 -1
  37. qtype/interpreter/ui/_next/static/chunks/230-e22a519211de9624.js +33 -0
  38. qtype/interpreter/ui/_next/static/chunks/255-268261a96ffee0a9.js +1 -0
  39. qtype/interpreter/ui/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +1 -0
  40. qtype/interpreter/ui/_next/static/chunks/app/_not-found/page-8f0e059659d8afd7.js +1 -0
  41. qtype/interpreter/ui/_next/static/chunks/app/layout-1615bcffa82ff884.js +1 -0
  42. qtype/interpreter/ui/_next/static/chunks/app/page-bfbb263eb356c6eb.js +1 -0
  43. qtype/interpreter/ui/_next/static/chunks/ba12c10f-8d3b3efcaddd4728.js +1 -0
  44. qtype/interpreter/ui/_next/static/chunks/framework-d7de93249215fb06.js +1 -0
  45. qtype/interpreter/ui/_next/static/chunks/main-090112344d9a19ce.js +1 -0
  46. qtype/interpreter/ui/_next/static/chunks/main-app-a5425c8070223ccc.js +1 -0
  47. qtype/interpreter/ui/_next/static/chunks/pages/{_app-0a0020ddd67f79cf.js → _app-7d307437aca18ad4.js} +1 -1
  48. qtype/interpreter/ui/_next/static/chunks/pages/{_error-03529f2c21436739.js → _error-cb2a52f75f2162e2.js} +1 -1
  49. qtype/interpreter/ui/_next/static/chunks/webpack-bd0771cb30dd12fa.js +1 -0
  50. qtype/interpreter/ui/_next/static/css/7906798f56607e8f.css +3 -0
  51. qtype/interpreter/ui/assets/video-sample.mp4 +0 -0
  52. qtype/interpreter/ui/index.html +1 -1
  53. qtype/interpreter/ui/index.txt +12 -12
  54. qtype/semantic/checker.py +83 -0
  55. qtype/semantic/generate.py +0 -1
  56. qtype/semantic/model.py +25 -18
  57. {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/METADATA +1 -1
  58. {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/RECORD +63 -58
  59. qtype/interpreter/ui/_next/static/chunks/434-b2112d19f25c44ff.js +0 -36
  60. qtype/interpreter/ui/_next/static/chunks/4bd1b696-cf72ae8a39fa05aa.js +0 -1
  61. qtype/interpreter/ui/_next/static/chunks/964-2b041321a01cbf56.js +0 -1
  62. qtype/interpreter/ui/_next/static/chunks/app/_not-found/page-e110d2a9d0a83d82.js +0 -1
  63. qtype/interpreter/ui/_next/static/chunks/app/layout-a05273ead5de2c41.js +0 -1
  64. qtype/interpreter/ui/_next/static/chunks/app/page-8c67d16ac90d23cb.js +0 -1
  65. qtype/interpreter/ui/_next/static/chunks/ba12c10f-546f2714ff8abc66.js +0 -1
  66. qtype/interpreter/ui/_next/static/chunks/framework-7c95b8e5103c9e90.js +0 -1
  67. qtype/interpreter/ui/_next/static/chunks/main-app-6fc6346bc8f7f163.js +0 -1
  68. qtype/interpreter/ui/_next/static/chunks/main-e26b9cb206da2cac.js +0 -1
  69. qtype/interpreter/ui/_next/static/chunks/webpack-08642e441b39b6c2.js +0 -1
  70. qtype/interpreter/ui/_next/static/css/8a8d1269e362fef7.css +0 -3
  71. /qtype/interpreter/ui/_next/static/{20HoJN6otZ_LyHLHpCPE6 → YR7FgQl_Kpwjcqho0ogG4}/_ssgManifest.js +0 -0
  72. {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/WHEEL +0 -0
  73. {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/entry_points.txt +0 -0
  74. {qtype-0.1.7.dist-info → qtype-0.1.11.dist-info}/licenses/LICENSE +0 -0
  75. {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.set_error(self.step.id, e)
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
- for msg in batch:
63
- yield (
64
- msg
65
- if not output_name
66
- else msg.copy_with_variables({output_name: file_path})
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
- # Re-yield the original messages for this group
105
- for msg in batch:
106
- yield (
107
- msg
108
- if not output_name
109
- else msg.copy_with_variables({output_name: file_path})
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.set_error(self.step.id, e)
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.set_error(
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
- yield message
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.set_error(self.step.id, e)
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.set_error(self.step.id, e)
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.set_error(self.step.id, e)
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.set_error(self.step.id, e)
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.set_error(self.step.id, e)
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.set_error(self.step.id, e)
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 kwargs.get("context") is None:
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)
@@ -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 set_error(self, step_id: str, exc: Exception):
307
- """Marks this state as failed, capturing error details."""
308
- if not self.is_failed(): # Only capture the first error
309
- self.error = StepError(
310
- step_id=step_id,
311
- error_message=str(exc),
312
- exception_type=type(exc).__name__,
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
- new_state = self.model_copy(deep=True)
320
- new_state.variables.update(new_variables)
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
 
@@ -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: Variable) -> tuple[Type, dict[str, Any]]:
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><!--20HoJN6otZ_LyHLHpCPE6--><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/8a8d1269e362fef7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="./_next/static/chunks/webpack-08642e441b39b6c2.js"/><script src="./_next/static/chunks/4bd1b696-cf72ae8a39fa05aa.js" async=""></script><script src="./_next/static/chunks/964-2b041321a01cbf56.js" async=""></script><script src="./_next/static/chunks/main-app-6fc6346bc8f7f163.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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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-08642e441b39b6c2.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[7555,[],\"\"]\n3:I[1295,[],\"\"]\n4:I[9665,[],\"OutletBoundary\"]\n6:I[4911,[],\"AsyncMetadataOutlet\"]\n8:I[9665,[],\"ViewportBoundary\"]\na:I[9665,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[8393,[],\"\"]\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/8a8d1269e362fef7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"20HoJN6otZ_LyHLHpCPE6\",\"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/8a8d1269e362fef7.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[8175,[],\"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>
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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>
@@ -1 +1 @@
1
- <!DOCTYPE html><!--20HoJN6otZ_LyHLHpCPE6--><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/8a8d1269e362fef7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="./_next/static/chunks/webpack-08642e441b39b6c2.js"/><script src="./_next/static/chunks/4bd1b696-cf72ae8a39fa05aa.js" async=""></script><script src="./_next/static/chunks/964-2b041321a01cbf56.js" async=""></script><script src="./_next/static/chunks/main-app-6fc6346bc8f7f163.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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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-08642e441b39b6c2.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[7555,[],\"\"]\n3:I[1295,[],\"\"]\n4:I[9665,[],\"OutletBoundary\"]\n6:I[4911,[],\"AsyncMetadataOutlet\"]\n8:I[9665,[],\"ViewportBoundary\"]\na:I[9665,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[8393,[],\"\"]\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/8a8d1269e362fef7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"20HoJN6otZ_LyHLHpCPE6\",\"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/8a8d1269e362fef7.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[8175,[],\"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>
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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>
@@ -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-03529f2c21436739.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
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();