dhisana 0.0.1.dev243__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.
- dhisana/__init__.py +1 -0
- dhisana/cli/__init__.py +1 -0
- dhisana/cli/cli.py +20 -0
- dhisana/cli/datasets.py +27 -0
- dhisana/cli/models.py +26 -0
- dhisana/cli/predictions.py +20 -0
- dhisana/schemas/__init__.py +1 -0
- dhisana/schemas/common.py +399 -0
- dhisana/schemas/sales.py +965 -0
- dhisana/ui/__init__.py +1 -0
- dhisana/ui/components.py +472 -0
- dhisana/utils/__init__.py +1 -0
- dhisana/utils/add_mapping.py +352 -0
- dhisana/utils/agent_tools.py +51 -0
- dhisana/utils/apollo_tools.py +1597 -0
- dhisana/utils/assistant_tool_tag.py +4 -0
- dhisana/utils/built_with_api_tools.py +282 -0
- dhisana/utils/cache_output_tools.py +98 -0
- dhisana/utils/cache_output_tools_local.py +78 -0
- dhisana/utils/check_email_validity_tools.py +717 -0
- dhisana/utils/check_for_intent_signal.py +107 -0
- dhisana/utils/check_linkedin_url_validity.py +209 -0
- dhisana/utils/clay_tools.py +43 -0
- dhisana/utils/clean_properties.py +135 -0
- dhisana/utils/company_utils.py +60 -0
- dhisana/utils/compose_salesnav_query.py +259 -0
- dhisana/utils/compose_search_query.py +759 -0
- dhisana/utils/compose_three_step_workflow.py +234 -0
- dhisana/utils/composite_tools.py +137 -0
- dhisana/utils/dataframe_tools.py +237 -0
- dhisana/utils/domain_parser.py +45 -0
- dhisana/utils/email_body_utils.py +72 -0
- dhisana/utils/email_parse_helpers.py +132 -0
- dhisana/utils/email_provider.py +375 -0
- dhisana/utils/enrich_lead_information.py +933 -0
- dhisana/utils/extract_email_content_for_llm.py +101 -0
- dhisana/utils/fetch_openai_config.py +129 -0
- dhisana/utils/field_validators.py +426 -0
- dhisana/utils/g2_tools.py +104 -0
- dhisana/utils/generate_content.py +41 -0
- dhisana/utils/generate_custom_message.py +271 -0
- dhisana/utils/generate_email.py +278 -0
- dhisana/utils/generate_email_response.py +465 -0
- dhisana/utils/generate_flow.py +102 -0
- dhisana/utils/generate_leads_salesnav.py +303 -0
- dhisana/utils/generate_linkedin_connect_message.py +224 -0
- dhisana/utils/generate_linkedin_response_message.py +317 -0
- dhisana/utils/generate_structured_output_internal.py +462 -0
- dhisana/utils/google_custom_search.py +267 -0
- dhisana/utils/google_oauth_tools.py +727 -0
- dhisana/utils/google_workspace_tools.py +1294 -0
- dhisana/utils/hubspot_clearbit.py +96 -0
- dhisana/utils/hubspot_crm_tools.py +2440 -0
- dhisana/utils/instantly_tools.py +149 -0
- dhisana/utils/linkedin_crawler.py +168 -0
- dhisana/utils/lusha_tools.py +333 -0
- dhisana/utils/mailgun_tools.py +156 -0
- dhisana/utils/mailreach_tools.py +123 -0
- dhisana/utils/microsoft365_tools.py +455 -0
- dhisana/utils/openai_assistant_and_file_utils.py +267 -0
- dhisana/utils/openai_helpers.py +977 -0
- dhisana/utils/openapi_spec_to_tools.py +45 -0
- dhisana/utils/openapi_tool/__init__.py +1 -0
- dhisana/utils/openapi_tool/api_models.py +633 -0
- dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py +271 -0
- dhisana/utils/openapi_tool/openapi_tool.py +319 -0
- dhisana/utils/parse_linkedin_messages_txt.py +100 -0
- dhisana/utils/profile.py +37 -0
- dhisana/utils/proxy_curl_tools.py +1226 -0
- dhisana/utils/proxycurl_search_leads.py +426 -0
- dhisana/utils/python_function_to_tools.py +83 -0
- dhisana/utils/research_lead.py +176 -0
- dhisana/utils/sales_navigator_crawler.py +1103 -0
- dhisana/utils/salesforce_crm_tools.py +477 -0
- dhisana/utils/search_router.py +131 -0
- dhisana/utils/search_router_jobs.py +51 -0
- dhisana/utils/sendgrid_tools.py +162 -0
- dhisana/utils/serarch_router_local_business.py +75 -0
- dhisana/utils/serpapi_additional_tools.py +290 -0
- dhisana/utils/serpapi_google_jobs.py +117 -0
- dhisana/utils/serpapi_google_search.py +188 -0
- dhisana/utils/serpapi_local_business_search.py +129 -0
- dhisana/utils/serpapi_search_tools.py +852 -0
- dhisana/utils/serperdev_google_jobs.py +125 -0
- dhisana/utils/serperdev_local_business.py +154 -0
- dhisana/utils/serperdev_search.py +233 -0
- dhisana/utils/smtp_email_tools.py +582 -0
- dhisana/utils/test_connect.py +2087 -0
- dhisana/utils/trasform_json.py +173 -0
- dhisana/utils/web_download_parse_tools.py +189 -0
- dhisana/utils/workflow_code_model.py +5 -0
- dhisana/utils/zoominfo_tools.py +357 -0
- dhisana/workflow/__init__.py +1 -0
- dhisana/workflow/agent.py +18 -0
- dhisana/workflow/flow.py +44 -0
- dhisana/workflow/task.py +43 -0
- dhisana/workflow/test.py +90 -0
- dhisana-0.0.1.dev243.dist-info/METADATA +43 -0
- dhisana-0.0.1.dev243.dist-info/RECORD +102 -0
- dhisana-0.0.1.dev243.dist-info/WHEEL +5 -0
- dhisana-0.0.1.dev243.dist-info/entry_points.txt +2 -0
- dhisana-0.0.1.dev243.dist-info/top_level.txt +1 -0
dhisana/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
|
dhisana/cli/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
|
dhisana/cli/cli.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import click
|
|
2
|
+
from .models import model_cli
|
|
3
|
+
from .datasets import dataset_cli
|
|
4
|
+
from .predictions import prediction_cli
|
|
5
|
+
|
|
6
|
+
@click.group()
|
|
7
|
+
def cli():
|
|
8
|
+
"""Dhisana AI SDK CLI."""
|
|
9
|
+
pass
|
|
10
|
+
|
|
11
|
+
# Add command groups from the respective CLI files
|
|
12
|
+
cli.add_command(model_cli)
|
|
13
|
+
cli.add_command(dataset_cli)
|
|
14
|
+
cli.add_command(prediction_cli)
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
cli()
|
|
18
|
+
|
|
19
|
+
if __name__ == '__main__':
|
|
20
|
+
main()
|
dhisana/cli/datasets.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import click
|
|
2
|
+
|
|
3
|
+
@click.group()
|
|
4
|
+
def dataset_cli():
|
|
5
|
+
"""Commands for managing datasets."""
|
|
6
|
+
pass
|
|
7
|
+
|
|
8
|
+
@dataset_cli.command()
|
|
9
|
+
def list():
|
|
10
|
+
"""List all datasets."""
|
|
11
|
+
# Example placeholder logic for listing datasets
|
|
12
|
+
click.echo("Datasets: dataset1, dataset2, dataset3")
|
|
13
|
+
|
|
14
|
+
@dataset_cli.command()
|
|
15
|
+
@click.argument('dataset_name')
|
|
16
|
+
@click.option('--file-path', required=True, help='Path to the dataset file')
|
|
17
|
+
def add(dataset_name, file_path):
|
|
18
|
+
"""Add a new dataset."""
|
|
19
|
+
# Example placeholder logic for adding a dataset
|
|
20
|
+
click.echo(f"Dataset '{dataset_name}' has been added from '{file_path}'.")
|
|
21
|
+
|
|
22
|
+
@dataset_cli.command()
|
|
23
|
+
@click.argument('dataset_name')
|
|
24
|
+
def delete(dataset_name):
|
|
25
|
+
"""Delete an existing dataset."""
|
|
26
|
+
# Example placeholder logic for deleting a dataset
|
|
27
|
+
click.echo(f"Dataset '{dataset_name}' has been deleted.")
|
dhisana/cli/models.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import click
|
|
2
|
+
|
|
3
|
+
@click.group()
|
|
4
|
+
def model_cli():
|
|
5
|
+
"""Commands for managing models."""
|
|
6
|
+
pass
|
|
7
|
+
|
|
8
|
+
@model_cli.command()
|
|
9
|
+
def list():
|
|
10
|
+
"""List all available models."""
|
|
11
|
+
# Example placeholder logic for listing models
|
|
12
|
+
click.echo("Available models: model1, model2, model3")
|
|
13
|
+
|
|
14
|
+
@model_cli.command()
|
|
15
|
+
@click.argument('model_name')
|
|
16
|
+
def add(model_name):
|
|
17
|
+
"""Add a new model."""
|
|
18
|
+
# Example placeholder logic for adding a model
|
|
19
|
+
click.echo(f"Model '{model_name}' has been added.")
|
|
20
|
+
|
|
21
|
+
@model_cli.command()
|
|
22
|
+
@click.argument('model_name')
|
|
23
|
+
def delete(model_name):
|
|
24
|
+
"""Delete an existing model."""
|
|
25
|
+
# Example placeholder logic for deleting a model
|
|
26
|
+
click.echo(f"Model '{model_name}' has been deleted.")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import click
|
|
2
|
+
|
|
3
|
+
@click.group()
|
|
4
|
+
def prediction_cli():
|
|
5
|
+
"""Commands for running predictions."""
|
|
6
|
+
pass
|
|
7
|
+
|
|
8
|
+
@prediction_cli.command()
|
|
9
|
+
@click.argument('model_name')
|
|
10
|
+
@click.argument('dataset_name')
|
|
11
|
+
def run(model_name, dataset_name):
|
|
12
|
+
"""Run predictions using the specified model on the given dataset."""
|
|
13
|
+
# Example placeholder logic for running predictions
|
|
14
|
+
click.echo(f"Running predictions on '{dataset_name}' using model '{model_name}'.")
|
|
15
|
+
|
|
16
|
+
@prediction_cli.command()
|
|
17
|
+
def list():
|
|
18
|
+
"""List all previous predictions."""
|
|
19
|
+
# Example placeholder logic for listing previous predictions
|
|
20
|
+
click.echo("Predictions: prediction1, prediction2")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
from uuid import UUID
|
|
2
|
+
from pydantic import BaseModel, Field, HttpUrl
|
|
3
|
+
from typing import List, Optional, Dict, Any
|
|
4
|
+
from enum import Enum
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
# PERMISSION & ROLE
|
|
8
|
+
##
|
|
9
|
+
|
|
10
|
+
class PermissionBase(BaseModel):
|
|
11
|
+
name: str
|
|
12
|
+
label: Optional[str] = None
|
|
13
|
+
description: Optional[str] = None
|
|
14
|
+
|
|
15
|
+
class PermissionCreate(PermissionBase):
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
class Permission(PermissionBase):
|
|
19
|
+
id: int
|
|
20
|
+
|
|
21
|
+
class Config:
|
|
22
|
+
from_attributes = True
|
|
23
|
+
|
|
24
|
+
class RoleBase(BaseModel):
|
|
25
|
+
name: str
|
|
26
|
+
label: Optional[str] = None
|
|
27
|
+
description: Optional[str] = None
|
|
28
|
+
|
|
29
|
+
class RoleCreate(RoleBase):
|
|
30
|
+
permission_ids: List[int] = []
|
|
31
|
+
|
|
32
|
+
class Role(RoleBase):
|
|
33
|
+
id: int
|
|
34
|
+
permissions: List[Permission] = []
|
|
35
|
+
|
|
36
|
+
class Config:
|
|
37
|
+
from_attributes = True
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
# ORGANIZATION
|
|
42
|
+
##
|
|
43
|
+
|
|
44
|
+
class OrganizationBase(BaseModel):
|
|
45
|
+
name: str
|
|
46
|
+
description: Optional[str] = None
|
|
47
|
+
|
|
48
|
+
class OrganizationCreate(OrganizationBase):
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
class Organization(OrganizationBase):
|
|
52
|
+
id: UUID
|
|
53
|
+
# changed from datetime -> milliseconds since epoch
|
|
54
|
+
created_at: Optional[int] = None
|
|
55
|
+
|
|
56
|
+
class Config:
|
|
57
|
+
from_attributes = True
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
##
|
|
61
|
+
# USER
|
|
62
|
+
##
|
|
63
|
+
|
|
64
|
+
class User(BaseModel):
|
|
65
|
+
id: Optional[UUID] = None
|
|
66
|
+
auth0_user_id: Optional[str] = None
|
|
67
|
+
username: Optional[str] = None
|
|
68
|
+
email: Optional[str] = None
|
|
69
|
+
organization_id: Optional[UUID] = None
|
|
70
|
+
created_at: Optional[int] = None
|
|
71
|
+
roles: Optional[List[Role]] = []
|
|
72
|
+
|
|
73
|
+
class Config:
|
|
74
|
+
from_attributes = True
|
|
75
|
+
|
|
76
|
+
##
|
|
77
|
+
# AGENT + STATUSES
|
|
78
|
+
##
|
|
79
|
+
|
|
80
|
+
class AgentStatus(str, Enum):
|
|
81
|
+
PENDING = "PENDING"
|
|
82
|
+
APPROVED = "APPROVED"
|
|
83
|
+
REJECTED = "REJECTED"
|
|
84
|
+
PUBLISHED = "PUBLISHED"
|
|
85
|
+
|
|
86
|
+
class AgentStatusUpdate(BaseModel):
|
|
87
|
+
status: AgentStatus
|
|
88
|
+
|
|
89
|
+
class AgentInstanceStatus(str, Enum):
|
|
90
|
+
ACTIVE = "ACTIVE"
|
|
91
|
+
INACTIVE = "INACTIVE"
|
|
92
|
+
ERROR = "ERROR"
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
##
|
|
96
|
+
# UI / CONFIG FIELDS
|
|
97
|
+
##
|
|
98
|
+
|
|
99
|
+
class SelectOption(BaseModel):
|
|
100
|
+
label: str
|
|
101
|
+
value: Any
|
|
102
|
+
|
|
103
|
+
class ValidationRules(BaseModel):
|
|
104
|
+
required: Optional[bool] = None
|
|
105
|
+
min: Optional[int] = None
|
|
106
|
+
max: Optional[int] = None
|
|
107
|
+
pattern: Optional[str] = None
|
|
108
|
+
|
|
109
|
+
class ConfigField(BaseModel):
|
|
110
|
+
name: str
|
|
111
|
+
label: str
|
|
112
|
+
type: str
|
|
113
|
+
sensitive: Optional[bool] = False
|
|
114
|
+
default: Optional[Any] = Field(None, alias="default")
|
|
115
|
+
description: Optional[str] = None
|
|
116
|
+
validations: Optional[ValidationRules] = None
|
|
117
|
+
options: Optional[List[SelectOption]] = None
|
|
118
|
+
fields: Optional[List["ConfigField"]] = None # for nested structures
|
|
119
|
+
|
|
120
|
+
class Config:
|
|
121
|
+
populate_by_name = True
|
|
122
|
+
|
|
123
|
+
ConfigField.model_rebuild()
|
|
124
|
+
|
|
125
|
+
class ConfigGroup(BaseModel):
|
|
126
|
+
groupName: str
|
|
127
|
+
fields: List[ConfigField]
|
|
128
|
+
|
|
129
|
+
class BackendDefinition(BaseModel):
|
|
130
|
+
docker_image: Optional[str] = None
|
|
131
|
+
environment_variables: Optional[Dict[str, str]] = None
|
|
132
|
+
container_id: Optional[str] = None
|
|
133
|
+
|
|
134
|
+
class LayoutType(str, Enum):
|
|
135
|
+
SINGLE_COLUMN = "single-column"
|
|
136
|
+
TWO_COLUMN = "two-column"
|
|
137
|
+
DASHBOARD = "dashboard"
|
|
138
|
+
CHAT_INTERFACE = "chat-interface"
|
|
139
|
+
SMART_LIST_BUILDER = "smart-list-builder"
|
|
140
|
+
|
|
141
|
+
class ComponentType(str, Enum):
|
|
142
|
+
CHAT_WINDOW = "chat-window"
|
|
143
|
+
HEADER = "header"
|
|
144
|
+
FOOTER = "footer"
|
|
145
|
+
SIDEBAR = "sidebar"
|
|
146
|
+
MAIN_CONTENT = "main-content"
|
|
147
|
+
DATA_TABLE = "data-table"
|
|
148
|
+
CHART = "chart"
|
|
149
|
+
FORM = "form"
|
|
150
|
+
BUTTON = "button"
|
|
151
|
+
TEXT = "text"
|
|
152
|
+
IMAGE = "image"
|
|
153
|
+
VIDEO = "video"
|
|
154
|
+
CUSTOM_COMPONENT = "custom-component"
|
|
155
|
+
TABS = "tabs"
|
|
156
|
+
TAB = "tab"
|
|
157
|
+
FORM_ITEM = "form-item"
|
|
158
|
+
INPUT = "input"
|
|
159
|
+
TEXTAREA = "textarea"
|
|
160
|
+
UPLOAD = "upload"
|
|
161
|
+
|
|
162
|
+
class ComponentPosition(BaseModel):
|
|
163
|
+
row: Optional[int] = None
|
|
164
|
+
column: Optional[int] = None
|
|
165
|
+
area: Optional[str] = None
|
|
166
|
+
|
|
167
|
+
class RenderComponent(BaseModel):
|
|
168
|
+
type: ComponentType
|
|
169
|
+
position: Optional[ComponentPosition] = None
|
|
170
|
+
properties: Optional[Dict[str, Any]] = None
|
|
171
|
+
children: Optional[List["RenderComponent"]] = None
|
|
172
|
+
injector: Optional[Any] = None
|
|
173
|
+
|
|
174
|
+
class ActionDefinition(BaseModel):
|
|
175
|
+
type: str
|
|
176
|
+
method: str
|
|
177
|
+
url: str
|
|
178
|
+
data: Optional[Any] = None
|
|
179
|
+
state: Optional[str] = None
|
|
180
|
+
onSuccess: Optional[str] = None
|
|
181
|
+
|
|
182
|
+
class RenderDefinition(BaseModel):
|
|
183
|
+
layout: LayoutType
|
|
184
|
+
components: List[RenderComponent]
|
|
185
|
+
actions: Optional[Dict[str, ActionDefinition]] = None
|
|
186
|
+
initialActions: Optional[List[str]] = None
|
|
187
|
+
|
|
188
|
+
class ConfigValue(BaseModel):
|
|
189
|
+
name: str
|
|
190
|
+
value: Any
|
|
191
|
+
fields: Optional[List["ConfigValue"]] = None
|
|
192
|
+
|
|
193
|
+
class Config:
|
|
194
|
+
populate_by_name = True
|
|
195
|
+
|
|
196
|
+
ConfigValue.model_rebuild()
|
|
197
|
+
|
|
198
|
+
class SchemaDefinition(BaseModel):
|
|
199
|
+
name: str
|
|
200
|
+
version: str
|
|
201
|
+
fields: List[ConfigField]
|
|
202
|
+
migrations: Optional[List[Dict[str, Any]]] = None
|
|
203
|
+
|
|
204
|
+
##
|
|
205
|
+
# AGENT
|
|
206
|
+
##
|
|
207
|
+
|
|
208
|
+
class Agent(BaseModel):
|
|
209
|
+
id: Optional[UUID] = None
|
|
210
|
+
name: str
|
|
211
|
+
description: str
|
|
212
|
+
image_url: str
|
|
213
|
+
expertise: List[str]
|
|
214
|
+
version: str
|
|
215
|
+
schema_definition: Optional[List[SchemaDefinition]] = None
|
|
216
|
+
config_definition: List[ConfigGroup]
|
|
217
|
+
agent_config_definition: Optional[List[ConfigGroup]] = None
|
|
218
|
+
agent_configuration: Optional[List[ConfigValue]] = None
|
|
219
|
+
render_definition: RenderDefinition
|
|
220
|
+
backend: BackendDefinition
|
|
221
|
+
repository_url: Optional[str] = None
|
|
222
|
+
status: Optional[AgentStatus] = AgentStatus.PENDING
|
|
223
|
+
|
|
224
|
+
organization_id: Optional[UUID] = None
|
|
225
|
+
created_by: Optional[UUID] = None
|
|
226
|
+
created_at: Optional[int] = None
|
|
227
|
+
updated_by: Optional[UUID] = None
|
|
228
|
+
updated_at: Optional[int] = None
|
|
229
|
+
|
|
230
|
+
class Config:
|
|
231
|
+
from_attributes = True
|
|
232
|
+
populate_by_name = True
|
|
233
|
+
|
|
234
|
+
##
|
|
235
|
+
# AGENT INSTANCE
|
|
236
|
+
##
|
|
237
|
+
|
|
238
|
+
class AgentInstance(BaseModel):
|
|
239
|
+
id: Optional[UUID] = None
|
|
240
|
+
published_agent_id: UUID
|
|
241
|
+
name: str
|
|
242
|
+
description: str
|
|
243
|
+
image_url: str
|
|
244
|
+
expertise: Optional[List[str]] = None
|
|
245
|
+
version: str
|
|
246
|
+
schema_definition: Optional[List[SchemaDefinition]] = None
|
|
247
|
+
configuration: List[ConfigValue]
|
|
248
|
+
render_definition: RenderDefinition = None
|
|
249
|
+
backend: BackendDefinition = None
|
|
250
|
+
status: AgentInstanceStatus = AgentInstanceStatus.INACTIVE
|
|
251
|
+
status_message: Optional[str] = None
|
|
252
|
+
service_url: Optional[str] = None
|
|
253
|
+
port: Optional[int] = None
|
|
254
|
+
|
|
255
|
+
organization_id: Optional[UUID] = None
|
|
256
|
+
created_by: Optional[UUID] = None
|
|
257
|
+
created_at: Optional[int] = None
|
|
258
|
+
updated_by: Optional[UUID] = None
|
|
259
|
+
updated_at: Optional[int] = None
|
|
260
|
+
|
|
261
|
+
class Config:
|
|
262
|
+
from_attributes = True
|
|
263
|
+
populate_by_name = True
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
##
|
|
267
|
+
# AGENT INSTANCE DATA
|
|
268
|
+
##
|
|
269
|
+
|
|
270
|
+
class AgentInstanceData(BaseModel):
|
|
271
|
+
id: Optional[UUID] = None
|
|
272
|
+
type: str
|
|
273
|
+
version: str
|
|
274
|
+
agent_instance_id: UUID
|
|
275
|
+
organization_id: UUID
|
|
276
|
+
data: Dict[str, Any]
|
|
277
|
+
created_by: Optional[UUID] = None
|
|
278
|
+
created_at: Optional[int] = None
|
|
279
|
+
updated_by: Optional[UUID] = None
|
|
280
|
+
updated_at: Optional[int] = None
|
|
281
|
+
|
|
282
|
+
class Config:
|
|
283
|
+
populate_by_name = True
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
##
|
|
287
|
+
# SOURCE
|
|
288
|
+
##
|
|
289
|
+
|
|
290
|
+
class SourceType(str, Enum):
|
|
291
|
+
FILE = "file"
|
|
292
|
+
GOOGLE_DOC = "google_doc"
|
|
293
|
+
WEBSITE = "website"
|
|
294
|
+
YOUTUBE = "youtube"
|
|
295
|
+
TEXT = "text"
|
|
296
|
+
|
|
297
|
+
class SourceBase(BaseModel):
|
|
298
|
+
source_type: SourceType
|
|
299
|
+
title: Optional[str] = None
|
|
300
|
+
source_metadata: Optional[dict] = None
|
|
301
|
+
blob_url: Optional[HttpUrl] = None
|
|
302
|
+
content: Optional[str] = None
|
|
303
|
+
|
|
304
|
+
class SourceCreate(SourceBase):
|
|
305
|
+
pass
|
|
306
|
+
|
|
307
|
+
class SourceUpdate(SourceBase):
|
|
308
|
+
pass
|
|
309
|
+
|
|
310
|
+
class Source(SourceBase):
|
|
311
|
+
id: UUID
|
|
312
|
+
agent_instance_id: UUID
|
|
313
|
+
# changed from datetime -> milliseconds
|
|
314
|
+
created_at: Optional[int] = None
|
|
315
|
+
created_by: Optional[UUID] = None
|
|
316
|
+
|
|
317
|
+
class Config:
|
|
318
|
+
populate_by_name = True
|
|
319
|
+
|
|
320
|
+
##
|
|
321
|
+
# INTEGRATION
|
|
322
|
+
##
|
|
323
|
+
|
|
324
|
+
class IntegrationStatus(str, Enum):
|
|
325
|
+
CONNECTED = "connected"
|
|
326
|
+
DISCONNECTED = "disconnected"
|
|
327
|
+
COMING_SOON = "coming soon"
|
|
328
|
+
|
|
329
|
+
class IntegrationBase(BaseModel):
|
|
330
|
+
name: str
|
|
331
|
+
label: str
|
|
332
|
+
icon: Optional[str] = None
|
|
333
|
+
description: Optional[str] = None
|
|
334
|
+
category: Optional[str] = None
|
|
335
|
+
tags: Optional[List[str]] = None
|
|
336
|
+
status: IntegrationStatus = IntegrationStatus.DISCONNECTED
|
|
337
|
+
configuration: Optional[List["ConfigValue"]] = None
|
|
338
|
+
|
|
339
|
+
class IntegrationCreate(IntegrationBase):
|
|
340
|
+
agent_instance_id: UUID
|
|
341
|
+
organization_id: UUID
|
|
342
|
+
|
|
343
|
+
class IntegrationUpdate(BaseModel):
|
|
344
|
+
name: Optional[str] = None
|
|
345
|
+
label: Optional[str] = None
|
|
346
|
+
icon: Optional[str] = None
|
|
347
|
+
description: Optional[str] = None
|
|
348
|
+
category: Optional[str] = None
|
|
349
|
+
tags: Optional[List[str]] = None
|
|
350
|
+
status: Optional[IntegrationStatus] = None
|
|
351
|
+
configuration: Optional[List["ConfigValue"]] = None
|
|
352
|
+
|
|
353
|
+
class Integration(IntegrationBase):
|
|
354
|
+
id: UUID
|
|
355
|
+
agent_instance_id: UUID
|
|
356
|
+
organization_id: UUID
|
|
357
|
+
created_at: Optional[int] = None
|
|
358
|
+
created_by: Optional[UUID] = None
|
|
359
|
+
|
|
360
|
+
class Config:
|
|
361
|
+
from_attributes = True
|
|
362
|
+
populate_by_name = True
|
|
363
|
+
|
|
364
|
+
Integration.model_rebuild()
|
|
365
|
+
IntegrationUpdate.model_rebuild()
|
|
366
|
+
|
|
367
|
+
class BodyFormat(str, Enum):
|
|
368
|
+
AUTO = "auto"
|
|
369
|
+
HTML = "html"
|
|
370
|
+
TEXT = "text"
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
class SendEmailContext(BaseModel):
|
|
374
|
+
recipient: str
|
|
375
|
+
subject: str
|
|
376
|
+
body: str
|
|
377
|
+
sender_name: str
|
|
378
|
+
sender_email: str
|
|
379
|
+
labels: Optional[List[str]]
|
|
380
|
+
body_format: BodyFormat = BodyFormat.AUTO
|
|
381
|
+
headers: Optional[Dict[str, str]] = None
|
|
382
|
+
|
|
383
|
+
class QueryEmailContext(BaseModel):
|
|
384
|
+
start_time: str
|
|
385
|
+
end_time: str
|
|
386
|
+
sender_email: str
|
|
387
|
+
unread_only: bool = True
|
|
388
|
+
labels: Optional[List[str]] = None
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
class ReplyEmailContext(BaseModel):
|
|
392
|
+
message_id: str
|
|
393
|
+
reply_body: str
|
|
394
|
+
sender_email: str
|
|
395
|
+
sender_name: str
|
|
396
|
+
fallback_recipient: Optional[str] = None
|
|
397
|
+
mark_as_read: str = "True"
|
|
398
|
+
add_labels: Optional[List[str]] = None
|
|
399
|
+
reply_body_format: BodyFormat = BodyFormat.AUTO
|