Skip to content

Commit f925b75

Browse files
committed
RDBC-935 Finished the job, cleanup, tests, bugfixes
1 parent 5323ddb commit f925b75

File tree

20 files changed

+1447
-374
lines changed

20 files changed

+1447
-374
lines changed

ravendb/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
)
109109

110110
from ravendb.documents.operations.etl.configuration import EtlConfiguration, RavenEtlConfiguration
111-
from ravendb.documents.operations.etl.olap import OlapEtlConfiguration
111+
from ravendb.documents.operations.etl.olap.connection import OlapEtlConfiguration
112112
from ravendb.documents.operations.etl.sql import SqlEtlConfiguration
113113
from ravendb.documents.operations.executor import MaintenanceOperationExecutor, SessionOperationExecutor
114114
from ravendb.documents.operations.expiration.configuration import ExpirationConfiguration

ravendb/documents/operations/ai/ai_connection_string.py

Lines changed: 75 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import enum
22
from typing import Optional, Dict, Any
33

4-
import ravendb.serverwide.server_operation_executor
4+
from ravendb.serverwide.server_operation_executor import ConnectionStringType
55
from ravendb.documents.operations.ai.azure_open_ai_settings import AzureOpenAiSettings
66
from ravendb.documents.operations.ai.embedded_settings import EmbeddedSettings
77
from ravendb.documents.operations.ai.google_settings import GoogleSettings
@@ -13,7 +13,7 @@
1313

1414

1515
class AiModelType(enum.Enum):
16-
TEXT_EMBEDDINGS = ("TextEmbeddings",)
16+
TEXT_EMBEDDINGS = "TextEmbeddings"
1717
CHAT = "Chat"
1818

1919

