dao-ai 0.0.12__py3-none-any.whl → 0.0.13__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/config.py CHANGED
@@ -351,12 +351,82 @@ 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 create(self, w: WorkspaceClient | None = None) -> None:
413
+ from dao_ai.providers.databricks import DatabricksProvider
414
+
415
+ if self.volume:
416
+ self.volume.create(w=w)
417
+
418
+ provider: DatabricksProvider = DatabricksProvider(w=w)
419
+ provider.create_path(self)
420
+
421
+
354
422
  class VectorStoreModel(BaseModel, IsDatabricksResource):
355
423
  model_config = ConfigDict(use_enum_values=True, extra="forbid")
356
424
  embedding_model: Optional[LLMModel] = None
357
425
  index: Optional[IndexModel] = None
358
426
  endpoint: Optional[VectorSearchEndpoint] = None
359
427
  source_table: TableModel
428
+ source_path: Optional[VolumePathModel] = None
429
+ checkpoint_path: Optional[VolumePathModel] = None
360
430
  primary_key: Optional[str] = None
361
431
  columns: Optional[list[str]] = Field(default_factory=list)
362
432
  doc_uri: Optional[str] = None
@@ -448,43 +518,6 @@ class VectorStoreModel(BaseModel, IsDatabricksResource):
448
518
  provider.create_vector_store(self)
449
519
 
450
520
 
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
521
  class FunctionModel(BaseModel, HasFullName, IsDatabricksResource):
489
522
  model_config = ConfigDict()
490
523
  schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
@@ -1107,21 +1140,6 @@ class DatasetFormat(str, Enum):
1107
1140
  EXCEL = "excel"
1108
1141
 
1109
1142
 
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
1143
  class DatasetModel(BaseModel):
1126
1144
  model_config = ConfigDict(use_enum_values=True, extra="forbid")
1127
1145
  table: Optional[TableModel] = None
@@ -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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dao-ai
3
- Version: 0.0.12
3
+ Version: 0.0.13
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
@@ -3,7 +3,7 @@ dao_ai/agent_as_code.py,sha256=WjBUJzHMAEX7joMaQGgBgnofiKxjJjdQEVsBJ4VSkPA,655
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=vT3CYFmTDzxc7zSLIat4B5vt-Q4Su-tl3BvFVbkXQIo,44197
6
+ dao_ai/config.py,sha256=UrETOJK_sTJAaKD91Pkc_alG9wfzfWbMeHxtxdnUZhQ,44881
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=vV11SptrzIBEQQyiUqrysMfdpKKPrhVPvUVeEOQxx0o,27684
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
@@ -33,8 +33,8 @@ 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
35
  dao_ai/tools/vector_search.py,sha256=kLveW-JGwc4IbJ7fKclJFmDXhP3h5XBrjljgab2tRD4,2559
36
- dao_ai-0.0.12.dist-info/METADATA,sha256=20Ysj-78vWn6m64Bw0_OWjjGXNwiFDSV8ORbpcwLr_8,41338
37
- dao_ai-0.0.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
38
- dao_ai-0.0.12.dist-info/entry_points.txt,sha256=Xa-UFyc6gWGwMqMJOt06ZOog2vAfygV_DSwg1AiP46g,43
39
- dao_ai-0.0.12.dist-info/licenses/LICENSE,sha256=YZt3W32LtPYruuvHE9lGk2bw6ZPMMJD8yLrjgHybyz4,1069
40
- dao_ai-0.0.12.dist-info/RECORD,,
36
+ dao_ai-0.0.13.dist-info/METADATA,sha256=rSKZRiJlzOUFYJXyo-ofNYVWWXjr_-dnrmbX34fb_8s,41338
37
+ dao_ai-0.0.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
38
+ dao_ai-0.0.13.dist-info/entry_points.txt,sha256=Xa-UFyc6gWGwMqMJOt06ZOog2vAfygV_DSwg1AiP46g,43
39
+ dao_ai-0.0.13.dist-info/licenses/LICENSE,sha256=YZt3W32LtPYruuvHE9lGk2bw6ZPMMJD8yLrjgHybyz4,1069
40
+ dao_ai-0.0.13.dist-info/RECORD,,