dao-ai 0.0.12__py3-none-any.whl → 0.0.14__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.
- dao_ai/agent_as_code.py +1 -6
- dao_ai/config.py +79 -52
- dao_ai/providers/databricks.py +7 -0
- dao_ai/tools/vector_search.py +2 -0
- {dao_ai-0.0.12.dist-info → dao_ai-0.0.14.dist-info}/METADATA +2 -2
- {dao_ai-0.0.12.dist-info → dao_ai-0.0.14.dist-info}/RECORD +9 -9
- {dao_ai-0.0.12.dist-info → dao_ai-0.0.14.dist-info}/WHEEL +0 -0
- {dao_ai-0.0.12.dist-info → dao_ai-0.0.14.dist-info}/entry_points.txt +0 -0
- {dao_ai-0.0.12.dist-info → dao_ai-0.0.14.dist-info}/licenses/LICENSE +0 -0
dao_ai/agent_as_code.py
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
|
|
3
3
|
import mlflow
|
|
4
|
-
from langgraph.graph.state import CompiledStateGraph
|
|
5
4
|
from loguru import logger
|
|
6
5
|
from mlflow.models import ModelConfig
|
|
7
6
|
from mlflow.pyfunc import ChatModel
|
|
8
7
|
|
|
9
8
|
from dao_ai.config import AppConfig
|
|
10
|
-
from dao_ai.graph import create_dao_ai_graph
|
|
11
|
-
from dao_ai.models import create_agent
|
|
12
9
|
|
|
13
10
|
mlflow.langchain.autolog()
|
|
14
11
|
|
|
@@ -20,8 +17,6 @@ log_level: str = config.app.log_level
|
|
|
20
17
|
logger.remove()
|
|
21
18
|
logger.add(sys.stderr, level=log_level)
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
app: ChatModel = create_agent(graph)
|
|
20
|
+
app: ChatModel = config.as_chat_model()
|
|
26
21
|
|
|
27
22
|
mlflow.models.set_model(app)
|
dao_ai/config.py
CHANGED
|
@@ -351,12 +351,85 @@ class IndexModel(BaseModel, HasFullName, IsDatabricksResource):
|
|
|
351
351
|
)
|
|
352
352
|
|
|
353
353
|
|
|
354
|
+
class GenieRoomModel(BaseModel, IsDatabricksResource):
|
|
355
|
+
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
356
|
+
name: str
|
|
357
|
+
description: Optional[str] = None
|
|
358
|
+
space_id: str
|
|
359
|
+
|
|
360
|
+
@property
|
|
361
|
+
def api_scopes(self) -> Sequence[str]:
|
|
362
|
+
return [
|
|
363
|
+
"dashboards.genie",
|
|
364
|
+
]
|
|
365
|
+
|
|
366
|
+
def as_resource(self) -> DatabricksResource:
|
|
367
|
+
return DatabricksGenieSpace(
|
|
368
|
+
genie_space_id=self.space_id, on_behalf_of_user=self.on_behalf_of_user
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
class VolumeModel(BaseModel, HasFullName):
|
|
373
|
+
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
374
|
+
schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
|
|
375
|
+
name: str
|
|
376
|
+
|
|
377
|
+
@property
|
|
378
|
+
def full_name(self) -> str:
|
|
379
|
+
if self.schema_model:
|
|
380
|
+
return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}.{self.name}"
|
|
381
|
+
return self.name
|
|
382
|
+
|
|
383
|
+
def create(self, w: WorkspaceClient | None = None) -> None:
|
|
384
|
+
from dao_ai.providers.base import ServiceProvider
|
|
385
|
+
from dao_ai.providers.databricks import DatabricksProvider
|
|
386
|
+
|
|
387
|
+
provider: ServiceProvider = DatabricksProvider(w=w)
|
|
388
|
+
provider.create_volume(self)
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
class VolumePathModel(BaseModel, HasFullName):
|
|
392
|
+
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
393
|
+
volume: Optional[VolumeModel] = None
|
|
394
|
+
path: Optional[str] = None
|
|
395
|
+
|
|
396
|
+
@model_validator(mode="after")
|
|
397
|
+
def validate_path_or_volume(self):
|
|
398
|
+
if not self.volume and not self.path:
|
|
399
|
+
raise ValueError("Either 'volume' or 'path' must be provided")
|
|
400
|
+
return self
|
|
401
|
+
|
|
402
|
+
@property
|
|
403
|
+
def full_name(self) -> str:
|
|
404
|
+
if self.volume and self.volume.schema_model:
|
|
405
|
+
catalog_name: str = self.volume.schema_model.catalog_name
|
|
406
|
+
schema_name: str = self.volume.schema_model.schema_name
|
|
407
|
+
volume_name: str = self.volume.name
|
|
408
|
+
path = f"/{self.path}" if self.path else ""
|
|
409
|
+
return f"/Volumes/{catalog_name}/{schema_name}/{volume_name}{path}"
|
|
410
|
+
return self.path
|
|
411
|
+
|
|
412
|
+
def as_path(self) -> Path:
|
|
413
|
+
return Path(self.full_name)
|
|
414
|
+
|
|
415
|
+
def create(self, w: WorkspaceClient | None = None) -> None:
|
|
416
|
+
from dao_ai.providers.databricks import DatabricksProvider
|
|
417
|
+
|
|
418
|
+
if self.volume:
|
|
419
|
+
self.volume.create(w=w)
|
|
420
|
+
|
|
421
|
+
provider: DatabricksProvider = DatabricksProvider(w=w)
|
|
422
|
+
provider.create_path(self)
|
|
423
|
+
|
|
424
|
+
|
|
354
425
|
class VectorStoreModel(BaseModel, IsDatabricksResource):
|
|
355
426
|
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
356
427
|
embedding_model: Optional[LLMModel] = None
|
|
357
428
|
index: Optional[IndexModel] = None
|
|
358
429
|
endpoint: Optional[VectorSearchEndpoint] = None
|
|
359
430
|
source_table: TableModel
|
|
431
|
+
source_path: Optional[VolumePathModel] = None
|
|
432
|
+
checkpoint_path: Optional[VolumePathModel] = None
|
|
360
433
|
primary_key: Optional[str] = None
|
|
361
434
|
columns: Optional[list[str]] = Field(default_factory=list)
|
|
362
435
|
doc_uri: Optional[str] = None
|
|
@@ -448,43 +521,6 @@ class VectorStoreModel(BaseModel, IsDatabricksResource):
|
|
|
448
521
|
provider.create_vector_store(self)
|
|
449
522
|
|
|
450
523
|
|
|
451
|
-
class GenieRoomModel(BaseModel, IsDatabricksResource):
|
|
452
|
-
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
453
|
-
name: str
|
|
454
|
-
description: Optional[str] = None
|
|
455
|
-
space_id: str
|
|
456
|
-
|
|
457
|
-
@property
|
|
458
|
-
def api_scopes(self) -> Sequence[str]:
|
|
459
|
-
return [
|
|
460
|
-
"dashboards.genie",
|
|
461
|
-
]
|
|
462
|
-
|
|
463
|
-
def as_resource(self) -> DatabricksResource:
|
|
464
|
-
return DatabricksGenieSpace(
|
|
465
|
-
genie_space_id=self.space_id, on_behalf_of_user=self.on_behalf_of_user
|
|
466
|
-
)
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
class VolumeModel(BaseModel, HasFullName):
|
|
470
|
-
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
471
|
-
schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
|
|
472
|
-
name: str
|
|
473
|
-
|
|
474
|
-
@property
|
|
475
|
-
def full_name(self) -> str:
|
|
476
|
-
if self.schema_model:
|
|
477
|
-
return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}.{self.name}"
|
|
478
|
-
return self.name
|
|
479
|
-
|
|
480
|
-
def create(self, w: WorkspaceClient | None = None) -> None:
|
|
481
|
-
from dao_ai.providers.base import ServiceProvider
|
|
482
|
-
from dao_ai.providers.databricks import DatabricksProvider
|
|
483
|
-
|
|
484
|
-
provider: ServiceProvider = DatabricksProvider(w=w)
|
|
485
|
-
provider.create_volume(self)
|
|
486
|
-
|
|
487
|
-
|
|
488
524
|
class FunctionModel(BaseModel, HasFullName, IsDatabricksResource):
|
|
489
525
|
model_config = ConfigDict()
|
|
490
526
|
schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
|
|
@@ -1093,6 +1129,8 @@ class EvaluationModel(BaseModel):
|
|
|
1093
1129
|
model: LLMModel
|
|
1094
1130
|
table: TableModel
|
|
1095
1131
|
num_evals: int
|
|
1132
|
+
agent_description: Optional[str] = None
|
|
1133
|
+
question_guidelines: Optional[str] = None
|
|
1096
1134
|
custom_inputs: dict[str, Any] = Field(default_factory=dict)
|
|
1097
1135
|
guidelines: list[GuidelineModel] = Field(default_factory=list)
|
|
1098
1136
|
|
|
@@ -1107,21 +1145,6 @@ class DatasetFormat(str, Enum):
|
|
|
1107
1145
|
EXCEL = "excel"
|
|
1108
1146
|
|
|
1109
1147
|
|
|
1110
|
-
class VolumePathModel(BaseModel, HasFullName):
|
|
1111
|
-
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
1112
|
-
volume: VolumeModel
|
|
1113
|
-
path: str
|
|
1114
|
-
|
|
1115
|
-
@property
|
|
1116
|
-
def full_name(self) -> str:
|
|
1117
|
-
if self.volume.schema_model:
|
|
1118
|
-
catalog_name: str = self.volume.schema_model.catalog_name
|
|
1119
|
-
schema_name: str = self.volume.schema_model.schema_name
|
|
1120
|
-
volume_name: str = self.volume.name
|
|
1121
|
-
return f"/Volumes/{catalog_name}/{schema_name}/{volume_name}/{self.path}"
|
|
1122
|
-
return f"/Volumes/{volume_name}/{self.path}"
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
1148
|
class DatasetModel(BaseModel):
|
|
1126
1149
|
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
1127
1150
|
table: Optional[TableModel] = None
|
|
@@ -1211,6 +1234,10 @@ class AppConfig(BaseModel):
|
|
|
1211
1234
|
def initialize(self) -> None:
|
|
1212
1235
|
from dao_ai.hooks.core import create_hooks
|
|
1213
1236
|
|
|
1237
|
+
if self.app and self.app.log_level:
|
|
1238
|
+
logger.remove()
|
|
1239
|
+
logger.add(sys.stderr, level=self.app.log_level)
|
|
1240
|
+
|
|
1214
1241
|
logger.debug("Calling initialization hooks...")
|
|
1215
1242
|
initialization_functions: Sequence[Callable[..., Any]] = create_hooks(
|
|
1216
1243
|
self.app.initialization_hooks
|
dao_ai/providers/databricks.py
CHANGED
|
@@ -54,6 +54,7 @@ from dao_ai.config import (
|
|
|
54
54
|
UnityCatalogFunctionSqlModel,
|
|
55
55
|
VectorStoreModel,
|
|
56
56
|
VolumeModel,
|
|
57
|
+
VolumePathModel,
|
|
57
58
|
WarehouseModel,
|
|
58
59
|
)
|
|
59
60
|
from dao_ai.models import get_latest_model_version
|
|
@@ -441,6 +442,12 @@ class DatabricksProvider(ServiceProvider):
|
|
|
441
442
|
)
|
|
442
443
|
return volume_info
|
|
443
444
|
|
|
445
|
+
def create_path(self, volume_path: VolumePathModel) -> Path:
|
|
446
|
+
path: Path = volume_path.full_name
|
|
447
|
+
logger.info(f"Creating volume path: {path}")
|
|
448
|
+
self.w.files.create_directory(path)
|
|
449
|
+
return path
|
|
450
|
+
|
|
444
451
|
def create_dataset(self, dataset: DatasetModel) -> None:
|
|
445
452
|
current_dir: Path = "file:///" / Path.cwd().relative_to("/")
|
|
446
453
|
|
dao_ai/tools/vector_search.py
CHANGED
|
@@ -51,7 +51,9 @@ def create_vector_search_tool(
|
|
|
51
51
|
|
|
52
52
|
vector_search_tool: BaseTool = VectorSearchRetrieverTool(
|
|
53
53
|
name=name,
|
|
54
|
+
tool_name=name,
|
|
54
55
|
description=description,
|
|
56
|
+
tool_description=description,
|
|
55
57
|
index_name=index_name,
|
|
56
58
|
columns=columns,
|
|
57
59
|
**search_parameters,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dao-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.14
|
|
4
4
|
Summary: DAO AI: A modular, multi-agent orchestration framework for complex AI workflows. Supports agent handoff, tool integration, and dynamic configuration via YAML.
|
|
5
5
|
Project-URL: Homepage, https://github.com/natefleming/dao-ai
|
|
6
6
|
Project-URL: Documentation, https://natefleming.github.io/dao-ai
|
|
@@ -38,7 +38,7 @@ Requires-Dist: langgraph>=0.6.5
|
|
|
38
38
|
Requires-Dist: langmem>=0.0.29
|
|
39
39
|
Requires-Dist: loguru>=0.7.3
|
|
40
40
|
Requires-Dist: mcp>=1.9.1
|
|
41
|
-
Requires-Dist: mlflow>=3.
|
|
41
|
+
Requires-Dist: mlflow>=3.3.2
|
|
42
42
|
Requires-Dist: nest-asyncio>=1.6.0
|
|
43
43
|
Requires-Dist: openevals>=0.0.19
|
|
44
44
|
Requires-Dist: openpyxl>=3.1.5
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
dao_ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
dao_ai/agent_as_code.py,sha256=
|
|
2
|
+
dao_ai/agent_as_code.py,sha256=rMWMC0nabtABHPD5H-Yy9ej7QNebLnXfvlZPiwrthoE,457
|
|
3
3
|
dao_ai/catalog.py,sha256=sPZpHTD3lPx4EZUtIWeQV7VQM89WJ6YH__wluk1v2lE,4947
|
|
4
4
|
dao_ai/chat_models.py,sha256=uhwwOTeLyHWqoTTgHrs4n5iSyTwe4EQcLKnh3jRxPWI,8626
|
|
5
5
|
dao_ai/cli.py,sha256=Aez2TQW3Q8Ho1IaIkRggt0NevDxAAVPjXkePC5GPJF0,20429
|
|
6
|
-
dao_ai/config.py,sha256=
|
|
6
|
+
dao_ai/config.py,sha256=VyHqkW1UMQJ0fzyme1fV_3fi_6wDmKRQeCrx881fDQ4,45173
|
|
7
7
|
dao_ai/graph.py,sha256=rIm6cLsWwViB3L1dIZp9qc-U-JgFNB5ngEi22Y3iVGQ,7806
|
|
8
8
|
dao_ai/guardrails.py,sha256=-Qh0f_2Db9t4Nbrrx9FM7tnpqShjMoyxepZ0HByItfU,4027
|
|
9
9
|
dao_ai/messages.py,sha256=tRZQTeb5YFKu8cm1xeaCkKhidq-0tdzncNEzVePvits,6806
|
|
@@ -22,7 +22,7 @@ dao_ai/memory/core.py,sha256=K45iCEFbqJCVxMi4m3vmBJi4c6TQ-UtKGzyugDTkPP0,4141
|
|
|
22
22
|
dao_ai/memory/postgres.py,sha256=YILzA7xtqawPAOLFaGG_i17zW7cQxXTzTD8yd-ipe8k,12480
|
|
23
23
|
dao_ai/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
24
|
dao_ai/providers/base.py,sha256=-fjKypCOk28h6vioPfMj9YZSw_3Kcbi2nMuAyY7vX9k,1383
|
|
25
|
-
dao_ai/providers/databricks.py,sha256=
|
|
25
|
+
dao_ai/providers/databricks.py,sha256=XRPOqwF5SeA9rPAOWMg2gSMC7lw31BI5VI_4K0KIOqo,27931
|
|
26
26
|
dao_ai/tools/__init__.py,sha256=ye6MHaJY7tUnJ8336YJiLxuZr55zDPNdOw6gm7j5jlc,1103
|
|
27
27
|
dao_ai/tools/agent.py,sha256=_XMz6HtrybpVthhRyStADechF6vXLFyK97i01XTBhtw,1868
|
|
28
28
|
dao_ai/tools/core.py,sha256=Kei33S8vrmvPOAyrFNekaWmV2jqZ-IPS1QDSvU7RZF0,1984
|
|
@@ -32,9 +32,9 @@ dao_ai/tools/mcp.py,sha256=rUeodCfGFXSvW-byTW9gsO6QI-p5SZkAP8ZFCFzREY0,4400
|
|
|
32
32
|
dao_ai/tools/python.py,sha256=XcQiTMshZyLUTVR5peB3vqsoUoAAy8gol9_pcrhddfI,1831
|
|
33
33
|
dao_ai/tools/time.py,sha256=Y-23qdnNHzwjvnfkWvYsE7PoWS1hfeKy44tA7sCnNac,8759
|
|
34
34
|
dao_ai/tools/unity_catalog.py,sha256=PXfLj2EgyQgaXq4Qq3t25AmTC4KyVCF_-sCtg6enens,1404
|
|
35
|
-
dao_ai/tools/vector_search.py,sha256=
|
|
36
|
-
dao_ai-0.0.
|
|
37
|
-
dao_ai-0.0.
|
|
38
|
-
dao_ai-0.0.
|
|
39
|
-
dao_ai-0.0.
|
|
40
|
-
dao_ai-0.0.
|
|
35
|
+
dao_ai/tools/vector_search.py,sha256=EDYQs51zIPaAP0ma1D81wJT77GQ-v-cjb2XrFVWfWdg,2621
|
|
36
|
+
dao_ai-0.0.14.dist-info/METADATA,sha256=jQdUAv02pr4wXZdMUJ9L_TksHGTCu4X_vrBKwvzIp4A,41338
|
|
37
|
+
dao_ai-0.0.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
38
|
+
dao_ai-0.0.14.dist-info/entry_points.txt,sha256=Xa-UFyc6gWGwMqMJOt06ZOog2vAfygV_DSwg1AiP46g,43
|
|
39
|
+
dao_ai-0.0.14.dist-info/licenses/LICENSE,sha256=YZt3W32LtPYruuvHE9lGk2bw6ZPMMJD8yLrjgHybyz4,1069
|
|
40
|
+
dao_ai-0.0.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|