qtype 0.1.1__py3-none-any.whl → 0.1.2__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/facade.py +14 -15
- qtype/cli.py +1 -1
- qtype/commands/generate.py +1 -1
- qtype/commands/run.py +7 -3
- qtype/dsl/domain_types.py +24 -3
- qtype/dsl/model.py +56 -3
- qtype/interpreter/base/executor_context.py +18 -1
- qtype/interpreter/base/factory.py +33 -66
- qtype/interpreter/conversions.py +15 -6
- qtype/interpreter/converters.py +14 -12
- qtype/interpreter/executors/bedrock_reranker_executor.py +195 -0
- qtype/interpreter/executors/document_search_executor.py +37 -46
- qtype/interpreter/executors/field_extractor_executor.py +10 -5
- qtype/interpreter/executors/index_upsert_executor.py +114 -110
- qtype/interpreter/flow.py +35 -32
- qtype/semantic/checker.py +79 -19
- qtype/semantic/model.py +43 -3
- {qtype-0.1.1.dist-info → qtype-0.1.2.dist-info}/METADATA +12 -11
- {qtype-0.1.1.dist-info → qtype-0.1.2.dist-info}/RECORD +23 -22
- {qtype-0.1.1.dist-info → qtype-0.1.2.dist-info}/WHEEL +0 -0
- {qtype-0.1.1.dist-info → qtype-0.1.2.dist-info}/entry_points.txt +0 -0
- {qtype-0.1.1.dist-info → qtype-0.1.2.dist-info}/licenses/LICENSE +0 -0
- {qtype-0.1.1.dist-info → qtype-0.1.2.dist-info}/top_level.txt +0 -0
qtype/interpreter/flow.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import json
|
|
3
4
|
import logging
|
|
5
|
+
from collections.abc import AsyncIterator
|
|
4
6
|
|
|
5
7
|
from openinference.semconv.trace import (
|
|
6
8
|
OpenInferenceSpanKindValues,
|
|
@@ -21,7 +23,7 @@ logger = logging.getLogger(__name__)
|
|
|
21
23
|
|
|
22
24
|
async def run_flow(
|
|
23
25
|
flow: Flow,
|
|
24
|
-
initial: list[FlowMessage] | FlowMessage,
|
|
26
|
+
initial: list[FlowMessage] | AsyncIterator[FlowMessage] | FlowMessage,
|
|
25
27
|
show_progress: bool = False,
|
|
26
28
|
**kwargs,
|
|
27
29
|
) -> list[FlowMessage]:
|
|
@@ -77,38 +79,38 @@ async def run_flow(
|
|
|
77
79
|
# 1. Get the execution plan is just the steps in order
|
|
78
80
|
execution_plan = flow.steps
|
|
79
81
|
|
|
80
|
-
# 2.
|
|
81
|
-
if
|
|
82
|
+
# 2. Convert the initial input to an iterable of some kind. Record telemetry if possible.
|
|
83
|
+
if isinstance(initial, FlowMessage):
|
|
84
|
+
span.set_attribute("flow.input_count", 1)
|
|
85
|
+
input_vars = {k: v for k, v in initial.variables.items()}
|
|
86
|
+
span.set_attribute(
|
|
87
|
+
SpanAttributes.INPUT_VALUE,
|
|
88
|
+
json.dumps(input_vars, default=str),
|
|
89
|
+
)
|
|
90
|
+
span.set_attribute(
|
|
91
|
+
SpanAttributes.INPUT_MIME_TYPE, "application/json"
|
|
92
|
+
)
|
|
82
93
|
initial = [initial]
|
|
83
94
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
# Record input variables for observability
|
|
87
|
-
if initial:
|
|
88
|
-
import json
|
|
89
|
-
|
|
90
|
-
try:
|
|
91
|
-
input_vars = {
|
|
92
|
-
k: v for msg in initial for k, v in msg.variables.items()
|
|
93
|
-
}
|
|
94
|
-
span.set_attribute(
|
|
95
|
-
SpanAttributes.INPUT_VALUE,
|
|
96
|
-
json.dumps(input_vars, default=str),
|
|
97
|
-
)
|
|
98
|
-
span.set_attribute(
|
|
99
|
-
SpanAttributes.INPUT_MIME_TYPE, "application/json"
|
|
100
|
-
)
|
|
101
|
-
except Exception:
|
|
102
|
-
# If serialization fails, skip it
|
|
103
|
-
pass
|
|
95
|
+
if isinstance(initial, list):
|
|
96
|
+
span.set_attribute("flow.input_count", len(initial))
|
|
104
97
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
98
|
+
# convert to async iterator
|
|
99
|
+
async def list_stream():
|
|
100
|
+
for message in initial:
|
|
101
|
+
yield message
|
|
108
102
|
|
|
109
|
-
|
|
103
|
+
current_stream = list_stream()
|
|
104
|
+
elif isinstance(initial, AsyncIterator):
|
|
105
|
+
# We can't know the count ahead of time
|
|
106
|
+
current_stream = initial
|
|
107
|
+
else:
|
|
108
|
+
raise ValueError(
|
|
109
|
+
"Initial input must be a FlowMessage, list of FlowMessages, "
|
|
110
|
+
"or AsyncIterator of FlowMessages"
|
|
111
|
+
)
|
|
110
112
|
|
|
111
|
-
#
|
|
113
|
+
# 4. Chain executors together in the main loop
|
|
112
114
|
for step in execution_plan:
|
|
113
115
|
executor = factory.create_executor(step, exec_context, **kwargs)
|
|
114
116
|
output_stream = executor.execute(
|
|
@@ -116,7 +118,7 @@ async def run_flow(
|
|
|
116
118
|
)
|
|
117
119
|
current_stream = output_stream
|
|
118
120
|
|
|
119
|
-
#
|
|
121
|
+
# 5. Collect the final results from the last stream
|
|
120
122
|
final_results = [state async for state in current_stream]
|
|
121
123
|
|
|
122
124
|
# Close the progress bars if any
|
|
@@ -128,9 +130,7 @@ async def run_flow(
|
|
|
128
130
|
span.set_attribute("flow.error_count", error_count)
|
|
129
131
|
|
|
130
132
|
# Record output variables for observability
|
|
131
|
-
if final_results:
|
|
132
|
-
import json
|
|
133
|
-
|
|
133
|
+
if len(final_results) == 1 and span.is_recording():
|
|
134
134
|
try:
|
|
135
135
|
output_vars = {
|
|
136
136
|
k: v
|
|
@@ -167,6 +167,9 @@ async def run_flow(
|
|
|
167
167
|
span.set_status(Status(StatusCode.ERROR, f"Flow failed: {e}"))
|
|
168
168
|
raise
|
|
169
169
|
finally:
|
|
170
|
+
# Clean up context resources if we created it
|
|
171
|
+
if kwargs.get("context") is None:
|
|
172
|
+
exec_context.cleanup()
|
|
170
173
|
# Detach the context and end the span
|
|
171
174
|
# Only detach if we successfully attached (span was recording)
|
|
172
175
|
if token is not None:
|
qtype/semantic/checker.py
CHANGED
|
@@ -10,6 +10,7 @@ from qtype.dsl.model import AWSAuthProvider
|
|
|
10
10
|
from qtype.semantic.model import (
|
|
11
11
|
Agent,
|
|
12
12
|
Application,
|
|
13
|
+
BedrockReranker,
|
|
13
14
|
Decoder,
|
|
14
15
|
DocToTextConverter,
|
|
15
16
|
DocumentEmbedder,
|
|
@@ -20,11 +21,13 @@ from qtype.semantic.model import (
|
|
|
20
21
|
FieldExtractor,
|
|
21
22
|
Flow,
|
|
22
23
|
IndexUpsert,
|
|
24
|
+
ListType,
|
|
23
25
|
LLMInference,
|
|
24
26
|
PromptTemplate,
|
|
25
27
|
SecretReference,
|
|
26
28
|
SQLSource,
|
|
27
29
|
Step,
|
|
30
|
+
VectorIndex,
|
|
28
31
|
VectorSearch,
|
|
29
32
|
)
|
|
30
33
|
|
|
@@ -323,21 +326,29 @@ def _validate_document_embedder(step: DocumentEmbedder) -> None:
|
|
|
323
326
|
|
|
324
327
|
|
|
325
328
|
def _validate_index_upsert(step: IndexUpsert) -> None:
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
(
|
|
332
|
-
|
|
333
|
-
|
|
329
|
+
if isinstance(step.index, VectorIndex):
|
|
330
|
+
# Validate IndexUpsert has exactly one input of type RAGChunk or RAGDocument.
|
|
331
|
+
_validate_exact_input_count(step, 1)
|
|
332
|
+
input_type = step.inputs[0].type
|
|
333
|
+
if input_type not in (RAGChunk, RAGDocument):
|
|
334
|
+
raise QTypeSemanticError(
|
|
335
|
+
(
|
|
336
|
+
f"IndexUpsert step '{step.id}' on Vector Index '{step.index.id}' input must be of type "
|
|
337
|
+
f"'RAGChunk' or 'RAGDocument', found '{input_type}'."
|
|
338
|
+
)
|
|
339
|
+
)
|
|
340
|
+
else:
|
|
341
|
+
# Document index upsert just stores all variables in the message
|
|
342
|
+
if len(step.inputs) < 1:
|
|
343
|
+
raise QTypeSemanticError(
|
|
344
|
+
(
|
|
345
|
+
f"IndexUpsert step '{step.id}' on Document Index '{step.index.id}' must have at least one input."
|
|
346
|
+
)
|
|
334
347
|
)
|
|
335
|
-
)
|
|
336
348
|
|
|
337
349
|
|
|
338
350
|
def _validate_vector_search(step: VectorSearch) -> None:
|
|
339
351
|
"""Validate VectorSearch has exactly one text input and one list[RAGSearchResult] output."""
|
|
340
|
-
from qtype.dsl.model import ListType
|
|
341
352
|
|
|
342
353
|
_validate_exact_input_count(step, 1, PrimitiveTypeEnum.text)
|
|
343
354
|
_validate_exact_output_count(
|
|
@@ -347,7 +358,28 @@ def _validate_vector_search(step: VectorSearch) -> None:
|
|
|
347
358
|
|
|
348
359
|
def _validate_document_search(step: DocumentSearch) -> None:
|
|
349
360
|
"""Validate DocumentSearch has exactly one text input for the query."""
|
|
361
|
+
from qtype.dsl.model import ListType
|
|
362
|
+
|
|
350
363
|
_validate_exact_input_count(step, 1, PrimitiveTypeEnum.text)
|
|
364
|
+
_validate_exact_output_count(
|
|
365
|
+
step, 1, ListType(element_type="SearchResult")
|
|
366
|
+
)
|
|
367
|
+
# TODO: Restore below when ready to decompose into RAG search results for hybrid search
|
|
368
|
+
# actual_type = step.outputs[0].type
|
|
369
|
+
# acceptable_types = set(
|
|
370
|
+
# [
|
|
371
|
+
# ListType(element_type="RAGSearchResult"),
|
|
372
|
+
# ListType(element_type="SearchResult"),
|
|
373
|
+
# ]
|
|
374
|
+
# )
|
|
375
|
+
# if actual_type not in acceptable_types:
|
|
376
|
+
# raise QTypeSemanticError(
|
|
377
|
+
# (
|
|
378
|
+
# f"DocumentSearch step '{step.id}' output must be of type "
|
|
379
|
+
# f"'list[RAGSearchResult]' or 'list[SearchResult]', found "
|
|
380
|
+
# f"'{actual_type}'."
|
|
381
|
+
# )
|
|
382
|
+
# )
|
|
351
383
|
|
|
352
384
|
|
|
353
385
|
def _validate_flow(flow: Flow) -> None:
|
|
@@ -523,25 +555,53 @@ def _validate_application(application: Application) -> None:
|
|
|
523
555
|
)
|
|
524
556
|
|
|
525
557
|
|
|
558
|
+
def _validate_bedrock_reranker(reranker: BedrockReranker) -> None:
|
|
559
|
+
"""Validate BedrockReranker configuration."""
|
|
560
|
+
_validate_exact_output_count(
|
|
561
|
+
reranker, 1, ListType(element_type="SearchResult")
|
|
562
|
+
)
|
|
563
|
+
_validate_exact_input_count(reranker, 2)
|
|
564
|
+
# Confirm at least one input is text (the query)
|
|
565
|
+
input_types = [inp.type for inp in reranker.inputs] # type: ignore
|
|
566
|
+
if PrimitiveTypeEnum.text not in input_types:
|
|
567
|
+
raise QTypeSemanticError(
|
|
568
|
+
(
|
|
569
|
+
f"BedrockReranker step '{reranker.id}' must have at least one "
|
|
570
|
+
f"input of type 'text' for the query, found input types: "
|
|
571
|
+
f"{input_types}."
|
|
572
|
+
)
|
|
573
|
+
)
|
|
574
|
+
# Confirm at least one input is list[SearchResult] (the results to rerank)
|
|
575
|
+
if ListType(element_type="SearchResult") not in input_types:
|
|
576
|
+
raise QTypeSemanticError(
|
|
577
|
+
(
|
|
578
|
+
f"BedrockReranker step '{reranker.id}' must have at least one "
|
|
579
|
+
f"input of type 'list[SearchResult]' for the results to rerank, "
|
|
580
|
+
f"found input types: {input_types}."
|
|
581
|
+
)
|
|
582
|
+
)
|
|
583
|
+
|
|
584
|
+
|
|
526
585
|
# Mapping of types to their validation functions
|
|
527
586
|
_VALIDATORS = {
|
|
528
587
|
Agent: _validate_agent,
|
|
529
588
|
Application: _validate_application,
|
|
530
|
-
PromptTemplate: _validate_prompt_template,
|
|
531
589
|
AWSAuthProvider: _validate_aws_auth,
|
|
532
|
-
|
|
590
|
+
BedrockReranker: _validate_bedrock_reranker,
|
|
533
591
|
Decoder: _validate_decoder,
|
|
534
|
-
Echo: _validate_echo,
|
|
535
|
-
FieldExtractor: _validate_field_extractor,
|
|
536
|
-
SQLSource: _validate_sql_source,
|
|
537
|
-
DocumentSource: _validate_document_source,
|
|
538
592
|
DocToTextConverter: _validate_doc_to_text_converter,
|
|
539
|
-
DocumentSplitter: _validate_document_splitter,
|
|
540
593
|
DocumentEmbedder: _validate_document_embedder,
|
|
541
|
-
IndexUpsert: _validate_index_upsert,
|
|
542
|
-
VectorSearch: _validate_vector_search,
|
|
543
594
|
DocumentSearch: _validate_document_search,
|
|
595
|
+
DocumentSource: _validate_document_source,
|
|
596
|
+
DocumentSplitter: _validate_document_splitter,
|
|
597
|
+
Echo: _validate_echo,
|
|
598
|
+
FieldExtractor: _validate_field_extractor,
|
|
544
599
|
Flow: _validate_flow,
|
|
600
|
+
IndexUpsert: _validate_index_upsert,
|
|
601
|
+
LLMInference: _validate_llm_inference,
|
|
602
|
+
PromptTemplate: _validate_prompt_template,
|
|
603
|
+
SQLSource: _validate_sql_source,
|
|
604
|
+
VectorSearch: _validate_vector_search,
|
|
545
605
|
}
|
|
546
606
|
|
|
547
607
|
|
qtype/semantic/model.py
CHANGED
|
@@ -558,6 +558,10 @@ class FieldExtractor(Step):
|
|
|
558
558
|
...,
|
|
559
559
|
description="JSONPath expression to extract data from the input. Uses jsonpath-ng syntax.",
|
|
560
560
|
)
|
|
561
|
+
fail_on_missing: bool = Field(
|
|
562
|
+
True,
|
|
563
|
+
description="Whether to raise an error if the JSONPath matches no data. If False, returns None.",
|
|
564
|
+
)
|
|
561
565
|
|
|
562
566
|
|
|
563
567
|
class InvokeEmbedding(Step, ConcurrentStepMixin):
|
|
@@ -627,6 +631,12 @@ class PromptTemplate(Step):
|
|
|
627
631
|
)
|
|
628
632
|
|
|
629
633
|
|
|
634
|
+
class Reranker(Step):
|
|
635
|
+
"""Reranks a list of documents based on relevance to a query using an LLM."""
|
|
636
|
+
|
|
637
|
+
type: Literal["Reranker"] = Field("Reranker")
|
|
638
|
+
|
|
639
|
+
|
|
630
640
|
class Search(Step):
|
|
631
641
|
"""Base class for search operations against indexes."""
|
|
632
642
|
|
|
@@ -637,6 +647,10 @@ class Search(Step):
|
|
|
637
647
|
index: Index = Field(
|
|
638
648
|
..., description="Index to search against (object or ID reference)."
|
|
639
649
|
)
|
|
650
|
+
default_top_k: int | None = Field(
|
|
651
|
+
10,
|
|
652
|
+
description="Number of top results to retrieve if not provided in the inputs.",
|
|
653
|
+
)
|
|
640
654
|
|
|
641
655
|
|
|
642
656
|
class Source(Step):
|
|
@@ -663,6 +677,10 @@ class DocumentIndex(Index):
|
|
|
663
677
|
...,
|
|
664
678
|
description="URL endpoint for the search cluster (e.g., https://my-cluster.es.amazonaws.com).",
|
|
665
679
|
)
|
|
680
|
+
id_field: str | None = Field(
|
|
681
|
+
None,
|
|
682
|
+
description="Field name to use as document ID. If not specified, auto-detects from: _id, id, doc_id, document_id, or uuid. If all are missing, a UUID is generated.",
|
|
683
|
+
)
|
|
666
684
|
|
|
667
685
|
|
|
668
686
|
class VectorIndex(Index):
|
|
@@ -699,19 +717,41 @@ class Agent(LLMInference):
|
|
|
699
717
|
)
|
|
700
718
|
|
|
701
719
|
|
|
720
|
+
class BedrockReranker(Reranker, ConcurrentStepMixin):
|
|
721
|
+
"""Reranks documents using an AWS Bedrock model."""
|
|
722
|
+
|
|
723
|
+
type: Literal["BedrockReranker"] = Field("BedrockReranker")
|
|
724
|
+
auth: AWSAuthProvider | None = Field(
|
|
725
|
+
None, description="AWS authorization provider for Bedrock access."
|
|
726
|
+
)
|
|
727
|
+
model_id: str = Field(
|
|
728
|
+
...,
|
|
729
|
+
description="Bedrock model ID to use for reranking. See https://docs.aws.amazon.com/bedrock/latest/userguide/rerank-supported.html",
|
|
730
|
+
)
|
|
731
|
+
num_results: int | None = Field(
|
|
732
|
+
None, description="Return this many results."
|
|
733
|
+
)
|
|
734
|
+
|
|
735
|
+
|
|
702
736
|
class DocumentSearch(Search, ConcurrentStepMixin):
|
|
703
737
|
"""Performs document search against a document index."""
|
|
704
738
|
|
|
705
739
|
type: Literal["DocumentSearch"] = Field("DocumentSearch")
|
|
740
|
+
index: DocumentIndex = Field(
|
|
741
|
+
..., description="Index to search against (object or ID reference)."
|
|
742
|
+
)
|
|
743
|
+
query_args: dict[str, Any] = Field(
|
|
744
|
+
{"type": "best_fields", "fields": ["*"]},
|
|
745
|
+
description="The arguments (other than 'query') to specify to the query shape (see https://docs.opensearch.org/latest/query-dsl/full-text/multi-match/).",
|
|
746
|
+
)
|
|
706
747
|
|
|
707
748
|
|
|
708
749
|
class VectorSearch(Search, BatchableStepMixin):
|
|
709
750
|
"""Performs vector similarity search against a vector index."""
|
|
710
751
|
|
|
711
752
|
type: Literal["VectorSearch"] = Field("VectorSearch")
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
description="Number of top results to retrieve if not provided in the inputs.",
|
|
753
|
+
index: VectorIndex = Field(
|
|
754
|
+
..., description="Index to search against (object or ID reference)."
|
|
715
755
|
)
|
|
716
756
|
|
|
717
757
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qtype
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
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
|
|
@@ -23,16 +23,26 @@ Provides-Extra: interpreter
|
|
|
23
23
|
Requires-Dist: aiostream>=0.7.1; extra == "interpreter"
|
|
24
24
|
Requires-Dist: arize-phoenix-otel>=0.12.1; extra == "interpreter"
|
|
25
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"
|
|
26
28
|
Requires-Dist: docling>=2.55.1; extra == "interpreter"
|
|
27
|
-
Requires-Dist:
|
|
29
|
+
Requires-Dist: docx2txt>=0.9; extra == "interpreter"
|
|
28
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"
|
|
29
33
|
Requires-Dist: llama-index-embeddings-bedrock>=0.5.2; extra == "interpreter"
|
|
30
34
|
Requires-Dist: llama-index-embeddings-openai>=0.3.1; extra == "interpreter"
|
|
31
35
|
Requires-Dist: llama-index-llms-bedrock-converse>=0.10.5; extra == "interpreter"
|
|
32
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"
|
|
33
41
|
Requires-Dist: llama-index>=0.12.45; extra == "interpreter"
|
|
34
42
|
Requires-Dist: openinference-instrumentation-llama-index>=4.3.4; extra == "interpreter"
|
|
35
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"
|
|
36
46
|
Requires-Dist: pandas>=2.2.3; extra == "interpreter"
|
|
37
47
|
Requires-Dist: psycopg2-binary>=2.9.10; extra == "interpreter"
|
|
38
48
|
Requires-Dist: pyarrow>=21.0.0; extra == "interpreter"
|
|
@@ -41,15 +51,6 @@ Requires-Dist: python-magic>=0.4.27; extra == "interpreter"
|
|
|
41
51
|
Requires-Dist: s3fs>=2025.7.0; extra == "interpreter"
|
|
42
52
|
Requires-Dist: sqlalchemy>=2.0.42; extra == "interpreter"
|
|
43
53
|
Requires-Dist: uvicorn[standard]>=0.35.0; extra == "interpreter"
|
|
44
|
-
Requires-Dist: llama-index-llms-vertex>=0.6.1; extra == "interpreter"
|
|
45
|
-
Requires-Dist: langfuse>=3.9.0; extra == "interpreter"
|
|
46
|
-
Requires-Dist: opentelemetry-exporter-otlp>=1.35.0; extra == "interpreter"
|
|
47
|
-
Requires-Dist: opentelemetry-sdk>=1.35.0; extra == "interpreter"
|
|
48
|
-
Requires-Dist: docx2txt>=0.9; extra == "interpreter"
|
|
49
|
-
Requires-Dist: llama-index-vector-stores-qdrant>=0.8.6; extra == "interpreter"
|
|
50
|
-
Requires-Dist: jsonpath-ng>=1.7.0; extra == "interpreter"
|
|
51
|
-
Requires-Dist: llama-index-readers-huggingface-fs>=0.4.1; extra == "interpreter"
|
|
52
|
-
Requires-Dist: datasets>=4.4.1; extra == "interpreter"
|
|
53
54
|
Dynamic: license-file
|
|
54
55
|
|
|
55
56
|
# QType
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
qtype/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
qtype/cli.py,sha256=
|
|
2
|
+
qtype/cli.py,sha256=AC2i9dROss5JsEhbaRpIz4kHVvm0Tq-ope3ENL8Qw5w,4797
|
|
3
3
|
qtype/application/__init__.py,sha256=WS3x0b0NRt-nRmj1trsytlvMpQS5KN7Hi6THGfY8bKE,230
|
|
4
4
|
qtype/application/documentation.py,sha256=ifmdt0jBW410baQuCUxovYDQQj-kxPZ4fmf6rWps9JY,4988
|
|
5
|
-
qtype/application/facade.py,sha256=
|
|
5
|
+
qtype/application/facade.py,sha256=JjexkpTzP-aAJHs4AaxJbB4CU10jn3zcPFpQ6FYWJFg,5803
|
|
6
6
|
qtype/application/commons/__init__.py,sha256=QyWAB2cvimM4DxNo2oBFCGkfBikH-ZeMBMGWmJcq4Uc,135
|
|
7
7
|
qtype/application/commons/tools.py,sha256=U_jJdVN2NO5v9b3qb6dPIiVykfal6tp6NvcLGWR6HC8,5035
|
|
8
8
|
qtype/application/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -15,25 +15,25 @@ qtype/base/logging.py,sha256=eqStjILlmhNryYRqUiyTdDHoUoiLKSY8J0GevvzvTKQ,1075
|
|
|
15
15
|
qtype/base/types.py,sha256=zkweSHfpP6MrDEHzEpEWTZ-xVxQLZJj1QhKv-Mj4s0A,6834
|
|
16
16
|
qtype/commands/__init__.py,sha256=Qo4M07zm5I63r8STxDjvt5fhP1jygdXTsExNGELkefc,257
|
|
17
17
|
qtype/commands/convert.py,sha256=wh2-MSBlnMU5peAzVeQcGqqFzQbeCuL5WC5-EDZ-TFM,4636
|
|
18
|
-
qtype/commands/generate.py,sha256=
|
|
19
|
-
qtype/commands/run.py,sha256=
|
|
18
|
+
qtype/commands/generate.py,sha256=OQEkuh3dTVu6ZUNAuH_HkU-9YktYySL0qjTdrz28FY8,7285
|
|
19
|
+
qtype/commands/run.py,sha256=rDIiDioWU-dNuw39F12Bb6buknsNGzzVhd41i9Yms8Y,6633
|
|
20
20
|
qtype/commands/serve.py,sha256=lb5akSZ8fYLlCl8u8HDFFk6kyCHHwSRnP5wNzZry8sg,3216
|
|
21
21
|
qtype/commands/validate.py,sha256=f0aOk6A08910bFfamfg8xafByADMx4EktXAGMrEeUXU,3067
|
|
22
22
|
qtype/commands/visualize.py,sha256=J1eqwaVWTteGzib84g7Qtp0JlX9wIMmRQWSv1RhAns8,3763
|
|
23
23
|
qtype/dsl/__init__.py,sha256=clrmM1ZlK6c0Le_183eo5bc9dDK53Ebp-vH5ZVfwhfw,397
|
|
24
24
|
qtype/dsl/custom_types.py,sha256=N3qswimv0foH40YDubHaTZ3HYF9RUbZ2x5eQ4i798Ko,2901
|
|
25
|
-
qtype/dsl/domain_types.py,sha256
|
|
25
|
+
qtype/dsl/domain_types.py,sha256=-pX74DKwrRanoXBxYqAdN_f44ike6ssRV3tZ20R2PhQ,4319
|
|
26
26
|
qtype/dsl/linker.py,sha256=c7PPTULy7_z_9u_qeseIaomR_B8kBa9YzOhQpjeGaSM,12975
|
|
27
27
|
qtype/dsl/loader.py,sha256=mht0BqfmyTNHIEDaF3iTEmYQLJBP5GIZULwexxw9Dpg,9771
|
|
28
|
-
qtype/dsl/model.py,sha256
|
|
28
|
+
qtype/dsl/model.py,sha256=0yKl3fKAWQ_BDH-z62oI47IiJQhaH6HFzYRD1tUZhME,40860
|
|
29
29
|
qtype/dsl/parser.py,sha256=jpz32zyvOIo-R6Xr1lshzQiGfeo-2-fZczkdfURBufo,5487
|
|
30
30
|
qtype/dsl/types.py,sha256=k6cgThA287bZ_pvTKQvxWhatcYCPNne8zpqOYOvLvOg,1687
|
|
31
31
|
qtype/interpreter/__init__.py,sha256=IaRF90JLFbsTLKz9LTOMI_Pz4xwVaEyXPNaXV7sLou8,43
|
|
32
32
|
qtype/interpreter/api.py,sha256=V7hjsmDhe1IwbcwdM5bnPGBiwH3TtlMLjUJdGJumCdA,4193
|
|
33
|
-
qtype/interpreter/conversions.py,sha256=
|
|
34
|
-
qtype/interpreter/converters.py,sha256=
|
|
33
|
+
qtype/interpreter/conversions.py,sha256=SHtVVN8k36_iODKvHt1MV6V08GRaEBwE4yCN6VQvlHA,20986
|
|
34
|
+
qtype/interpreter/converters.py,sha256=gWyfizl7d-DT6jJ2aOrneUcZcwB-LdMDEvl-VT0-mLQ,2348
|
|
35
35
|
qtype/interpreter/endpoints.py,sha256=un4iCYCk86lYKpTDFdzlByvebdctNwRF3n4oD4ZwpTw,11946
|
|
36
|
-
qtype/interpreter/flow.py,sha256=
|
|
36
|
+
qtype/interpreter/flow.py,sha256=eitRE1Hh6avmMzjLKKcrWztviSzJHFu4yZSbtIeMLQ0,6188
|
|
37
37
|
qtype/interpreter/metadata_api.py,sha256=LfJjt9atsgiAra6aVBXLoJrPa06_CBUagYysT556nt8,3267
|
|
38
38
|
qtype/interpreter/resource_cache.py,sha256=K0kzpm223COWk7FN9qyOvNOEoOcABR4yLeADL9ekE_o,1188
|
|
39
39
|
qtype/interpreter/rich_progress.py,sha256=J7TokOIqIUVWJZCfGEexQCwvvj6b1SjRtKThk2DU0CA,6761
|
|
@@ -47,25 +47,26 @@ qtype/interpreter/auth/generic.py,sha256=WHXu3SxWzxJn_bv6R20Aod84Vwe73xTYHx754dY
|
|
|
47
47
|
qtype/interpreter/base/base_step_executor.py,sha256=DFQOwRVXStxPLov-unG4IXq-iBQ66JVPeetNnUcdlZ8,16497
|
|
48
48
|
qtype/interpreter/base/batch_step_executor.py,sha256=g5_yPd5VTy_slW5ZXyamgFyTRd0CoaeVfDHj8x4PvUk,5906
|
|
49
49
|
qtype/interpreter/base/exceptions.py,sha256=7CIexzDfIjvAA0c6qwg4jsDcTQM1pKQLj6szxcqil_c,1586
|
|
50
|
-
qtype/interpreter/base/executor_context.py,sha256=
|
|
51
|
-
qtype/interpreter/base/factory.py,sha256=
|
|
50
|
+
qtype/interpreter/base/executor_context.py,sha256=qDMb7GJebCw3E6oMiCSpu0-aRq-l6MPx6yPLwM2quOs,3561
|
|
51
|
+
qtype/interpreter/base/factory.py,sha256=9etq_vvds-C9QrwVutkPZmGwrMJ_WZwrkeXOzjOUEpk,3534
|
|
52
52
|
qtype/interpreter/base/progress_tracker.py,sha256=zHtTp0JGrn1M3wNEEVfkwQmuHD-WKXV7tv4fDdHv1xs,3488
|
|
53
53
|
qtype/interpreter/base/secrets.py,sha256=74NoU0Fx96vva6LGWXk7EkvFWD4uZEk12NjWrGHWZTc,11241
|
|
54
54
|
qtype/interpreter/base/step_cache.py,sha256=iNtEFN-bvfG5S5iPhXR_U7iVtK-RWh9_nhCRetckukU,2432
|
|
55
55
|
qtype/interpreter/base/stream_emitter.py,sha256=8l5bCFTjMA3Takjh51QdWw8ERb7_GamHVoU-x6xkG5I,13828
|
|
56
56
|
qtype/interpreter/executors/agent_executor.py,sha256=pll5tdUD977fmMMfoXVhY-dLQttv-aqT04gyjrF6seo,8378
|
|
57
57
|
qtype/interpreter/executors/aggregate_executor.py,sha256=Z3NJekpeo7aqqvOcXQqb6d6t9g4UB1r3N1lSV9EwZq4,3495
|
|
58
|
+
qtype/interpreter/executors/bedrock_reranker_executor.py,sha256=p25BMmM1paAlK2vfpwJ9T5st_2B-bmZoDnVFp9ynZIY,7154
|
|
58
59
|
qtype/interpreter/executors/decoder_executor.py,sha256=KqLhnhiclMIcUNf3bu7H4vDAOXCQeVO0rc2hIXm1qZ4,5610
|
|
59
60
|
qtype/interpreter/executors/doc_to_text_executor.py,sha256=ZkTtKUL0BfNIiuj-OcYybn1f0By6ujRmd1U4VEAtJt4,3804
|
|
60
61
|
qtype/interpreter/executors/document_embedder_executor.py,sha256=wvARlFPb2dmMdxjW8L1422a-XmcUVxEJXWf24bDR9BE,3529
|
|
61
|
-
qtype/interpreter/executors/document_search_executor.py,sha256=
|
|
62
|
+
qtype/interpreter/executors/document_search_executor.py,sha256=ZmKAt__jC5cxZY0gSm9AgpC6n7MFavTHE01tQED3zFk,4051
|
|
62
63
|
qtype/interpreter/executors/document_source_executor.py,sha256=ZpBrBaE16YeRk750TxvE08NnCIUzArjESZImESomaIo,4247
|
|
63
64
|
qtype/interpreter/executors/document_splitter_executor.py,sha256=2mzrkkNqsPb5erDUd_VapnrykgywMXGXZnkWT1YJe_w,3815
|
|
64
65
|
qtype/interpreter/executors/echo_executor.py,sha256=oQUgzQTHruT4on7wgEBOcikwOy6KP82d5zrul5QLoRU,2194
|
|
65
|
-
qtype/interpreter/executors/field_extractor_executor.py,sha256=
|
|
66
|
+
qtype/interpreter/executors/field_extractor_executor.py,sha256=geDmT6GyvbDDJvPX1hPChAydDZ_LSHlOdskK-6ZGvbI,5796
|
|
66
67
|
qtype/interpreter/executors/file_source_executor.py,sha256=OUT_zJrYN3iFMUgLECde93C4rv8PthcQsuJ--CJvEsI,3605
|
|
67
68
|
qtype/interpreter/executors/file_writer_executor.py,sha256=x4BpgdXM7Xhz1tJJ5MmBIjFO4y80VC1V1ow3tox_Xrw,4099
|
|
68
|
-
qtype/interpreter/executors/index_upsert_executor.py,sha256=
|
|
69
|
+
qtype/interpreter/executors/index_upsert_executor.py,sha256=5MxG3GX2bbjX6jhCpCdEZ0YFJOshn649cfaOT50PLCA,8518
|
|
69
70
|
qtype/interpreter/executors/invoke_embedding_executor.py,sha256=OPvd--x8iimjODLJkRpRfQDahL8LnYaPy3A8WVB5h00,3311
|
|
70
71
|
qtype/interpreter/executors/invoke_flow_executor.py,sha256=U30cYM3F_zy1_2CD1Dde59xyZD0rDa5W46lST1hxF6s,1682
|
|
71
72
|
qtype/interpreter/executors/invoke_tool_executor.py,sha256=hhbE8YTr0x5-kz_xsvdWGGzkLkVdvDoAVAF-3ZUK5as,12786
|
|
@@ -121,15 +122,15 @@ qtype/interpreter/ui/_next/static/media/9610d9e46709d722-s.woff2,sha256=N08hXnJf
|
|
|
121
122
|
qtype/interpreter/ui/_next/static/media/ba015fad6dcf6784-s.woff2,sha256=92BKU6ACUPZttLR91EMnzipD9u3shQ1SF7uAI4gZ790,15292
|
|
122
123
|
qtype/semantic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
124
|
qtype/semantic/base_types.py,sha256=wfUlT0gV3_Mk1xLLI64SSXCB9GFmn29yz5adTaHrsOI,1540
|
|
124
|
-
qtype/semantic/checker.py,sha256=
|
|
125
|
+
qtype/semantic/checker.py,sha256=TJTxSIMXNERpry98jqFNd8Ga5ljTvHOVosYb0AYbpbc,22291
|
|
125
126
|
qtype/semantic/generate.py,sha256=s56N0ollRJVVxy6RUKZWFFReKYcSSVw33ixvT2MQRuA,21116
|
|
126
127
|
qtype/semantic/loader.py,sha256=QRhTc_AJfsWSMn8ThaW60GmIGjFMN-3bBUy4pktFjz4,3041
|
|
127
|
-
qtype/semantic/model.py,sha256=
|
|
128
|
+
qtype/semantic/model.py,sha256=7yZ-Ufuo-gNJbhFXALuKZxILdhNB5zbL3a3oQQARI8g,28602
|
|
128
129
|
qtype/semantic/resolver.py,sha256=bWPCSB8KJpVqN_n41U_r-qzUiT8vAMBOD3pOGmxL6TY,4618
|
|
129
130
|
qtype/semantic/visualize.py,sha256=thjrZcfQuZJWrZ9EMAPhAa2kNikR5rLIJrfcD3hJ8XY,17426
|
|
130
|
-
qtype-0.1.
|
|
131
|
-
qtype-0.1.
|
|
132
|
-
qtype-0.1.
|
|
133
|
-
qtype-0.1.
|
|
134
|
-
qtype-0.1.
|
|
135
|
-
qtype-0.1.
|
|
131
|
+
qtype-0.1.2.dist-info/licenses/LICENSE,sha256=1KA5EgYBSR0O6nCH2HEvk6Di53YKJ9r_VCR7G8G8qAY,11341
|
|
132
|
+
qtype-0.1.2.dist-info/METADATA,sha256=lxoxEpkpLqsOuf7OIqjBliN6tq0YlUUXwfvty3CxGdk,5657
|
|
133
|
+
qtype-0.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
134
|
+
qtype-0.1.2.dist-info/entry_points.txt,sha256=5y4vj8RLvgl2tXSj-Hm7v5-Tn3kP4-UonjNoN-mfaQE,41
|
|
135
|
+
qtype-0.1.2.dist-info/top_level.txt,sha256=ONroH5B0mZ51jr7NSWCK0weFwwCO7wBLmyVS1YqNU14,6
|
|
136
|
+
qtype-0.1.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|