singlestoredb 1.15.6__cp38-abi3-macosx_10_9_universal2.whl → 1.15.7__cp38-abi3-macosx_10_9_universal2.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.

Potentially problematic release.


This version of singlestoredb might be problematic. Click here for more details.

Binary file
singlestoredb/__init__.py CHANGED
@@ -13,7 +13,7 @@ Examples
13
13
 
14
14
  """
15
15
 
16
- __version__ = '1.15.6'
16
+ __version__ = '1.15.7'
17
17
 
18
18
  from typing import Any
19
19
 
@@ -1,2 +1,5 @@
1
+ from .chat import SingleStoreChat # noqa: F401
2
+ from .chat import SingleStoreChatFactory # noqa: F401
1
3
  from .chat import SingleStoreChatOpenAI # noqa: F401
2
4
  from .embeddings import SingleStoreEmbeddings # noqa: F401
5
+ from .embeddings import SingleStoreEmbeddingsFactory # noqa: F401
singlestoredb/ai/chat.py CHANGED
@@ -1,7 +1,12 @@
1
1
  import os
2
2
  from typing import Any
3
+ from typing import Callable
4
+ from typing import Optional
5
+ from typing import Union
3
6
 
4
- from singlestoredb.fusion.handlers.utils import get_workspace_manager
7
+ import httpx
8
+
9
+ from singlestoredb import manage_workspaces
5
10
 
6
11
  try:
7
12
  from langchain_openai import ChatOpenAI
@@ -11,30 +16,144 @@ except ImportError:
11
16
  'Please install it with `pip install langchain_openai`.',
12
17
  )
13
18
 
19
+ try:
20
+ from langchain_aws import ChatBedrockConverse
21
+ except ImportError:
22
+ raise ImportError(
23
+ 'Could not import langchain-aws python package. '
24
+ 'Please install it with `pip install langchain-aws`.',
25
+ )
26
+
27
+ import boto3
28
+ from botocore import UNSIGNED
29
+ from botocore.config import Config
30
+
14
31
 
15
32
  class SingleStoreChatOpenAI(ChatOpenAI):
16
- def __init__(self, model_name: str, **kwargs: Any):
33
+ def __init__(self, model_name: str, api_key: Optional[str] = None, **kwargs: Any):
17
34
  inference_api_manger = (
18
- get_workspace_manager().organizations.current.inference_apis
35
+ manage_workspaces().organizations.current.inference_apis
19
36
  )
20
37
  info = inference_api_manger.get(model_name=model_name)
38
+ token = (
39
+ api_key
40
+ if api_key is not None
41
+ else os.environ.get('SINGLESTOREDB_USER_TOKEN')
42
+ )
21
43
  super().__init__(
22
44
  base_url=info.connection_url,
23
- api_key=os.environ.get('SINGLESTOREDB_USER_TOKEN'),
45
+ api_key=token,
24
46
  model=model_name,
25
47
  **kwargs,
26
48
  )
27
49
 
28
50
 
29
51
  class SingleStoreChat(ChatOpenAI):
30
- def __init__(self, model_name: str, **kwargs: Any):
52
+ def __init__(self, model_name: str, api_key: Optional[str] = None, **kwargs: Any):
31
53
  inference_api_manger = (
32
- get_workspace_manager().organizations.current.inference_apis
54
+ manage_workspaces().organizations.current.inference_apis
33
55
  )
34
56
  info = inference_api_manger.get(model_name=model_name)
57
+ token = (
58
+ api_key
59
+ if api_key is not None
60
+ else os.environ.get('SINGLESTOREDB_USER_TOKEN')
61
+ )
35
62
  super().__init__(
36
63
  base_url=info.connection_url,
37
- api_key=os.environ.get('SINGLESTOREDB_USER_TOKEN'),
64
+ api_key=token,
38
65
  model=model_name,
39
66
  **kwargs,
40
67
  )
68
+
69
+
70
+ def SingleStoreChatFactory(
71
+ model_name: str,
72
+ api_key: Optional[str] = None,
73
+ streaming: bool = True,
74
+ http_client: Optional[httpx.Client] = None,
75
+ obo_token_getter: Optional[Callable[[], Optional[str]]] = None,
76
+ **kwargs: Any,
77
+ ) -> Union[ChatOpenAI, ChatBedrockConverse]:
78
+ """Return a chat model instance (ChatOpenAI or ChatBedrockConverse).
79
+ """
80
+ inference_api_manager = (
81
+ manage_workspaces().organizations.current.inference_apis
82
+ )
83
+ info = inference_api_manager.get(model_name=model_name)
84
+ token_env = os.environ.get('SINGLESTOREDB_USER_TOKEN')
85
+ token = api_key if api_key is not None else token_env
86
+
87
+ if info.hosting_platform == 'Amazon':
88
+ # Instantiate Bedrock client
89
+ cfg_kwargs = {
90
+ 'signature_version': UNSIGNED,
91
+ 'retries': {'max_attempts': 1, 'mode': 'standard'},
92
+ }
93
+ if http_client is not None and http_client.timeout is not None:
94
+ cfg_kwargs['read_timeout'] = http_client.timeout
95
+ cfg_kwargs['connect_timeout'] = http_client.timeout
96
+
97
+ cfg = Config(**cfg_kwargs)
98
+ client = boto3.client(
99
+ 'bedrock-runtime',
100
+ endpoint_url=info.connection_url,
101
+ region_name='us-east-1',
102
+ aws_access_key_id='placeholder',
103
+ aws_secret_access_key='placeholder',
104
+ config=cfg,
105
+ )
106
+
107
+ def _inject_headers(request: Any, **_ignored: Any) -> None:
108
+ """Inject dynamic auth/OBO headers prior to Bedrock sending."""
109
+ if obo_token_getter is not None:
110
+ obo_val = obo_token_getter()
111
+ if obo_val:
112
+ request.headers['X-S2-OBO'] = obo_val
113
+ if token:
114
+ request.headers['Authorization'] = f'Bearer {token}'
115
+ request.headers.pop('X-Amz-Date', None)
116
+ request.headers.pop('X-Amz-Security-Token', None)
117
+
118
+ emitter = client._endpoint._event_emitter
119
+ emitter.register_first(
120
+ 'before-send.bedrock-runtime.Converse',
121
+ _inject_headers,
122
+ )
123
+ emitter.register_first(
124
+ 'before-send.bedrock-runtime.ConverseStream',
125
+ _inject_headers,
126
+ )
127
+ emitter.register_first(
128
+ 'before-send.bedrock-runtime.InvokeModel',
129
+ _inject_headers,
130
+ )
131
+ emitter.register_first(
132
+ 'before-send.bedrock-runtime.InvokeModelWithResponseStream',
133
+ _inject_headers,
134
+ )
135
+
136
+ return ChatBedrockConverse(
137
+ model_id=model_name,
138
+ endpoint_url=info.connection_url,
139
+ region_name='us-east-1',
140
+ aws_access_key_id='placeholder',
141
+ aws_secret_access_key='placeholder',
142
+ disable_streaming=not streaming,
143
+ client=client,
144
+ **kwargs,
145
+ )
146
+
147
+ # OpenAI / Azure OpenAI path
148
+ openai_kwargs = dict(
149
+ base_url=info.connection_url,
150
+ api_key=token,
151
+ model=model_name,
152
+ streaming=streaming,
153
+ )
154
+ if http_client is not None:
155
+ openai_kwargs['http_client'] = http_client
156
+ return ChatOpenAI(
157
+ **openai_kwargs,
158
+ **kwargs,
159
+ )
@@ -1,7 +1,12 @@
1
1
  import os
2
2
  from typing import Any
3
+ from typing import Callable
4
+ from typing import Optional
5
+ from typing import Union
3
6
 
4
- from singlestoredb.fusion.handlers.utils import get_workspace_manager
7
+ import httpx
8
+
9
+ from singlestoredb import manage_workspaces
5
10
 
6
11
  try:
7
12
  from langchain_openai import OpenAIEmbeddings
@@ -11,12 +16,24 @@ except ImportError:
11
16
  'Please install it with `pip install langchain_openai`.',
12
17
  )
13
18
 
19
+ try:
20
+ from langchain_aws import BedrockEmbeddings
21
+ except ImportError:
22
+ raise ImportError(
23
+ 'Could not import langchain-aws python package. '
24
+ 'Please install it with `pip install langchain-aws`.',
25
+ )
26
+
27
+ import boto3
28
+ from botocore import UNSIGNED
29
+ from botocore.config import Config
30
+
14
31
 
15
32
  class SingleStoreEmbeddings(OpenAIEmbeddings):
16
33
 
17
34
  def __init__(self, model_name: str, **kwargs: Any):
18
35
  inference_api_manger = (
19
- get_workspace_manager().organizations.current.inference_apis
36
+ manage_workspaces().organizations.current.inference_apis
20
37
  )
21
38
  info = inference_api_manger.get(model_name=model_name)
22
39
  super().__init__(
@@ -25,3 +42,84 @@ class SingleStoreEmbeddings(OpenAIEmbeddings):
25
42
  model=model_name,
26
43
  **kwargs,
27
44
  )
45
+
46
+
47
+ def SingleStoreEmbeddingsFactory(
48
+ model_name: str,
49
+ api_key: Optional[str] = None,
50
+ http_client: Optional[httpx.Client] = None,
51
+ obo_token_getter: Optional[Callable[[], Optional[str]]] = None,
52
+ **kwargs: Any,
53
+ ) -> Union[OpenAIEmbeddings, BedrockEmbeddings]:
54
+ """Return an embeddings model instance (OpenAIEmbeddings or BedrockEmbeddings).
55
+ """
56
+ inference_api_manager = (
57
+ manage_workspaces().organizations.current.inference_apis
58
+ )
59
+ info = inference_api_manager.get(model_name=model_name)
60
+ token_env = os.environ.get('SINGLESTOREDB_USER_TOKEN')
61
+ token = api_key if api_key is not None else token_env
62
+
63
+ if info.hosting_platform == 'Amazon':
64
+ # Instantiate Bedrock client
65
+ cfg_kwargs = {
66
+ 'signature_version': UNSIGNED,
67
+ 'retries': {'max_attempts': 1, 'mode': 'standard'},
68
+ }
69
+ if http_client is not None and http_client.timeout is not None:
70
+ cfg_kwargs['read_timeout'] = http_client.timeout
71
+ cfg_kwargs['connect_timeout'] = http_client.timeout
72
+
73
+ cfg = Config(**cfg_kwargs)
74
+ client = boto3.client(
75
+ 'bedrock-runtime',
76
+ endpoint_url=info.connection_url,
77
+ region_name='us-east-1',
78
+ aws_access_key_id='placeholder',
79
+ aws_secret_access_key='placeholder',
80
+ config=cfg,
81
+ )
82
+
83
+ def _inject_headers(request: Any, **_ignored: Any) -> None:
84
+ """Inject dynamic auth/OBO headers prior to Bedrock sending."""
85
+ if obo_token_getter is not None:
86
+ obo_val = obo_token_getter()
87
+ if obo_val:
88
+ request.headers['X-S2-OBO'] = obo_val
89
+ if token:
90
+ request.headers['Authorization'] = f'Bearer {token}'
91
+ request.headers.pop('X-Amz-Date', None)
92
+ request.headers.pop('X-Amz-Security-Token', None)
93
+
94
+ emitter = client._endpoint._event_emitter
95
+ emitter.register_first(
96
+ 'before-send.bedrock-runtime.InvokeModel',
97
+ _inject_headers,
98
+ )
99
+ emitter.register_first(
100
+ 'before-send.bedrock-runtime.InvokeModelWithResponseStream',
101
+ _inject_headers,
102
+ )
103
+
104
+ return BedrockEmbeddings(
105
+ model_id=model_name,
106
+ endpoint_url=info.connection_url,
107
+ region_name='us-east-1',
108
+ aws_access_key_id='placeholder',
109
+ aws_secret_access_key='placeholder',
110
+ client=client,
111
+ **kwargs,
112
+ )
113
+
114
+ # OpenAI / Azure OpenAI path
115
+ openai_kwargs = dict(
116
+ base_url=info.connection_url,
117
+ api_key=token,
118
+ model=model_name,
119
+ )
120
+ if http_client is not None:
121
+ openai_kwargs['http_client'] = http_client
122
+ return OpenAIEmbeddings(
123
+ **openai_kwargs,
124
+ **kwargs,
125
+ )
@@ -23,6 +23,7 @@ class InferenceAPIInfo(object):
23
23
  name: str
24
24
  connection_url: str
25
25
  project_id: str
26
+ hosting_platform: str
26
27
 
27
28
  def __init__(
28
29
  self,
@@ -31,12 +32,14 @@ class InferenceAPIInfo(object):
31
32
  name: str,
32
33
  connection_url: str,
33
34
  project_id: str,
35
+ hosting_platform: str,
34
36
  ):
35
37
  self.service_id = service_id
36
38
  self.connection_url = connection_url
37
39
  self.model_name = model_name
38
40
  self.name = name
39
41
  self.project_id = project_id
42
+ self.hosting_platform = hosting_platform
40
43
 
41
44
  @classmethod
42
45
  def from_dict(
@@ -62,6 +65,7 @@ class InferenceAPIInfo(object):
62
65
  model_name=obj['modelName'],
63
66
  name=obj['name'],
64
67
  connection_url=obj['connectionURL'],
68
+ hosting_platform=obj['hostingPlatform'],
65
69
  )
66
70
  return out
67
71
 
@@ -873,12 +873,20 @@ class TestStage(unittest.TestCase):
873
873
  def test_file_object(self):
874
874
  st = self.wg.stage
875
875
 
876
- st.mkdir('obj_test')
877
- st.mkdir('obj_test/nest_1')
876
+ obj_test_dir = f'obj_test_{id(self)}'
878
877
 
879
- f1 = st.upload_file(TEST_DIR / 'test.sql', 'obj_test.sql')
880
- f2 = st.upload_file(TEST_DIR / 'test.sql', 'obj_test/nest_1/obj_test.sql')
881
- d2 = st.info('obj_test/nest_1/')
878
+ st.mkdir(obj_test_dir)
879
+ st.mkdir(f'{obj_test_dir}/nest_1')
880
+
881
+ obj_test_sql = f'obj_test_{id(self)}.sql'
882
+ obj_test_2_sql = f'obj_test_2_{id(self)}.sql'
883
+
884
+ f1 = st.upload_file(TEST_DIR / 'test.sql', obj_test_sql)
885
+ f2 = st.upload_file(
886
+ TEST_DIR / 'test.sql',
887
+ f'{obj_test_dir}/nest_1/{obj_test_sql}',
888
+ )
889
+ d2 = st.info(f'{obj_test_dir}/nest_1/')
882
890
 
883
891
  # is_file / is_dir
884
892
  assert not f1.is_dir()
@@ -889,17 +897,17 @@ class TestStage(unittest.TestCase):
889
897
  assert not d2.is_file()
890
898
 
891
899
  # abspath / basename / dirname / exists
892
- assert f1.abspath() == 'obj_test.sql'
893
- assert f1.basename() == 'obj_test.sql'
900
+ assert f1.abspath() == obj_test_sql
901
+ assert f1.basename() == obj_test_sql
894
902
  assert f1.dirname() == '/'
895
903
  assert f1.exists()
896
- assert f2.abspath() == 'obj_test/nest_1/obj_test.sql'
897
- assert f2.basename() == 'obj_test.sql'
898
- assert f2.dirname() == 'obj_test/nest_1/'
904
+ assert f2.abspath() == f'{obj_test_dir}/nest_1/{obj_test_sql}'
905
+ assert f2.basename() == obj_test_sql
906
+ assert f2.dirname() == f'{obj_test_dir}/nest_1/'
899
907
  assert f2.exists()
900
- assert d2.abspath() == 'obj_test/nest_1/'
908
+ assert d2.abspath() == f'{obj_test_dir}/nest_1/'
901
909
  assert d2.basename() == 'nest_1'
902
- assert d2.dirname() == 'obj_test/'
910
+ assert d2.dirname() == f'{obj_test_dir}/'
903
911
  assert d2.exists()
904
912
 
905
913
  # download
@@ -910,9 +918,9 @@ class TestStage(unittest.TestCase):
910
918
  with self.assertRaises(IsADirectoryError):
911
919
  d2.remove()
912
920
 
913
- assert st.is_file('obj_test.sql')
921
+ assert st.is_file(obj_test_sql)
914
922
  f1.remove()
915
- assert not st.is_file('obj_test.sql')
923
+ assert not st.is_file(obj_test_sql)
916
924
 
917
925
  # removedirs
918
926
  with self.assertRaises(NotADirectoryError):
@@ -923,8 +931,8 @@ class TestStage(unittest.TestCase):
923
931
  assert not st.exists(d2.path)
924
932
 
925
933
  # rmdir
926
- f1 = st.upload_file(TEST_DIR / 'test.sql', 'obj_test.sql')
927
- d2 = st.mkdir('obj_test/nest_1')
934
+ f1 = st.upload_file(TEST_DIR / 'test.sql', obj_test_sql)
935
+ d2 = st.mkdir(f'{obj_test_dir}/nest_1')
928
936
 
929
937
  assert st.exists(f1.path)
930
938
  assert st.exists(d2.path)
@@ -937,20 +945,20 @@ class TestStage(unittest.TestCase):
937
945
 
938
946
  d2.rmdir()
939
947
 
940
- assert not st.exists('obj_test/nest_1/')
941
- assert not st.exists('obj_test')
948
+ assert not st.exists(f'{obj_test_dir}/nest_1/')
949
+ assert not st.exists(obj_test_dir)
942
950
 
943
951
  # mtime / ctime
944
952
  assert f1.getmtime() > 0
945
953
  assert f1.getctime() > 0
946
954
 
947
955
  # rename
948
- assert st.exists('obj_test.sql')
949
- assert not st.exists('obj_test_2.sql')
950
- f1.rename('obj_test_2.sql')
951
- assert not st.exists('obj_test.sql')
952
- assert st.exists('obj_test_2.sql')
953
- assert f1.abspath() == 'obj_test_2.sql'
956
+ assert st.exists(obj_test_sql)
957
+ assert not st.exists(obj_test_2_sql)
958
+ f1.rename(obj_test_2_sql)
959
+ assert not st.exists(obj_test_sql)
960
+ assert st.exists(obj_test_2_sql)
961
+ assert f1.abspath() == obj_test_2_sql
954
962
 
955
963
 
956
964
  @pytest.mark.management
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: singlestoredb
3
- Version: 1.15.6
3
+ Version: 1.15.7
4
4
  Summary: Interface to the SingleStoreDB database and workspace management APIs
5
5
  Home-page: https://github.com/singlestore-labs/singlestoredb-python
6
6
  Author: SingleStore
@@ -1,16 +1,16 @@
1
- _singlestoredb_accel.abi3.so,sha256=Pi_4ETlBUAIYZ45FaaYZ5sQrD4EpkHkpPV7fZw-6GRM,207264
2
- singlestoredb-1.15.6.dist-info/RECORD,,
3
- singlestoredb-1.15.6.dist-info/LICENSE,sha256=Mlq78idURT-9G026aMYswwwnnrLcgzTLuXeAs5hjDLM,11341
4
- singlestoredb-1.15.6.dist-info/WHEEL,sha256=_VEguvlLpUd-c8RbFMA4yMIVNMBv2LhpxYLCEQ-Bogk,113
5
- singlestoredb-1.15.6.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
6
- singlestoredb-1.15.6.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
7
- singlestoredb-1.15.6.dist-info/METADATA,sha256=wscNci6_IkAVSQB9jD0IlvalaM3PvQxkKiMUidnxt0s,5804
1
+ _singlestoredb_accel.abi3.so,sha256=8pD1GEJZQTnRnteVoJG9U1oJfe6vHgWC2koL52xF9G8,207264
2
+ singlestoredb-1.15.7.dist-info/RECORD,,
3
+ singlestoredb-1.15.7.dist-info/LICENSE,sha256=Mlq78idURT-9G026aMYswwwnnrLcgzTLuXeAs5hjDLM,11341
4
+ singlestoredb-1.15.7.dist-info/WHEEL,sha256=_VEguvlLpUd-c8RbFMA4yMIVNMBv2LhpxYLCEQ-Bogk,113
5
+ singlestoredb-1.15.7.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
6
+ singlestoredb-1.15.7.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
7
+ singlestoredb-1.15.7.dist-info/METADATA,sha256=N42M0mnELo1khbLSdxNkFIQX6QBE0RNV6hgPdTwJjg4,5804
8
8
  sqlx/magic.py,sha256=JsS9_9aBFaOt91Torm1JPN0c8qB2QmYJmNSKtbSQIY0,3509
9
9
  sqlx/__init__.py,sha256=aBYiU8DZXCogvWu3yWafOz7bZS5WWwLZXj7oL0dXGyU,85
10
10
  singlestoredb/auth.py,sha256=u8D9tpKzrqa4ssaHjyZnGDX1q8XBpGtuoOkTkSv7B28,7599
11
11
  singlestoredb/config.py,sha256=aBdMrPEaNSH-QLi1AXoQaSJsZ9f6ZXoFPN-74Trr6sQ,13935
12
12
  singlestoredb/vectorstore.py,sha256=BZb8e7m02_XVHqOyu8tA94R6kHb3n-BC8F08JyJwDzY,8408
13
- singlestoredb/__init__.py,sha256=p-cOjndCFiOpcf9fyhqPVRUJ-wf-2vLNqzIPBvR0KRg,2272
13
+ singlestoredb/__init__.py,sha256=UYEMO4CiO41DrAiO6xne5VttZqH7BvSD2Q-skkFRNeU,2272
14
14
  singlestoredb/types.py,sha256=Qp_PWYjSYG6PRnmXAZZ7K2QehUqfoG4KSllI3O1stPE,10397
15
15
  singlestoredb/connection.py,sha256=ELk3-UpM6RaB993aIt08MydKiiDnejHQ1s8EFiacrAI,46055
16
16
  singlestoredb/pytest.py,sha256=OyF3BO9mgxenifYhOihnzGk8WzCJ_zN5_mxe8XyFPOc,9074
@@ -45,7 +45,7 @@ singlestoredb/tests/test2.ipynb,sha256=yd1PE1VK-DwiRd6mYS4_0cPBtuVkvcDtycvTwD-Yn
45
45
  singlestoredb/tests/test_ext_func_data.py,sha256=kyNklkX1RxSiahI0LZjpqhg3LGDs0iwv8iHuXW3AcSo,47515
46
46
  singlestoredb/tests/test_exceptions.py,sha256=tfr_8X2w1UmG4nkSBzWGB0C7ehrf1GAVgj6_ODaG-TM,1131
47
47
  singlestoredb/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- singlestoredb/tests/test_management.py,sha256=R5g5QHWCSPxCrwMUOD0BL-touGIDvqQfDve-YmZyhX4,51973
48
+ singlestoredb/tests/test_management.py,sha256=BK58UWs6L_9h1ePUNjnIJ1fVAEvBvC8rP7HtnfoANYQ,52205
49
49
  singlestoredb/tests/test_udf.py,sha256=ycqSwwwCw3Mq4r0cyIylg63ReSjP4KbMX_7XqoYm-dg,29676
50
50
  singlestoredb/tests/test_http.py,sha256=RXasTqBWRn__omj0eLFTJYIbZjd0PPdIV2d4Cqz0MC8,8580
51
51
  singlestoredb/tests/utils.py,sha256=2A2tEdD3t8aXWUnHtAIcFlWrflsz2MlMcCbUDaAG29c,4995
@@ -69,7 +69,7 @@ singlestoredb/management/__init__.py,sha256=8q7i6-Cr9x-oZ8-NVAvTo_qtfHEndX4wx2g6
69
69
  singlestoredb/management/export.py,sha256=yR-yZUE9USFrP5OR_5iLFqEc8GLiKDQypSEp08CmT5k,9083
70
70
  singlestoredb/management/utils.py,sha256=QIhZCZSRaDbAG35xu1_n7ihmRXON8swc-gEK2FGYutI,13203
71
71
  singlestoredb/management/cluster.py,sha256=vDefpp2IMZRawvueIqZK2pePWVNnPWb6Szrt8mO8gmg,14419
72
- singlestoredb/management/inference_api.py,sha256=L6eFqaUaPugF_cmrZ4xlArj8CIv25vWqQs1vwgKPEF4,2583
72
+ singlestoredb/management/inference_api.py,sha256=px4JrziJQMwG73iNnYw_95np9DDrp5zo5mKz8c5EF9o,2742
73
73
  singlestoredb/management/workspace.py,sha256=frVNqwfUgth1WWhcf5rZqz9nIcPkMtmCb5hKVx1h5SI,61953
74
74
  singlestoredb/management/manager.py,sha256=k8JKPXyJVHI7gFwqIhxhUtQr_KdBCXw7Dw4GCdCtdKg,9352
75
75
  singlestoredb/management/billing_usage.py,sha256=9ighjIpcopgIyJOktBYQ6pahBZmWGHOPyyCW4gu9FGs,3735
@@ -106,9 +106,9 @@ singlestoredb/docstring/tests/test_numpydoc.py,sha256=9qr9jHr4feTF1E09c8J6SHWSXU
106
106
  singlestoredb/docstring/tests/test_google.py,sha256=2dVyFN-NjiuyUC3ZcGEm33aENAZNh9F7Eq_ErmyneIA,27955
107
107
  singlestoredb/http/__init__.py,sha256=A_2ZUCCpvRYIA6YDpPy57wL5R1eZ5SfP6I1To5nfJ2s,912
108
108
  singlestoredb/http/connection.py,sha256=fCgh3PdYJNYVPMaUe_NlMb7ducxC06se1XfyqOpPpJw,39727
109
- singlestoredb/ai/__init__.py,sha256=-uNcq-bY-AiWhZ5Plq2ZXtfIVL4PaifMJsJf58rdN8I,114
110
- singlestoredb/ai/chat.py,sha256=5vi_jVSH8xJ_WIn_mst8uw5cv9tJJBn3AFYRM4LhYI8,1268
111
- singlestoredb/ai/embeddings.py,sha256=X3g0sJNDVOzXzZwoXz3M3ch-IERQXNkHxuH4cj125I8,815
109
+ singlestoredb/ai/__init__.py,sha256=zNSUVDzDsyIfW7-obV5iRRhDjPqgPzG_EJJaT0_jtLw,284
110
+ singlestoredb/ai/chat.py,sha256=uI_j1sySFO4jpUA3bcUL0Gki0F3jEbLHAq0hQLxqv3w,5074
111
+ singlestoredb/ai/embeddings.py,sha256=yj9fQzwiocy78cBPfoOB9dok4gnWyE0IghCw7JIlTGI,4020
112
112
  singlestoredb/mysql/protocol.py,sha256=PfdILK1oK2hlg1etmYZtrKf1obPlcLC7FyEJHEpIplc,14885
113
113
  singlestoredb/mysql/cursors.py,sha256=aOLfHkj83aYZPOVuhJPkZ83CWByszIBRynq0fqSaWvY,27046
114
114
  singlestoredb/mysql/__init__.py,sha256=olUTAvkiERhDW41JXQMawkg-i0tvBEkoTkII1tt6lxU,4492