@@ -42,36 +42,91 @@ def __init__(
4242
self.mistral_ai_settings = mistral_ai_settings
4343
self.model_type = model_type
4444

45+
if not any(
46+
[
47+
openai_settings,
48+
azure_openai_settings,
49+
ollama_settings,
50+
embedded_settings,
51+
google_settings,
52+
huggingface_settings,
53+
mistral_ai_settings,
54+
]
55+
):
56+
raise ValueError(
57+
"Please provide at least one of the following settings: openai_settings, azure_openai_settings, ollama_settings, embedded_settings, google_settings, huggingface_settings, mistral_ai_settings"
58+
)
59+
60+
if model_type is None:
61+
raise ValueError("Please provide a model type - AiModelType.TEXT_EMBEDDINGS or AiModelType.CHAT")
62+
63+
settings_set_count = 0
64+
for setting in [
65+
openai_settings,
66+
azure_openai_settings,
67+
ollama_settings,
68+
embedded_settings,
69+
google_settings,
70+
huggingface_settings,
71+
mistral_ai_settings,
72+
]:
73+
if setting:
74+
settings_set_count += 1 if setting else 0
75+
if settings_set_count > 1:
76+
raise ValueError(
77+
"Please provide only one of the following settings: openai_settings, azure_openai_settings, ollama_settings, embedded_settings, google_settings, huggingface_settings, mistral_ai_settings"
78+
)
79+
4580
@property
4681
def get_type(self):
47-
return ravendb.serverwide.server_operation_executor.ConnectionStringType.AI.value
82+
return ConnectionStringType.AI.value
4883

4984
def to_json(self) -> Dict[str, Any]:
5085
return {
5186
"Name": self.name,
5287
"Identifier": self.identifier,
53-
"OpenaiSettings": self.openai_settings,
54-
"AzureOpenaiSettings": self.azure_openai_settings,
55-
"ollama_settings": self.ollama_settings,
56-
"EmbeddedSettings": self.embedded_settings,
57-
"GoogleSettings": self.google_settings,
58-
"HuggingfaceSettings": self.huggingface_settings,
59-
"MistralAiSettings": self.mistral_ai_settings,
60-
"ModelType": self.model_type,
61-
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.OLAP,
88+
"OpenAiSettings": self.openai_settings.to_json() if self.openai_settings else None,
89+
"AzureOpenAiSettings": self.azure_openai_settings.to_json() if self.azure_openai_settings else None,
90+
"OllamaSettings": self.ollama_settings.to_json() if self.ollama_settings else None,
91+
"EmbeddedSettings": self.embedded_settings.to_json() if self.embedded_settings else None,
92+
"GoogleSettings": self.google_settings.to_json() if self.google_settings else None,
93+
"HuggingFaceSettings": self.huggingface_settings.to_json() if self.huggingface_settings else None,
94+
"MistralAiSettings": self.mistral_ai_settings.to_json() if self.mistral_ai_settings else None,
95+
"ModelType": self.model_type.value if self.model_type else None,
96+
"Type": self.get_type,
6297
}
6398

6499
@classmethod
65100
def from_json(cls, json_dict: Dict[str, Any]) -> "AiConnectionString":
66101
return cls(
67102
name=json_dict["Name"],
68103
identifier=json_dict["Identifier"],
69-
openai_settings=OpenAiSettings.from_json(json_dict["OpenaiSettings"]),
70-
azure_openai_settings=AzureOpenAiSettings.from_json(json_dict["AzureOpenaiSettings"]),
71-
ollama_settings=OllamaSettings.from_json(json_dict["ollama_settings"]),
72-
embedded_settings=EmbeddedSettings.from_json(json_dict["EmbeddedSettings"]),
73-
google_settings=GoogleSettings.from_json(json_dict["GoogleSettings"]),
74-
huggingface_settings=HuggingFaceSettings.from_json(json_dict["HuggingfaceSettings"]),
75-
mistral_ai_settings=MistralAiSettings.from_json(json_dict["MistralAiSettings"]),
76-
model_type=AiModelType(json_dict["ModelType"]) if json_dict["ModelType"] else None,
104+
openai_settings=(
105+
OpenAiSettings.from_json(json_dict["OpenAiSettings"]) if json_dict.get("OpenAiSettings") else None
106+
),
107+
azure_openai_settings=(
108+
AzureOpenAiSettings.from_json(json_dict["AzureOpenAiSettings"])
109+
if json_dict.get("AzureOpenAiSettings")
110+
else None
111+
),
112+
ollama_settings=(
113+
OllamaSettings.from_json(json_dict["OllamaSettings"]) if json_dict.get("OllamaSettings") else None
114+
),
115+
embedded_settings=(
116+
EmbeddedSettings.from_json(json_dict["EmbeddedSettings"]) if json_dict.get("EmbeddedSettings") else None
117+
),
118+
google_settings=(
119+
GoogleSettings.from_json(json_dict["GoogleSettings"]) if json_dict.get("GoogleSettings") else None
120+
),
121+
huggingface_settings=(
122+
HuggingFaceSettings.from_json(json_dict["HuggingFaceSettings"])
123+
if json_dict.get("HuggingFaceSettings")
124+
else None
125+
),
126+
mistral_ai_settings=(
127+
MistralAiSettings.from_json(json_dict["MistralAiSettings"])
128+
if json_dict.get("MistralAiSettings")
129+
else None
130+
),
131+
model_type=AiModelType(json_dict["ModelType"]) if json_dict.get("ModelType") else None,
77132
)

ravendb/documents/operations/ai/azure_open_ai_settings.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ def __init__(
1919
@classmethod
2020
def from_json(cls, json_dict: Dict[str, Any]) -> "AzureOpenAiSettings":
2121
return cls(
22-
api_key=json_dict["ApiKey"],
23-
endpoint=json_dict["Endpoint"],
24-
model=json_dict["Model"],
25-
dimensions=json_dict["Dimensions"],
26-
temperature=json_dict["Temperature"],
27-
deployment_name=json_dict["DeploymentName"],
22+
api_key=json_dict["ApiKey"] if "ApiKey" in json_dict else None,
23+
endpoint=json_dict["Endpoint"] if "Endpoint" in json_dict else None,
24+
model=json_dict["Model"] if "Model" in json_dict else None,
25+
dimensions=json_dict["Dimensions"] if "Dimensions" in json_dict else None,
26+
temperature=json_dict["Temperature"] if "Temperature" in json_dict else None,
27+
deployment_name=json_dict["DeploymentName"] if "DeploymentName" in json_dict else None,
2828
)
2929

3030
def to_json(self) -> Dict[str, Any]:
@@ -35,5 +35,4 @@ def to_json(self) -> Dict[str, Any]:
3535
"Dimensions": self.dimensions,
3636
"Temperature": self.temperature,
3737
"DeploymentName": self.deployment_name,
38-
"EmbeddingsMaxConcurrentBatches": self.embeddings_max_concurrent_batches,
3938
}

ravendb/documents/operations/ai/google_settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66

77
class GoogleAiVersion(Enum):
8-
V1 = ("V1",)
9-
V1_Beta = ("V1_Beta",)
8+
V1 = "V1"
9+
V1_Beta = "V1_Beta"
1010

1111

1212
class GoogleSettings(AbstractAiSettings):

ravendb/documents/operations/ai/ollama_settings.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,31 @@
44

55

66
class OllamaSettings(AbstractAiSettings):
7-
def __init__(self, uri: str = None, model: str = None):
7+
def __init__(
8+
self,
9+
uri: str = None,
10+
model: str = None,
11+
think: bool = None,
12+
temperature: float = None,
13+
embeddings_max_concurrent_batches: int = None,
14+
):
815
super().__init__()
916
self.uri = uri
1017
self.model = model
11-
self.think: bool = None
12-
self.temperature: float = None
18+
self.think = think
19+
self.temperature = temperature
20+
self.embeddings_max_concurrent_batches = embeddings_max_concurrent_batches
1321

1422
@classmethod
1523
def from_json(cls, json_dict: Dict[str, Any]) -> "OllamaSettings":
1624
return cls(
17-
uri=json_dict["Uri"],
18-
model=json_dict["Model"],
25+
uri=json_dict["Uri"] if "Uri" in json_dict else None,
26+
model=json_dict["Model"] if "Model" in json_dict else None,
27+
think=json_dict["Think"] if "Think" in json_dict else None,
28+
temperature=json_dict["Temperature"] if "Temperature" in json_dict else None,
29+
embeddings_max_concurrent_batches=(
30+
json_dict["EmbeddingsMaxConcurrentBatches"] if "EmbeddingsMaxConcurrentBatches" in json_dict else None
31+
),
1932
)
2033

2134
def to_json(self) -> Dict[str, Any]:

ravendb/documents/operations/ai/open_ai_settings.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ def from_json(cls, json_dict: Dict[str, Any]) -> "OpenAiSettings":
2424
api_key=json_dict["ApiKey"],
2525
endpoint=json_dict["Endpoint"],
2626
model=json_dict["Model"],
27-
dimensions=json_dict["Dimensions"],
28-
temperature=json_dict["Temperature"],
29-
organization_id=json_dict["OrganizationId"],
30-
project_id=json_dict["ProjectId"],
27+
dimensions=json_dict["Dimensions"] if "Dimensions" in json_dict else None,
28+
temperature=json_dict["Temperature"] if "Temperature" in json_dict else None,
29+
organization_id=json_dict["OrganizationId"] if "OrganizationId" in json_dict else None,
30+
project_id=json_dict["ProjectId"] if "ProjectId" in json_dict else None,
3131
)
3232

