singlestoredb 1.15.5__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.5'
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
+ )
@@ -42,6 +42,7 @@ import tempfile
42
42
  import textwrap
43
43
  import threading
44
44
  import time
45
+ import traceback
45
46
  import typing
46
47
  import urllib
47
48
  import uuid
@@ -709,21 +710,21 @@ class Application(object):
709
710
  error_response_dict: Dict[str, Any] = dict(
710
711
  type='http.response.start',
711
712
  status=500,
712
- headers=[(b'content-type', b'application/json')],
713
+ headers=[(b'content-type', b'text/plain')],
713
714
  )
714
715
 
715
716
  # Timeout response start
716
717
  timeout_response_dict: Dict[str, Any] = dict(
717
718
  type='http.response.start',
718
719
  status=504,
719
- headers=[(b'content-type', b'application/json')],
720
+ headers=[(b'content-type', b'text/plain')],
720
721
  )
721
722
 
722
723
  # Cancel response start
723
724
  cancel_response_dict: Dict[str, Any] = dict(
724
725
  type='http.response.start',
725
726
  status=503,
726
- headers=[(b'content-type', b'application/json')],
727
+ headers=[(b'content-type', b'text/plain')],
727
728
  )
728
729
 
729
730
  # JSON response start
@@ -1247,12 +1248,10 @@ class Application(object):
1247
1248
  'timeout': func_info['timeout'],
1248
1249
  },
1249
1250
  )
1250
- body = json.dumps(
1251
- dict(
1252
- error='[TimeoutError] Function call timed out after ' +
1253
- str(func_info['timeout']) +
1254
- ' seconds',
1255
- ),
1251
+ body = (
1252
+ 'TimeoutError: Function call timed out after ' +
1253
+ str(func_info['timeout']) +
1254
+ ' seconds'
1256
1255
  ).encode('utf-8')
1257
1256
  await send(self.timeout_response_dict)
1258
1257
 
@@ -1265,11 +1264,7 @@ class Application(object):
1265
1264
  'function_name': func_name.decode('utf-8'),
1266
1265
  },
1267
1266
  )
1268
- body = json.dumps(
1269
- dict(
1270
- error='[CancelledError] Function call was cancelled',
1271
- ),
1272
- ).encode('utf-8')
1267
+ body = b'CancelledError: Function call was cancelled'
1273
1268
  await send(self.cancel_response_dict)
1274
1269
 
1275
1270
  except Exception as e:
@@ -1282,11 +1277,12 @@ class Application(object):
1282
1277
  'exception_type': type(e).__name__,
1283
1278
  },
1284
1279
  )
1285
- body = json.dumps(
1286
- dict(
1287
- error=f'[{type(e).__name__}] {str(e).strip()}',
1288
- ),
1289
- ).encode('utf-8')
1280
+ msg = traceback.format_exc().strip().split(' File ')[-1]
1281
+ if msg.startswith('"/tmp/ipykernel_'):
1282
+ msg = 'Line ' + msg.split(', line ')[-1]
1283
+ else:
1284
+ msg = 'File ' + msg
1285
+ body = msg.encode('utf-8')
1290
1286
  await send(self.error_response_dict)
1291
1287
 
1292
1288
  finally:
@@ -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.5
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=x1zaDVImJ4CWAfQPrICls-q50fsaCFB1_bbelHM2Y-Q,207264
2
- singlestoredb-1.15.5.dist-info/RECORD,,
3
- singlestoredb-1.15.5.dist-info/LICENSE,sha256=Mlq78idURT-9G026aMYswwwnnrLcgzTLuXeAs5hjDLM,11341
4
- singlestoredb-1.15.5.dist-info/WHEEL,sha256=_VEguvlLpUd-c8RbFMA4yMIVNMBv2LhpxYLCEQ-Bogk,113
5
- singlestoredb-1.15.5.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
6
- singlestoredb-1.15.5.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
7
- singlestoredb-1.15.5.dist-info/METADATA,sha256=deTmpWalhUYHaanjCuaVrQLIld_rfhdAPF6a1Fwa18A,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=laZYv8Vwx1AbBnqnp8ESXHckpITWCEmLX7WlFArId-Y,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
@@ -156,7 +156,7 @@ singlestoredb/functions/dtypes.py,sha256=DgJaNXouJ2t-qIqDiQlUYU9IhkXXUTigWeE_MAc
156
156
  singlestoredb/functions/utils.py,sha256=1L0Phgzq0XdWK3ecfOOydq4zV955yCwpDoAaCYRGldk,10769
157
157
  singlestoredb/functions/signature.py,sha256=h2vFVNP07d5a3gi7zMiM_sztDUNK_HlJWR-Rl3nMxPA,45545
158
158
  singlestoredb/functions/ext/timer.py,sha256=-PR__KbhwAMW4PXJ4fGri2FfrU0jRyz6e6yvmySmjaw,2706
159
- singlestoredb/functions/ext/asgi.py,sha256=HWbSuYpAOfq-iS7oKDdXCkz5OIaMOGnXYwrTIVzFqOM,72370
159
+ singlestoredb/functions/ext/asgi.py,sha256=C6UJXunHY-dISp4k4CH-poEt8dyzqIjLQpuj06_ttRA,72268
160
160
  singlestoredb/functions/ext/arrow.py,sha256=WB7n1ACslyd8nlbFzUvlbxn1BVuEjA9-BGBEqCWlSOo,9061
161
161
  singlestoredb/functions/ext/__init__.py,sha256=1oLL20yLB1GL9IbFiZD8OReDqiCpFr-yetIR6x1cNkI,23
162
162
  singlestoredb/functions/ext/utils.py,sha256=oU2NVmkjcS0QHLfdB8SBiRylVq-r0VzTy8nxGvAgjow,6938