qtype 0.1.3__py3-none-any.whl → 0.1.4__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/dsl/model.py CHANGED
@@ -765,8 +765,9 @@ class AWSAuthProvider(AuthorizationProvider):
765
765
  has_keys = self.access_key_id and self.secret_access_key
766
766
  has_profile = self.profile_name
767
767
  has_role = self.role_arn
768
+ has_region = self.region
768
769
 
769
- if not (has_keys or has_profile or has_role):
770
+ if not (has_keys or has_profile or has_role or has_region):
770
771
  raise ValueError(
771
772
  "AWSAuthProvider must specify at least one authentication method: "
772
773
  "access keys, profile name, or role ARN."
qtype/dsl/parser.py CHANGED
@@ -153,12 +153,12 @@ def _format_validation_errors(
153
153
  error_msg = "Validation failed (see details above)"
154
154
  else:
155
155
  error_msg = "Validation failed:\n"
156
- for error in relevant_errors[:5]: # Show max 5 errors
156
+ for error in relevant_errors[:30]: # Show max 5 errors
157
157
  loc_path = _simplify_field_path(error["loc"])
158
158
  error_msg += f" {loc_path}: {error['msg']}\n"
159
159
 
160
- if len(relevant_errors) > 5:
161
- error_msg += f" ... and {len(relevant_errors) - 5} more errors\n"
160
+ if len(relevant_errors) > 30:
161
+ error_msg += f" ... and {len(relevant_errors) - 30} more errors\n"
162
162
 
163
163
  if source_name:
164
164
  error_msg = f"In {source_name}:\n{error_msg}"
@@ -34,6 +34,7 @@ from qtype.interpreter.base.secrets import SecretManagerBase
34
34
  from qtype.interpreter.types import InterpreterError
35
35
  from qtype.semantic.model import (
36
36
  APIKeyAuthProvider,
37
+ AWSAuthProvider,
37
38
  DocumentIndex,
38
39
  DocumentSplitter,
39
40
  Model,
@@ -302,7 +303,9 @@ def to_vector_store(
302
303
 
303
304
 
304
305
  @cached_resource
305
- def to_embedding_model(model: Model) -> BaseEmbedding:
306
+ def to_embedding_model(
307
+ model: Model, secret_manager: SecretManagerBase
308
+ ) -> BaseEmbedding:
306
309
  """Convert a qtype Model to a LlamaIndex embedding model."""
307
310
 
308
311
  if model.provider == "aws-bedrock":
@@ -310,7 +313,14 @@ def to_embedding_model(model: Model) -> BaseEmbedding:
310
313
  BedrockEmbedding,
311
314
  )
312
315
 
316
+ session = None
317
+ if model.auth is not None:
318
+ assert isinstance(model.auth, AWSAuthProvider)
319
+ with aws(model.auth, secret_manager) as session:
320
+ session = session._session
321
+
313
322
  bedrock_embedding: BaseEmbedding = BedrockEmbedding(
323
+ botocore_session=session,
314
324
  model_name=model.model_id if model.model_id else model.id,
315
325
  max_retries=100,
316
326
  )
@@ -320,8 +330,20 @@ def to_embedding_model(model: Model) -> BaseEmbedding:
320
330
  OpenAIEmbedding,
321
331
  )
322
332
 
333
+ api_key = None
334
+ if model.auth:
335
+ with auth(model.auth, secret_manager) as provider:
336
+ if not isinstance(provider, APIKeyAuthProvider):
337
+ raise InterpreterError(
338
+ f"OpenAI provider requires APIKeyAuthProvider, "
339
+ f"got {type(provider).__name__}"
340
+ )
341
+ # api_key is guaranteed to be str after auth() resolves it
342
+ api_key = provider.api_key # type: ignore[assignment]
343
+
323
344
  openai_embedding: BaseEmbedding = OpenAIEmbedding(
324
- model_name=model.model_id if model.model_id else model.id
345
+ api_key=api_key,
346
+ model_name=model.model_id if model.model_id else model.id,
325
347
  )
326
348
  return openai_embedding
327
349
  else:
@@ -566,7 +588,7 @@ def to_llama_vector_store_and_retriever(
566
588
  vector_store = to_vector_store(index, secret_manager)
567
589
 
568
590
  # Get the embedding model
569
- embedding_model = to_embedding_model(index.embedding_model)
591
+ embedding_model = to_embedding_model(index.embedding_model, secret_manager)
570
592
 
571
593
  # Create a VectorStoreIndex with the vector store and embedding model
572
594
  vector_index = VectorStoreIndex.from_vector_store(
@@ -41,7 +41,7 @@ class DocumentEmbedderExecutor(StepExecutor):
41
41
  self.step: DocumentEmbedder = step
42
42
  # Initialize the embedding model once for the executor
43
43
  self.embedding_model: BaseEmbedding = to_embedding_model(
44
- self.step.model
44
+ self.step.model, context.secret_manager
45
45
  )
46
46
 
47
47
  # TODO: properly abstract this into a mixin
@@ -30,7 +30,9 @@ class InvokeEmbeddingExecutor(StepExecutor):
30
30
  )
31
31
  self.step: InvokeEmbedding = step
32
32
  # Initialize the embedding model once for the executor
33
- self.embedding_model = to_embedding_model(self.step.model)
33
+ self.embedding_model = to_embedding_model(
34
+ self.step.model, context.secret_manager
35
+ )
34
36
 
35
37
  async def process_message(
36
38
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qtype
3
- Version: 0.1.3
3
+ Version: 0.1.4
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
@@ -25,12 +25,12 @@ qtype/dsl/custom_types.py,sha256=N3qswimv0foH40YDubHaTZ3HYF9RUbZ2x5eQ4i798Ko,290
25
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=0yKl3fKAWQ_BDH-z62oI47IiJQhaH6HFzYRD1tUZhME,40860
29
- qtype/dsl/parser.py,sha256=jpz32zyvOIo-R6Xr1lshzQiGfeo-2-fZczkdfURBufo,5487
28
+ qtype/dsl/model.py,sha256=g3cZ4-vh_WxrjJ1ev6kFfQcX2-NOZHb70ZT-7m-nHHY,40907
29
+ qtype/dsl/parser.py,sha256=Ww32bLQ2vGOObsA-vWjaMh4TOKRwEA7FAt9U6wjKZkw,5490
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=SHtVVN8k36_iODKvHt1MV6V08GRaEBwE4yCN6VQvlHA,20986
33
+ qtype/interpreter/conversions.py,sha256=VKRJm5ofM3tWzXKg_zLTvKzi7GNBDv6MiE4HnQ52eFY,21871
34
34
  qtype/interpreter/converters.py,sha256=gWyfizl7d-DT6jJ2aOrneUcZcwB-LdMDEvl-VT0-mLQ,2348
35
35
  qtype/interpreter/endpoints.py,sha256=un4iCYCk86lYKpTDFdzlByvebdctNwRF3n4oD4ZwpTw,11946
36
36
  qtype/interpreter/flow.py,sha256=_RuOxGG34Ccvb3pS_f2e2xmpmmMcq7CakWBdS8ezZqY,6590
@@ -59,7 +59,7 @@ qtype/interpreter/executors/aggregate_executor.py,sha256=Z3NJekpeo7aqqvOcXQqb6d6
59
59
  qtype/interpreter/executors/bedrock_reranker_executor.py,sha256=p25BMmM1paAlK2vfpwJ9T5st_2B-bmZoDnVFp9ynZIY,7154
60
60
  qtype/interpreter/executors/decoder_executor.py,sha256=KqLhnhiclMIcUNf3bu7H4vDAOXCQeVO0rc2hIXm1qZ4,5610
61
61
  qtype/interpreter/executors/doc_to_text_executor.py,sha256=ZkTtKUL0BfNIiuj-OcYybn1f0By6ujRmd1U4VEAtJt4,3804
62
- qtype/interpreter/executors/document_embedder_executor.py,sha256=wvARlFPb2dmMdxjW8L1422a-XmcUVxEJXWf24bDR9BE,3529
62
+ qtype/interpreter/executors/document_embedder_executor.py,sha256=cvteGIQOpVC94ZZX6vB7G9Pb8GXdKgNgkHubRbcgYQQ,3553
63
63
  qtype/interpreter/executors/document_search_executor.py,sha256=ZmKAt__jC5cxZY0gSm9AgpC6n7MFavTHE01tQED3zFk,4051
64
64
  qtype/interpreter/executors/document_source_executor.py,sha256=ZpBrBaE16YeRk750TxvE08NnCIUzArjESZImESomaIo,4247
65
65
  qtype/interpreter/executors/document_splitter_executor.py,sha256=00x32yo1wGUvW88_lUahfGU94prUPGaOTk5GBUJbBJA,3882
@@ -68,7 +68,7 @@ qtype/interpreter/executors/field_extractor_executor.py,sha256=geDmT6GyvbDDJvPX1
68
68
  qtype/interpreter/executors/file_source_executor.py,sha256=OUT_zJrYN3iFMUgLECde93C4rv8PthcQsuJ--CJvEsI,3605
69
69
  qtype/interpreter/executors/file_writer_executor.py,sha256=x4BpgdXM7Xhz1tJJ5MmBIjFO4y80VC1V1ow3tox_Xrw,4099
70
70
  qtype/interpreter/executors/index_upsert_executor.py,sha256=5MxG3GX2bbjX6jhCpCdEZ0YFJOshn649cfaOT50PLCA,8518
71
- qtype/interpreter/executors/invoke_embedding_executor.py,sha256=OPvd--x8iimjODLJkRpRfQDahL8LnYaPy3A8WVB5h00,3311
71
+ qtype/interpreter/executors/invoke_embedding_executor.py,sha256=PAD982r-1zBtbDOOacwFd3K5y5-jiYTiPoCNr3VIOuw,3357
72
72
  qtype/interpreter/executors/invoke_flow_executor.py,sha256=U30cYM3F_zy1_2CD1Dde59xyZD0rDa5W46lST1hxF6s,1682
73
73
  qtype/interpreter/executors/invoke_tool_executor.py,sha256=hhbE8YTr0x5-kz_xsvdWGGzkLkVdvDoAVAF-3ZUK5as,12786
74
74
  qtype/interpreter/executors/llm_inference_executor.py,sha256=A6b_Ns_734TCn_DMhdNSqWc5qX970FryhpsX_jtEu_4,9593
@@ -129,9 +129,9 @@ qtype/semantic/loader.py,sha256=QRhTc_AJfsWSMn8ThaW60GmIGjFMN-3bBUy4pktFjz4,3041
129
129
  qtype/semantic/model.py,sha256=7yZ-Ufuo-gNJbhFXALuKZxILdhNB5zbL3a3oQQARI8g,28602
130
130
  qtype/semantic/resolver.py,sha256=bWPCSB8KJpVqN_n41U_r-qzUiT8vAMBOD3pOGmxL6TY,4618
131
131
  qtype/semantic/visualize.py,sha256=thjrZcfQuZJWrZ9EMAPhAa2kNikR5rLIJrfcD3hJ8XY,17426
132
- qtype-0.1.3.dist-info/licenses/LICENSE,sha256=1KA5EgYBSR0O6nCH2HEvk6Di53YKJ9r_VCR7G8G8qAY,11341
133
- qtype-0.1.3.dist-info/METADATA,sha256=Q5VxMaYqCF9FVArNhhzlhwIsggD-obWOwY_uRBtRFQU,5657
134
- qtype-0.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
- qtype-0.1.3.dist-info/entry_points.txt,sha256=5y4vj8RLvgl2tXSj-Hm7v5-Tn3kP4-UonjNoN-mfaQE,41
136
- qtype-0.1.3.dist-info/top_level.txt,sha256=ONroH5B0mZ51jr7NSWCK0weFwwCO7wBLmyVS1YqNU14,6
137
- qtype-0.1.3.dist-info/RECORD,,
132
+ qtype-0.1.4.dist-info/licenses/LICENSE,sha256=1KA5EgYBSR0O6nCH2HEvk6Di53YKJ9r_VCR7G8G8qAY,11341
133
+ qtype-0.1.4.dist-info/METADATA,sha256=xTA-mrWr4HvK6BOBTq6CBnuERaj_a84AdJIrywWtokU,5657
134
+ qtype-0.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
+ qtype-0.1.4.dist-info/entry_points.txt,sha256=5y4vj8RLvgl2tXSj-Hm7v5-Tn3kP4-UonjNoN-mfaQE,41
136
+ qtype-0.1.4.dist-info/top_level.txt,sha256=ONroH5B0mZ51jr7NSWCK0weFwwCO7wBLmyVS1YqNU14,6
137
+ qtype-0.1.4.dist-info/RECORD,,
File without changes