3333
def to_json(self) -> Dict[str, Any]:

ravendb/documents/operations/backups/settings.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -259,19 +259,15 @@ def __init__(
259259
disabled: bool = None,
260260
get_backup_configuration_script: GetBackupConfigurationScript = None,
261261
url: str = None,
262-
port: int = None,
263262
user_name: str = None,
264263
password: str = None,
265264
certificate_as_base64: str = None,
266-
certificate_file_name: str = None,
267265
):
268266
super().__init__(disabled, get_backup_configuration_script)
269267
self.url = url
270-
self.port = port
271268
self.user_name = user_name
272269
self.password = password
273270
self.certificate_as_base64 = certificate_as_base64
274-
self.certificate_file_name = certificate_file_name
275271

276272
@classmethod
277273
def from_json(cls, json_dict: Dict[str, Any]) -> FtpSettings:
@@ -283,11 +279,9 @@ def from_json(cls, json_dict: Dict[str, Any]) -> FtpSettings:
283279
else None
284280
),
285281
json_dict["Url"],
286-
json_dict["Port"] if "Port" in json_dict else None,
287282
json_dict["UserName"],
288283
json_dict["Password"],
289284
json_dict["CertificateAsBase64"],
290-
json_dict["CertificateFileName"] if "CertificateFileName" in json_dict else None,
291285
)
292286

293287
def to_json(self) -> Dict[str, Any]:
@@ -297,11 +291,9 @@ def to_json(self) -> Dict[str, Any]:
297291
self.get_backup_configuration_script.to_json() if self.get_backup_configuration_script else None
298292
),
299293
"Url": self.url,
300-
"Port": self.port,
301294
"UserName": self.user_name,
302295
"Password": self.password,
303296
"CertificateAsBase64": self.certificate_as_base64,
304-
"CertificateFileName": self.certificate_file_name,
305297
}
306298

307299

ravendb/documents/operations/connection_string/get_connection_string_operation.py

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
from ravendb.documents.operations.ai.ai_connection_string import AiConnectionString
88
from ravendb.documents.operations.definitions import MaintenanceOperation
99
from ravendb.documents.operations.etl.configuration import RavenConnectionString
10-
from ravendb.documents.operations.etl.elastic_search import ElasticSearchConnectionString
11-
from ravendb.documents.operations.etl.olap import OlapConnectionString
12-
from ravendb.documents.operations.etl.queue import QueueConnectionString
13-
from ravendb.documents.operations.etl.snowflake import SnowflakeConnectionString
10+
from ravendb.documents.operations.etl.elastic_search.connection import ElasticSearchConnectionString
11+
from ravendb.documents.operations.etl.olap.connection import OlapConnectionString
12+
from ravendb.documents.operations.etl.queue.connection import QueueConnectionString
13+
from ravendb.documents.operations.etl.snowflake.connection import SnowflakeConnectionString
1414
from ravendb.documents.operations.etl.sql import SqlConnectionString
1515
from ravendb.serverwide.server_operation_executor import ConnectionStringType
1616

@@ -46,15 +46,52 @@ def to_json(self) -> Dict:
4646
}
4747

4848
@classmethod
49-
def from_json(cls, json_dict: Dict) -> "GetConnectionStringsResult":
49+
def from_json(cls, json_dict: Dict[str, Dict]) -> "GetConnectionStringsResult":
5050
return cls(
51-
raven_connection_strings=json_dict["RavenConnectionStrings"],
52-
sql_connection_strings=json_dict["SqlConnectionStrings"],
53-
olap_connection_strings=json_dict["OlapConnectionStrings"],
54-
ai_connection_strings=json_dict["AiConnectionStrings"],
55-
elastic_search_connection_strings=json_dict["ElasticSearchConnectionStrings"],
56-
queue_connection_strings=json_dict["QueueConnectionStrings"],
57-
snowflake_connection_strings=json_dict["SnowflakeConnectionStrings"],
51+
raven_connection_strings=(
52+
{key: RavenConnectionString.from_json(rcs) for key, rcs in json_dict["RavenConnectionStrings"].items()}
53+
if json_dict["RavenConnectionStrings"]
54+
else None
55+
),
56+
sql_connection_strings=(
57+
{key: SqlConnectionString.from_json(sqlcs) for key, sqlcs in json_dict["SqlConnectionStrings"].items()}
58+
if json_dict["SqlConnectionStrings"]
59+
else None
60+
),
61+
olap_connection_strings=(
62+
{
63+
key: OlapConnectionString.from_json(olapcs)
64+
for key, olapcs in json_dict["OlapConnectionStrings"].items()
65+
}
66+
if json_dict["OlapConnectionStrings"]
67+
else None
68+
),
69+
ai_connection_strings=(
70+
{key: AiConnectionString.from_json(aics) for key, aics in json_dict["AiConnectionStrings"].items()}
71+
if json_dict["AiConnectionStrings"]
72+
else None
73+
),
74+
elastic_search_connection_strings=(
75+
{
76+
key: ElasticSearchConnectionString.from_json(escs)
77+
for key, escs in json_dict["ElasticSearchConnectionStrings"].items()
78+
}
79+
if json_dict["ElasticSearchConnectionStrings"]
80+
else None
81+
),
82+
queue_connection_strings=(
83+
{key: QueueConnectionString.from_json(qcs) for key, qcs in json_dict["QueueConnectionStrings"].items()}
84+
if json_dict["QueueConnectionStrings"]
85+
else None
86+
),
87+
snowflake_connection_strings=(
88+
{
89+
key: SnowflakeConnectionString.from_json(scs)
90+
for key, scs in json_dict["SnowflakeConnectionStrings"].items()
91+
}
92+
if json_dict["SnowflakeConnectionStrings"]
93+
else None
94+
),
5895
)
5996

6097

ravendb/documents/operations/connection_string/put_connection_string_operation.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
from ravendb import ConnectionString, RavenCommand, ServerNode, RaftCommand
77
from ravendb.documents.conventions import DocumentConventions
88
from ravendb.documents.operations.definitions import MaintenanceOperation
9-
from ravendb.documents.operations.etl.configuration import RavenConnectionString
10-
from ravendb.documents.operations.etl.olap import OlapConnectionString
11-
from ravendb.documents.operations.etl.sql import SqlConnectionString
12-
from ravendb.serverwide.server_operation_executor import ConnectionStringType
139
from ravendb.util.util import RaftIdGenerator
1410

1511

0 commit comments

Comments
 (0)