tinybird 0.0.1.dev14__py3-none-any.whl → 0.0.1.dev16__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.

Potentially problematic release.


This version of tinybird might be problematic. Click here for more details.

@@ -16,10 +16,14 @@ from tinybird.tb.modules.config import CLIConfig
16
16
  from tinybird.tb.modules.datafile.fixture import build_fixture_name, persist_fixture
17
17
  from tinybird.tb.modules.exceptions import CLIException
18
18
  from tinybird.tb.modules.llm import LLM
19
- from tinybird.tb.modules.local import get_tinybird_local_client
20
19
 
21
20
 
22
21
  @cli.command()
22
+ @click.option(
23
+ "--demo",
24
+ is_flag=True,
25
+ help="Demo data and files to get started",
26
+ )
23
27
  @click.option(
24
28
  "--data",
25
29
  type=click.Path(exists=True),
@@ -43,6 +47,7 @@ from tinybird.tb.modules.local import get_tinybird_local_client
43
47
  @coro
44
48
  async def create(
45
49
  ctx: Context,
50
+ demo: bool,
46
51
  data: Optional[str],
47
52
  prompt: Optional[str],
48
53
  folder: Optional[str],
@@ -51,7 +56,8 @@ async def create(
51
56
  """Initialize a new project."""
52
57
  folder = folder or getcwd()
53
58
  try:
54
- tb_client = await get_tinybird_local_client(os.path.abspath(folder))
59
+ config = CLIConfig.get_project_config()
60
+ tb_client = config.get_client()
55
61
  click.echo(FeedbackManager.gray(message="Creating new project structure..."))
56
62
  await project_create(tb_client, data, prompt, folder)
57
63
  click.echo(FeedbackManager.success(message="✓ Scaffolding completed!\n"))
@@ -63,7 +69,240 @@ async def create(
63
69
 
64
70
  click.echo(FeedbackManager.gray(message="Building fixtures..."))
65
71
 
66
- if data:
72
+ if demo:
73
+ # Users datasource
74
+ ds_name = "users"
75
+ datasource_path = Path(folder) / "datasources" / f"{ds_name}.datasource"
76
+ datasource_content = """SCHEMA >
77
+ `id` String `json:$.id`,
78
+ `organization_id` String `json:$.organization_id`,
79
+ `tier` String `json:$.tier`
80
+
81
+ ENGINE "MergeTree"
82
+ ENGINE_SORTING_KEY "id, organization_id"
83
+ """
84
+ datasource_path.write_text(datasource_content)
85
+ click.echo(FeedbackManager.info(message=f"✓ /datasources/{ds_name}.datasource"))
86
+
87
+ # Events datasource
88
+ ds_name = "events"
89
+ datasource_path = Path(folder) / "datasources" / f"{ds_name}.datasource"
90
+ datasource_content = """SCHEMA >
91
+ `request_id` String `json:$.request_id`,
92
+ `timestamp` DateTime64(3) `json:$.timestamp`,
93
+ `user_id` String `json:$.user_id`,
94
+ `type` String `json:$.request.type`,
95
+ `endpoint` String `json:$.request.endpoint`,
96
+ `model` String `json:$.request.model`,
97
+ `request_options_temperature` String `json:$.request.options.temperature`,
98
+ `request_options_max_tokens` Int32 `json:$.request.options.max_tokens`,
99
+ `request_options_stream` Boolean `json:$.request.options.stream`,
100
+ `usage_prompt_tokens` Int32 `json:$.usage.prompt_tokens`,
101
+ `usage_completion_tokens` Int32 `json:$.usage.completion_tokens`,
102
+ `usage_total_tokens` Int32 `json:$.usage.total_tokens`
103
+
104
+ ENGINE "MergeTree"
105
+ ENGINE_SORTING_KEY "user_id, timestamp"
106
+ """
107
+ datasource_path.write_text(datasource_content)
108
+ click.echo(FeedbackManager.info(message=f"✓ /datasources/{ds_name}.datasource"))
109
+
110
+ ds_name = "users"
111
+ ds_content = """
112
+ {"id":"usr_1","organization_id":"org_202","tier":"pro"}
113
+ {"id":"usr_2","organization_id":"org_49","tier":"enterprise"}
114
+ {"id":"usr_3","organization_id":"org_181","tier":"pro"}
115
+ {"id":"usr_4","organization_id":"org_194","tier":"pro"}
116
+ {"id":"usr_5","organization_id":"org_180","tier":"enterprise"}
117
+ {"id":"usr_6","organization_id":"org_112","tier":"enterprise"}
118
+ {"id":"usr_7","organization_id":"org_291","tier":"pro"}
119
+ {"id":"usr_8","organization_id":"org_150","tier":"free"}
120
+ {"id":"usr_9","organization_id":"org_127","tier":"enterprise"}
121
+ {"id":"usr_10","organization_id":"org_279","tier":"enterprise"}
122
+ {"id":"usr_11","organization_id":"org_58","tier":"pro"}
123
+ {"id":"usr_12","organization_id":"org_183","tier":"pro"}
124
+ {"id":"usr_13","organization_id":"org_2","tier":"pro"}
125
+ {"id":"usr_14","organization_id":"org_15","tier":"free"}
126
+ {"id":"usr_15","organization_id":"org_54","tier":"pro"}
127
+ {"id":"usr_16","organization_id":"org_24","tier":"pro"}
128
+ {"id":"usr_17","organization_id":"org_135","tier":"free"}
129
+ {"id":"usr_18","organization_id":"org_76","tier":"enterprise"}
130
+ {"id":"usr_19","organization_id":"org_166","tier":"enterprise"}
131
+ {"id":"usr_20","organization_id":"org_203","tier":"pro"}
132
+ {"id":"usr_21","organization_id":"org_103","tier":"pro"}
133
+ {"id":"usr_22","organization_id":"org_178","tier":"pro"}
134
+ {"id":"usr_23","organization_id":"org_41","tier":"pro"}
135
+ {"id":"usr_24","organization_id":"org_197","tier":"enterprise"}
136
+ {"id":"usr_25","organization_id":"org_21","tier":"pro"}
137
+ {"id":"usr_26","organization_id":"org_180","tier":"enterprise"}
138
+ {"id":"usr_27","organization_id":"org_216","tier":"enterprise"}
139
+ {"id":"usr_28","organization_id":"org_117","tier":"enterprise"}
140
+ {"id":"usr_29","organization_id":"org_73","tier":"pro"}
141
+ {"id":"usr_30","organization_id":"org_92","tier":"enterprise"}
142
+ {"id":"usr_31","organization_id":"org_272","tier":"enterprise"}
143
+ {"id":"usr_32","organization_id":"org_58","tier":"pro"}
144
+ {"id":"usr_33","organization_id":"org_158","tier":"pro"}
145
+ {"id":"usr_34","organization_id":"org_12","tier":"free"}
146
+ {"id":"usr_35","organization_id":"org_119","tier":"free"}
147
+ {"id":"usr_36","organization_id":"org_272","tier":"pro"}
148
+ {"id":"usr_37","organization_id":"org_1","tier":"enterprise"}
149
+ {"id":"usr_38","organization_id":"org_262","tier":"enterprise"}
150
+ {"id":"usr_39","organization_id":"org_189","tier":"pro"}
151
+ {"id":"usr_40","organization_id":"org_126","tier":"free"}
152
+ {"id":"usr_41","organization_id":"org_94","tier":"free"}
153
+ {"id":"usr_42","organization_id":"org_156","tier":"free"}
154
+ {"id":"usr_43","organization_id":"org_155","tier":"enterprise"}
155
+ {"id":"usr_44","organization_id":"org_151","tier":"pro"}
156
+ {"id":"usr_45","organization_id":"org_217","tier":"pro"}
157
+ {"id":"usr_46","organization_id":"org_111","tier":"enterprise"}
158
+ {"id":"usr_47","organization_id":"org_274","tier":"enterprise"}
159
+ {"id":"usr_48","organization_id":"org_117","tier":"enterprise"}
160
+ {"id":"usr_49","organization_id":"org_125","tier":"pro"}
161
+ {"id":"usr_50","organization_id":"org_42","tier":"pro"}
162
+ """
163
+ persist_fixture(f"{ds_name}", ds_content)
164
+ click.echo(FeedbackManager.info(message=f"✓ /fixtures/{ds_name}"))
165
+
166
+ ds_name = "events"
167
+ ds_content = """
168
+ {"request_id":"req_1","timestamp":"2024-11-14T12:11:14.896Z","user_id":"usr_42","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-4","options":{"temperature":"0.8","max_tokens":1582,"stream":false}},"usage":{"prompt_tokens":499,"completion_tokens":123,"total_tokens":622}}
169
+ {"request_id":"req_2","timestamp":"2024-10-06T10:32:09.164Z","user_id":"usr_20","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"0.9","max_tokens":650,"stream":true}},"usage":{"prompt_tokens":384,"completion_tokens":103,"total_tokens":487}}
170
+ {"request_id":"req_3","timestamp":"2024-11-19T03:49:26.569Z","user_id":"usr_27","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.3","max_tokens":764,"stream":true}},"usage":{"prompt_tokens":63,"completion_tokens":284,"total_tokens":347}}
171
+ {"request_id":"req_4","timestamp":"2024-11-09T09:13:05.359Z","user_id":"usr_8","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.8","max_tokens":1790,"stream":true}},"usage":{"prompt_tokens":405,"completion_tokens":231,"total_tokens":636}}
172
+ {"request_id":"req_5","timestamp":"2024-11-24T17:48:03.640Z","user_id":"usr_45","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"1.0","max_tokens":1701,"stream":false}},"usage":{"prompt_tokens":342,"completion_tokens":258,"total_tokens":600}}
173
+ {"request_id":"req_6","timestamp":"2024-11-10T02:07:53.241Z","user_id":"usr_49","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.4","max_tokens":1049,"stream":false}},"usage":{"prompt_tokens":120,"completion_tokens":165,"total_tokens":285}}
174
+ {"request_id":"req_7","timestamp":"2024-10-14T06:43:14.759Z","user_id":"usr_48","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-4","options":{"temperature":"0.9","max_tokens":1548,"stream":true}},"usage":{"prompt_tokens":61,"completion_tokens":104,"total_tokens":165}}
175
+ {"request_id":"req_8","timestamp":"2024-11-21T20:52:03.378Z","user_id":"usr_30","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.5","max_tokens":1742,"stream":true}},"usage":{"prompt_tokens":326,"completion_tokens":236,"total_tokens":562}}
176
+ {"request_id":"req_9","timestamp":"2024-10-24T22:23:11.463Z","user_id":"usr_34","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.5","max_tokens":748,"stream":true}},"usage":{"prompt_tokens":488,"completion_tokens":148,"total_tokens":636}}
177
+ {"request_id":"req_10","timestamp":"2024-11-13T05:42:38.971Z","user_id":"usr_24","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.3","max_tokens":1729,"stream":true}},"usage":{"prompt_tokens":262,"completion_tokens":162,"total_tokens":424}}
178
+ {"request_id":"req_11","timestamp":"2024-10-21T07:20:51.693Z","user_id":"usr_1","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-opus","options":{"temperature":"0.3","max_tokens":1811,"stream":false}},"usage":{"prompt_tokens":342,"completion_tokens":274,"total_tokens":616}}
179
+ {"request_id":"req_12","timestamp":"2024-11-15T06:03:07.775Z","user_id":"usr_21","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-4","options":{"temperature":"0.3","max_tokens":1484,"stream":true}},"usage":{"prompt_tokens":273,"completion_tokens":266,"total_tokens":539}}
180
+ {"request_id":"req_13","timestamp":"2024-11-29T18:31:23.125Z","user_id":"usr_41","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.8","max_tokens":1812,"stream":true}},"usage":{"prompt_tokens":265,"completion_tokens":102,"total_tokens":367}}
181
+ {"request_id":"req_14","timestamp":"2024-11-13T23:50:03.888Z","user_id":"usr_13","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.9","max_tokens":1694,"stream":false}},"usage":{"prompt_tokens":76,"completion_tokens":290,"total_tokens":366}}
182
+ {"request_id":"req_15","timestamp":"2024-11-01T14:27:22.401Z","user_id":"usr_32","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-sonnet","options":{"temperature":"0.4","max_tokens":949,"stream":true}},"usage":{"prompt_tokens":105,"completion_tokens":197,"total_tokens":302}}
183
+ {"request_id":"req_16","timestamp":"2024-11-12T09:13:06.447Z","user_id":"usr_2","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.1","max_tokens":651,"stream":false}},"usage":{"prompt_tokens":348,"completion_tokens":80,"total_tokens":428}}
184
+ {"request_id":"req_17","timestamp":"2024-11-09T21:09:51.044Z","user_id":"usr_24","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.4","max_tokens":692,"stream":false}},"usage":{"prompt_tokens":195,"completion_tokens":178,"total_tokens":373}}
185
+ {"request_id":"req_18","timestamp":"2024-11-06T13:38:08.873Z","user_id":"usr_49","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-opus","options":{"temperature":"0.4","max_tokens":1303,"stream":true}},"usage":{"prompt_tokens":304,"completion_tokens":73,"total_tokens":377}}
186
+ {"request_id":"req_19","timestamp":"2024-11-06T20:47:35.718Z","user_id":"usr_33","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.8","max_tokens":1359,"stream":true}},"usage":{"prompt_tokens":55,"completion_tokens":258,"total_tokens":313}}
187
+ {"request_id":"req_20","timestamp":"2024-11-15T09:59:27.956Z","user_id":"usr_9","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-opus","options":{"temperature":"0.6","max_tokens":1768,"stream":true}},"usage":{"prompt_tokens":310,"completion_tokens":62,"total_tokens":372}}
188
+ {"request_id":"req_21","timestamp":"2024-11-17T03:46:10.219Z","user_id":"usr_6","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.8","max_tokens":1967,"stream":true}},"usage":{"prompt_tokens":87,"completion_tokens":275,"total_tokens":362}}
189
+ {"request_id":"req_22","timestamp":"2024-10-03T06:52:21.902Z","user_id":"usr_13","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.8","max_tokens":1338,"stream":true}},"usage":{"prompt_tokens":332,"completion_tokens":137,"total_tokens":469}}
190
+ {"request_id":"req_23","timestamp":"2024-11-10T02:53:06.630Z","user_id":"usr_16","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-opus","options":{"temperature":"0.1","max_tokens":1958,"stream":true}},"usage":{"prompt_tokens":444,"completion_tokens":294,"total_tokens":738}}
191
+ {"request_id":"req_24","timestamp":"2024-10-10T04:11:45.410Z","user_id":"usr_44","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"1.0","max_tokens":1241,"stream":false}},"usage":{"prompt_tokens":414,"completion_tokens":227,"total_tokens":641}}
192
+ {"request_id":"req_25","timestamp":"2024-10-15T09:53:09.379Z","user_id":"usr_24","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.4","max_tokens":1015,"stream":true}},"usage":{"prompt_tokens":433,"completion_tokens":119,"total_tokens":552}}
193
+ {"request_id":"req_26","timestamp":"2024-11-16T16:40:38.042Z","user_id":"usr_8","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"0.3","max_tokens":514,"stream":true}},"usage":{"prompt_tokens":86,"completion_tokens":241,"total_tokens":327}}
194
+ {"request_id":"req_27","timestamp":"2024-10-06T11:34:58.073Z","user_id":"usr_40","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.7","max_tokens":1752,"stream":true}},"usage":{"prompt_tokens":312,"completion_tokens":262,"total_tokens":574}}
195
+ {"request_id":"req_28","timestamp":"2024-10-21T05:35:11.046Z","user_id":"usr_22","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.5","max_tokens":1425,"stream":true}},"usage":{"prompt_tokens":50,"completion_tokens":182,"total_tokens":232}}
196
+ {"request_id":"req_29","timestamp":"2024-10-11T06:14:52.973Z","user_id":"usr_4","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-sonnet","options":{"temperature":"0.4","max_tokens":1660,"stream":true}},"usage":{"prompt_tokens":384,"completion_tokens":124,"total_tokens":508}}
197
+ {"request_id":"req_30","timestamp":"2024-11-13T10:48:53.729Z","user_id":"usr_22","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-4","options":{"temperature":"0.4","max_tokens":1425,"stream":true}},"usage":{"prompt_tokens":299,"completion_tokens":57,"total_tokens":356}}
198
+ {"request_id":"req_31","timestamp":"2024-10-01T03:26:07.133Z","user_id":"usr_41","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"0.8","max_tokens":1975,"stream":true}},"usage":{"prompt_tokens":471,"completion_tokens":245,"total_tokens":716}}
199
+ {"request_id":"req_32","timestamp":"2024-11-26T12:13:53.221Z","user_id":"usr_33","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-opus","options":{"temperature":"0.5","max_tokens":557,"stream":false}},"usage":{"prompt_tokens":75,"completion_tokens":92,"total_tokens":167}}
200
+ {"request_id":"req_33","timestamp":"2024-10-14T07:41:11.783Z","user_id":"usr_18","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-opus","options":{"temperature":"1.0","max_tokens":843,"stream":false}},"usage":{"prompt_tokens":321,"completion_tokens":258,"total_tokens":579}}
201
+ {"request_id":"req_34","timestamp":"2024-10-21T11:20:47.679Z","user_id":"usr_37","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.7","max_tokens":1148,"stream":false}},"usage":{"prompt_tokens":425,"completion_tokens":245,"total_tokens":670}}
202
+ {"request_id":"req_35","timestamp":"2024-11-18T12:02:12.268Z","user_id":"usr_38","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.2","max_tokens":1987,"stream":false}},"usage":{"prompt_tokens":50,"completion_tokens":223,"total_tokens":273}}
203
+ {"request_id":"req_36","timestamp":"2024-10-03T02:17:56.042Z","user_id":"usr_38","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.2","max_tokens":1339,"stream":false}},"usage":{"prompt_tokens":102,"completion_tokens":112,"total_tokens":214}}
204
+ {"request_id":"req_37","timestamp":"2024-11-02T19:52:17.904Z","user_id":"usr_34","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.3","max_tokens":1050,"stream":false}},"usage":{"prompt_tokens":485,"completion_tokens":189,"total_tokens":674}}
205
+ {"request_id":"req_38","timestamp":"2024-11-17T22:26:34.434Z","user_id":"usr_5","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.6","max_tokens":857,"stream":false}},"usage":{"prompt_tokens":442,"completion_tokens":224,"total_tokens":666}}
206
+ {"request_id":"req_39","timestamp":"2024-11-17T01:20:40.223Z","user_id":"usr_36","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.9","max_tokens":698,"stream":true}},"usage":{"prompt_tokens":430,"completion_tokens":185,"total_tokens":615}}
207
+ {"request_id":"req_40","timestamp":"2024-11-20T21:38:04.662Z","user_id":"usr_31","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.3","max_tokens":1226,"stream":true}},"usage":{"prompt_tokens":201,"completion_tokens":65,"total_tokens":266}}
208
+ {"request_id":"req_41","timestamp":"2024-11-07T11:20:55.217Z","user_id":"usr_34","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.1","max_tokens":1893,"stream":false}},"usage":{"prompt_tokens":307,"completion_tokens":224,"total_tokens":531}}
209
+ {"request_id":"req_42","timestamp":"2024-10-30T23:13:57.704Z","user_id":"usr_44","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.3","max_tokens":888,"stream":false}},"usage":{"prompt_tokens":212,"completion_tokens":53,"total_tokens":265}}
210
+ {"request_id":"req_43","timestamp":"2024-11-09T02:04:23.904Z","user_id":"usr_28","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.3","max_tokens":1574,"stream":true}},"usage":{"prompt_tokens":161,"completion_tokens":190,"total_tokens":351}}
211
+ {"request_id":"req_44","timestamp":"2024-11-20T21:28:23.931Z","user_id":"usr_22","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-opus","options":{"temperature":"0.4","max_tokens":578,"stream":true}},"usage":{"prompt_tokens":465,"completion_tokens":294,"total_tokens":759}}
212
+ {"request_id":"req_45","timestamp":"2024-11-15T14:02:11.552Z","user_id":"usr_2","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-opus","options":{"temperature":"0.4","max_tokens":502,"stream":true}},"usage":{"prompt_tokens":489,"completion_tokens":288,"total_tokens":777}}
213
+ {"request_id":"req_46","timestamp":"2024-10-22T23:05:29.902Z","user_id":"usr_15","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-4","options":{"temperature":"0.5","max_tokens":1280,"stream":true}},"usage":{"prompt_tokens":462,"completion_tokens":283,"total_tokens":745}}
214
+ {"request_id":"req_47","timestamp":"2024-10-28T01:16:36.936Z","user_id":"usr_28","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"0.4","max_tokens":1513,"stream":true}},"usage":{"prompt_tokens":421,"completion_tokens":204,"total_tokens":625}}
215
+ {"request_id":"req_48","timestamp":"2024-11-20T18:18:38.744Z","user_id":"usr_4","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.8","max_tokens":1194,"stream":true}},"usage":{"prompt_tokens":251,"completion_tokens":109,"total_tokens":360}}
216
+ {"request_id":"req_49","timestamp":"2024-10-12T17:21:20.482Z","user_id":"usr_11","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.3","max_tokens":621,"stream":false}},"usage":{"prompt_tokens":195,"completion_tokens":253,"total_tokens":448}}
217
+ {"request_id":"req_50","timestamp":"2024-11-27T14:14:23.737Z","user_id":"usr_8","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-4","options":{"temperature":"0.0","max_tokens":1468,"stream":true}},"usage":{"prompt_tokens":461,"completion_tokens":100,"total_tokens":561}}
218
+ {"request_id":"req_51","timestamp":"2024-10-15T14:58:09.623Z","user_id":"usr_48","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"1.0","max_tokens":1879,"stream":false}},"usage":{"prompt_tokens":51,"completion_tokens":215,"total_tokens":266}}
219
+ {"request_id":"req_52","timestamp":"2024-11-18T00:55:43.893Z","user_id":"usr_48","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.2","max_tokens":549,"stream":false}},"usage":{"prompt_tokens":481,"completion_tokens":142,"total_tokens":623}}
220
+ {"request_id":"req_53","timestamp":"2024-11-01T03:22:01.890Z","user_id":"usr_14","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.8","max_tokens":1771,"stream":false}},"usage":{"prompt_tokens":459,"completion_tokens":79,"total_tokens":538}}
221
+ {"request_id":"req_54","timestamp":"2024-10-26T08:57:25.867Z","user_id":"usr_17","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.4","max_tokens":1888,"stream":false}},"usage":{"prompt_tokens":219,"completion_tokens":226,"total_tokens":445}}
222
+ {"request_id":"req_55","timestamp":"2024-11-17T16:12:47.424Z","user_id":"usr_43","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.0","max_tokens":1281,"stream":false}},"usage":{"prompt_tokens":426,"completion_tokens":244,"total_tokens":670}}
223
+ {"request_id":"req_56","timestamp":"2024-10-10T01:03:29.669Z","user_id":"usr_6","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.3","max_tokens":1004,"stream":false}},"usage":{"prompt_tokens":420,"completion_tokens":69,"total_tokens":489}}
224
+ {"request_id":"req_57","timestamp":"2024-10-10T19:18:37.937Z","user_id":"usr_30","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.7","max_tokens":1209,"stream":true}},"usage":{"prompt_tokens":59,"completion_tokens":66,"total_tokens":125}}
225
+ {"request_id":"req_58","timestamp":"2024-10-07T19:20:21.754Z","user_id":"usr_4","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.5","max_tokens":1215,"stream":true}},"usage":{"prompt_tokens":197,"completion_tokens":201,"total_tokens":398}}
226
+ {"request_id":"req_59","timestamp":"2024-10-12T07:54:12.535Z","user_id":"usr_35","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-4","options":{"temperature":"0.1","max_tokens":1445,"stream":false}},"usage":{"prompt_tokens":318,"completion_tokens":111,"total_tokens":429}}
227
+ {"request_id":"req_60","timestamp":"2024-11-04T00:11:56.488Z","user_id":"usr_3","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"1.0","max_tokens":1127,"stream":true}},"usage":{"prompt_tokens":286,"completion_tokens":293,"total_tokens":579}}
228
+ {"request_id":"req_61","timestamp":"2024-10-15T10:29:51.122Z","user_id":"usr_36","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.9","max_tokens":1810,"stream":false}},"usage":{"prompt_tokens":308,"completion_tokens":238,"total_tokens":546}}
229
+ {"request_id":"req_62","timestamp":"2024-10-15T07:46:39.995Z","user_id":"usr_36","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.8","max_tokens":736,"stream":true}},"usage":{"prompt_tokens":102,"completion_tokens":194,"total_tokens":296}}
230
+ {"request_id":"req_63","timestamp":"2024-10-25T11:39:09.912Z","user_id":"usr_37","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.5","max_tokens":1112,"stream":true}},"usage":{"prompt_tokens":211,"completion_tokens":139,"total_tokens":350}}
231
+ {"request_id":"req_64","timestamp":"2024-10-20T16:35:00.170Z","user_id":"usr_32","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-4","options":{"temperature":"0.2","max_tokens":535,"stream":true}},"usage":{"prompt_tokens":355,"completion_tokens":116,"total_tokens":471}}
232
+ {"request_id":"req_65","timestamp":"2024-11-27T04:31:51.172Z","user_id":"usr_44","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"0.3","max_tokens":838,"stream":true}},"usage":{"prompt_tokens":468,"completion_tokens":298,"total_tokens":766}}
233
+ {"request_id":"req_66","timestamp":"2024-10-26T17:30:31.696Z","user_id":"usr_12","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-sonnet","options":{"temperature":"0.7","max_tokens":505,"stream":true}},"usage":{"prompt_tokens":190,"completion_tokens":207,"total_tokens":397}}
234
+ {"request_id":"req_67","timestamp":"2024-10-04T02:09:21.280Z","user_id":"usr_31","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"1.0","max_tokens":886,"stream":false}},"usage":{"prompt_tokens":264,"completion_tokens":60,"total_tokens":324}}
235
+ {"request_id":"req_68","timestamp":"2024-11-14T09:34:25.291Z","user_id":"usr_17","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"0.5","max_tokens":1794,"stream":true}},"usage":{"prompt_tokens":166,"completion_tokens":133,"total_tokens":299}}
236
+ {"request_id":"req_69","timestamp":"2024-10-13T20:06:12.700Z","user_id":"usr_18","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.6","max_tokens":555,"stream":false}},"usage":{"prompt_tokens":247,"completion_tokens":149,"total_tokens":396}}
237
+ {"request_id":"req_70","timestamp":"2024-10-05T01:45:08.193Z","user_id":"usr_31","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.9","max_tokens":1428,"stream":true}},"usage":{"prompt_tokens":54,"completion_tokens":132,"total_tokens":186}}
238
+ {"request_id":"req_71","timestamp":"2024-11-15T22:14:55.479Z","user_id":"usr_18","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.5","max_tokens":650,"stream":false}},"usage":{"prompt_tokens":65,"completion_tokens":206,"total_tokens":271}}
239
+ {"request_id":"req_72","timestamp":"2024-11-09T06:44:07.284Z","user_id":"usr_43","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.2","max_tokens":1363,"stream":false}},"usage":{"prompt_tokens":443,"completion_tokens":284,"total_tokens":727}}
240
+ {"request_id":"req_73","timestamp":"2024-11-06T01:10:44.917Z","user_id":"usr_24","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-4","options":{"temperature":"0.4","max_tokens":1927,"stream":true}},"usage":{"prompt_tokens":495,"completion_tokens":216,"total_tokens":711}}
241
+ {"request_id":"req_74","timestamp":"2024-10-19T14:43:49.854Z","user_id":"usr_26","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.4","max_tokens":679,"stream":false}},"usage":{"prompt_tokens":221,"completion_tokens":286,"total_tokens":507}}
242
+ {"request_id":"req_75","timestamp":"2024-10-05T06:19:28.703Z","user_id":"usr_25","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-opus","options":{"temperature":"0.8","max_tokens":1614,"stream":false}},"usage":{"prompt_tokens":59,"completion_tokens":93,"total_tokens":152}}
243
+ {"request_id":"req_76","timestamp":"2024-11-04T22:29:57.675Z","user_id":"usr_33","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.9","max_tokens":1491,"stream":false}},"usage":{"prompt_tokens":90,"completion_tokens":120,"total_tokens":210}}
244
+ {"request_id":"req_77","timestamp":"2024-11-08T02:17:28.909Z","user_id":"usr_4","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"0.0","max_tokens":1324,"stream":true}},"usage":{"prompt_tokens":355,"completion_tokens":102,"total_tokens":457}}
245
+ {"request_id":"req_78","timestamp":"2024-10-24T15:25:14.046Z","user_id":"usr_39","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.8","max_tokens":1529,"stream":false}},"usage":{"prompt_tokens":208,"completion_tokens":141,"total_tokens":349}}
246
+ {"request_id":"req_79","timestamp":"2024-10-27T13:01:16.190Z","user_id":"usr_40","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-opus","options":{"temperature":"0.0","max_tokens":1638,"stream":false}},"usage":{"prompt_tokens":243,"completion_tokens":274,"total_tokens":517}}
247
+ {"request_id":"req_80","timestamp":"2024-11-22T13:07:16.699Z","user_id":"usr_24","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.4","max_tokens":1397,"stream":true}},"usage":{"prompt_tokens":263,"completion_tokens":185,"total_tokens":448}}
248
+ {"request_id":"req_81","timestamp":"2024-11-29T03:35:54.264Z","user_id":"usr_26","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-4","options":{"temperature":"0.1","max_tokens":1521,"stream":false}},"usage":{"prompt_tokens":273,"completion_tokens":199,"total_tokens":472}}
249
+ {"request_id":"req_82","timestamp":"2024-11-20T08:27:02.022Z","user_id":"usr_38","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-opus","options":{"temperature":"0.6","max_tokens":1463,"stream":true}},"usage":{"prompt_tokens":192,"completion_tokens":120,"total_tokens":312}}
250
+ {"request_id":"req_83","timestamp":"2024-11-09T10:38:51.640Z","user_id":"usr_24","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-3.5-turbo","options":{"temperature":"1.0","max_tokens":1574,"stream":false}},"usage":{"prompt_tokens":406,"completion_tokens":58,"total_tokens":464}}
251
+ {"request_id":"req_84","timestamp":"2024-10-29T18:37:34.187Z","user_id":"usr_16","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-opus","options":{"temperature":"0.1","max_tokens":1924,"stream":true}},"usage":{"prompt_tokens":237,"completion_tokens":284,"total_tokens":521}}
252
+ {"request_id":"req_85","timestamp":"2024-10-17T21:47:26.419Z","user_id":"usr_49","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-opus","options":{"temperature":"0.7","max_tokens":1714,"stream":false}},"usage":{"prompt_tokens":114,"completion_tokens":194,"total_tokens":308}}
253
+ {"request_id":"req_86","timestamp":"2024-10-13T16:59:19.264Z","user_id":"usr_40","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.8","max_tokens":520,"stream":true}},"usage":{"prompt_tokens":227,"completion_tokens":190,"total_tokens":417}}
254
+ {"request_id":"req_87","timestamp":"2024-10-25T06:47:20.855Z","user_id":"usr_48","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.3","max_tokens":1904,"stream":false}},"usage":{"prompt_tokens":476,"completion_tokens":96,"total_tokens":572}}
255
+ {"request_id":"req_88","timestamp":"2024-11-05T07:30:25.734Z","user_id":"usr_4","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.9","max_tokens":535,"stream":false}},"usage":{"prompt_tokens":399,"completion_tokens":217,"total_tokens":616}}
256
+ {"request_id":"req_89","timestamp":"2024-11-13T01:46:36.632Z","user_id":"usr_20","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-4","options":{"temperature":"0.4","max_tokens":1260,"stream":true}},"usage":{"prompt_tokens":189,"completion_tokens":159,"total_tokens":348}}
257
+ {"request_id":"req_90","timestamp":"2024-11-29T06:17:41.475Z","user_id":"usr_7","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"claude-3-sonnet","options":{"temperature":"0.5","max_tokens":1105,"stream":false}},"usage":{"prompt_tokens":164,"completion_tokens":223,"total_tokens":387}}
258
+ {"request_id":"req_91","timestamp":"2024-11-21T21:18:42.618Z","user_id":"usr_31","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.1","max_tokens":1899,"stream":false}},"usage":{"prompt_tokens":424,"completion_tokens":121,"total_tokens":545}}
259
+ {"request_id":"req_92","timestamp":"2024-10-13T04:50:06.616Z","user_id":"usr_20","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-4","options":{"temperature":"0.6","max_tokens":752,"stream":true}},"usage":{"prompt_tokens":400,"completion_tokens":160,"total_tokens":560}}
260
+ {"request_id":"req_93","timestamp":"2024-10-06T12:44:26.578Z","user_id":"usr_18","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.4","max_tokens":1916,"stream":false}},"usage":{"prompt_tokens":193,"completion_tokens":299,"total_tokens":492}}
261
+ {"request_id":"req_94","timestamp":"2024-11-16T12:40:44.907Z","user_id":"usr_46","request":{"type":"chat","endpoint":"/v1/completions","model":"claude-3-sonnet","options":{"temperature":"0.9","max_tokens":1612,"stream":false}},"usage":{"prompt_tokens":149,"completion_tokens":181,"total_tokens":330}}
262
+ {"request_id":"req_95","timestamp":"2024-10-28T14:02:47.893Z","user_id":"usr_21","request":{"type":"chat","endpoint":"/v1/chat/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.6","max_tokens":1378,"stream":true}},"usage":{"prompt_tokens":363,"completion_tokens":292,"total_tokens":655}}
263
+ {"request_id":"req_96","timestamp":"2024-10-24T10:13:34.492Z","user_id":"usr_9","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-opus","options":{"temperature":"0.2","max_tokens":1055,"stream":true}},"usage":{"prompt_tokens":463,"completion_tokens":252,"total_tokens":715}}
264
+ {"request_id":"req_97","timestamp":"2024-10-25T05:35:39.972Z","user_id":"usr_32","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-3.5-turbo","options":{"temperature":"0.1","max_tokens":877,"stream":false}},"usage":{"prompt_tokens":451,"completion_tokens":211,"total_tokens":662}}
265
+ {"request_id":"req_98","timestamp":"2024-10-30T12:55:53.621Z","user_id":"usr_21","request":{"type":"chat","endpoint":"/v1/images/generations","model":"claude-3-sonnet","options":{"temperature":"0.8","max_tokens":1966,"stream":true}},"usage":{"prompt_tokens":497,"completion_tokens":93,"total_tokens":590}}
266
+ {"request_id":"req_99","timestamp":"2024-11-14T11:31:10.758Z","user_id":"usr_11","request":{"type":"chat","endpoint":"/v1/completions","model":"gpt-4","options":{"temperature":"0.4","max_tokens":564,"stream":true}},"usage":{"prompt_tokens":244,"completion_tokens":154,"total_tokens":398}}
267
+ {"request_id":"req_100","timestamp":"2024-11-22T13:43:33.802Z","user_id":"usr_25","request":{"type":"chat","endpoint":"/v1/images/generations","model":"gpt-4","options":{"temperature":"0.9","max_tokens":1096,"stream":true}},"usage":{"prompt_tokens":58,"completion_tokens":274,"total_tokens":332}}
268
+ """
269
+ persist_fixture(f"{ds_name}", ds_content)
270
+ click.echo(FeedbackManager.info(message=f"✓ /fixtures/{ds_name}"))
271
+
272
+ # Create sample endpoint
273
+ pipe_name = "api_token_usage"
274
+ pipe_path = Path(folder) / "endpoints" / f"{pipe_name}.pipe"
275
+ pipe_content = """DESCRIPTION >
276
+ Pipe to generate a token usage timeline.
277
+
278
+ NODE api_token_usage_node_1
279
+ SQL >
280
+ %
281
+ SELECT
282
+ toDate(timestamp) as date,
283
+ user_id,
284
+ sum(usage_total_tokens) as total_tokens
285
+ FROM
286
+ events
287
+ WHERE
288
+ user_id IN (SELECT id FROM users WHERE organization_id = {{String(organization_id)}})
289
+ {%if defined(start_date) and defined(end_date)%}
290
+ AND timestamp BETWEEN {{DateTime(start_date)}} AND {{DateTime(end_date)}}
291
+ {%else%}
292
+ AND timestamp BETWEEN now() - interval 30 day AND now()
293
+ {%end%}
294
+ GROUP BY
295
+ date, user_id
296
+ ORDER BY
297
+ date
298
+
299
+ TYPE Endpoint
300
+
301
+ """
302
+ pipe_path.write_text(pipe_content)
303
+ click.echo(FeedbackManager.info(message=f"✓ /endpoints/{pipe_name}.pipe"))
304
+
305
+ elif data:
67
306
  ds_name = os.path.basename(data.split(".")[0])
68
307
  data_content = Path(data).read_text()
69
308
  datasource_path = Path(folder) / "datasources" / f"{ds_name}.datasource"
@@ -74,13 +313,12 @@ async def create(
74
313
  datasource_files = [f for f in os.listdir(Path(folder) / "datasources") if f.endswith(".datasource")]
75
314
  for datasource_file in datasource_files:
76
315
  datasource_path = Path(folder) / "datasources" / datasource_file
77
- llm_config = CLIConfig.get_llm_config()
78
- llm = LLM(key=llm_config["api_key"])
316
+ llm = LLM(client=tb_client)
79
317
  datasource_name = datasource_path.stem
80
318
  datasource_content = datasource_path.read_text()
81
319
  has_json_path = "`json:" in datasource_content
82
320
  if has_json_path:
83
- sql = await llm.generate_sql_sample_data(tb_client, datasource_name, datasource_content, rows)
321
+ sql = await llm.generate_sql_sample_data(schema=datasource_content, rows=rows, context=prompt)
84
322
  result = await tb_client.query(f"{sql} FORMAT JSON")
85
323
  data = result.get("data", [])
86
324
  fixture_name = build_fixture_name(datasource_path.absolute(), datasource_name, datasource_content)
@@ -88,8 +326,6 @@ async def create(
88
326
  click.echo(FeedbackManager.info(message=f"✓ /fixtures/{datasource_name}"))
89
327
 
90
328
  click.echo(FeedbackManager.success(message="✓ Done!\n"))
91
-
92
- click.echo(FeedbackManager.success(message="✓ Tinybird local is ready!"))
93
329
  except Exception as e:
94
330
  click.echo(FeedbackManager.error(message=f"Error: {str(e)}"))
95
331
 
@@ -130,8 +366,7 @@ TYPE ENDPOINT
130
366
  )
131
367
  elif prompt:
132
368
  try:
133
- llm_config = CLIConfig.get_llm_config()
134
- llm = LLM(key=llm_config["api_key"])
369
+ llm = LLM(client=client)
135
370
  result = await llm.create_project(prompt)
136
371
  for ds in result.datasources:
137
372
  content = ds.content.replace("```", "")
@@ -54,15 +54,12 @@ async def folder_build(
54
54
  folder: str = ".",
55
55
  ignore_sql_errors: bool = False,
56
56
  is_internal: bool = False,
57
- only_pipes: bool = False,
58
57
  is_vendor: bool = False,
59
58
  current_ws: Optional[Dict[str, Any]] = None,
60
59
  local_ws: Optional[Dict[str, Any]] = None,
61
60
  workspaces: Optional[List[Dict[str, Any]]] = None,
61
+ watch: bool = False,
62
62
  ):
63
- if only_pipes:
64
- filenames = [f for f in filenames if f.endswith(".pipe")]
65
-
66
63
  config = CLIConfig.get_project_config()
67
64
  build = True
68
65
  dry_run = False
@@ -118,7 +115,7 @@ async def folder_build(
118
115
 
119
116
  vendor_workspaces = []
120
117
 
121
- if vendor_path.exists() and not is_vendor:
118
+ if vendor_path.exists() and not is_vendor and not watch:
122
119
  user_workspaces = await user_client.user_workspaces()
123
120
  for x in vendor_path.iterdir():
124
121
  if x.is_dir() and x.name not in existing_workspaces:
@@ -147,7 +144,7 @@ async def folder_build(
147
144
  ws_client.token = vendor_ws["token"]
148
145
  shared_ws_path = Path(folder) / "vendor" / vendor_ws["name"]
149
146
 
150
- if shared_ws_path.exists() and not is_vendor:
147
+ if shared_ws_path.exists() and not is_vendor and not watch:
151
148
  await folder_build(
152
149
  ws_client, folder=shared_ws_path.as_posix(), is_vendor=True, current_ws=vendor_ws, local_ws=local_ws
153
150
  )
@@ -440,14 +437,16 @@ async def folder_build(
440
437
 
441
438
  for group in groups:
442
439
  for name in group:
443
- try:
444
- await tb_client.datasource_delete(name, force=True)
445
- except Exception:
446
- pass
447
- try:
448
- await tb_client.pipe_delete(name)
449
- except Exception:
450
- pass
440
+ is_vendor = resources_to_run_fork_downstream.get(name, {}).get("filename", "").startswith("vendor/")
441
+ if not is_vendor:
442
+ try:
443
+ await tb_client.datasource_delete(name, force=True)
444
+ except Exception:
445
+ pass
446
+ try:
447
+ await tb_client.pipe_delete(name)
448
+ except Exception:
449
+ pass
451
450
 
452
451
  groups.reverse()
453
452
  for group in groups:
@@ -1036,9 +1035,13 @@ async def build_graph(
1036
1035
  raise click.ClickException(str(e))
1037
1036
 
1038
1037
  for r in res:
1039
- fn = r["resource_name"]
1038
+ resource_name = r["resource_name"]
1040
1039
  warnings = r.get("warnings", [])
1041
- if changed and fn in changed and (not changed[fn] or changed[fn] in ["shared", "remote"]):
1040
+ if (
1041
+ changed
1042
+ and resource_name in changed
1043
+ and (not changed[resource_name] or changed[resource_name] in ["shared", "remote"])
1044
+ ):
1042
1045
  continue
1043
1046
 
1044
1047
  if (
@@ -1046,9 +1049,9 @@ async def build_graph(
1046
1049
  and r.get("resource", "") == "pipes"
1047
1050
  and any(["engine" in x.get("params", {}) for x in r.get("nodes", [])])
1048
1051
  ):
1049
- raise click.ClickException(FeedbackManager.error_forkdownstream_pipes_with_engine(pipe=fn))
1052
+ raise click.ClickException(FeedbackManager.error_forkdownstream_pipes_with_engine(pipe=resource_name))
1050
1053
 
1051
- to_run[fn] = r
1054
+ to_run[resource_name] = r
1052
1055
  file_deps = r.get("deps", [])
1053
1056
  deps += file_deps
1054
1057
  # calculate and look for deps
@@ -1064,7 +1067,7 @@ async def build_graph(
1064
1067
  to_run[ds_fn] = deepcopy(r)
1065
1068
  try:
1066
1069
  to_run[ds_fn]["deps"] = list(
1067
- set(to_run[ds_fn].get("deps", []) + prev.get("deps", []) + [fn])
1070
+ set(to_run[ds_fn].get("deps", []) + prev.get("deps", []) + [resource_name])
1068
1071
  )
1069
1072
  except ValueError:
1070
1073
  pass
@@ -1085,7 +1088,7 @@ async def build_graph(
1085
1088
  )
1086
1089
  r["shared_with"] = mapped_workspaces
1087
1090
 
1088
- dep_map[fn] = set(dep_list)
1091
+ dep_map[resource_name] = set(dep_list)
1089
1092
  return os.path.basename(name), warnings
1090
1093
 
1091
1094
  processed = set()
@@ -1169,7 +1172,10 @@ async def process_file(
1169
1172
  workspace_map: Optional[Dict] = None,
1170
1173
  workspace_lib_paths: Optional[List[Tuple[str, str]]] = None,
1171
1174
  current_ws: Optional[Dict[str, Any]] = None,
1172
- ):
1175
+ ) -> List[Dict[str, Any]]:
1176
+ """Returns a list of resources
1177
+
1178
+ For both datasources and pipes, a list of just one item is returned"""
1173
1179
  if workspace_map is None:
1174
1180
  workspace_map = {}
1175
1181
 
@@ -1349,6 +1355,8 @@ async def process_file(
1349
1355
  indexes = None
1350
1356
  if indexes_list:
1351
1357
  indexes = "\n".join([index.to_sql() for index in indexes_list])
1358
+ # Here is where we lose the columns
1359
+ # I don't know why we don't return something more similar to the parsed doc
1352
1360
  params = {
1353
1361
  "name": append_version_to_name(name, version),
1354
1362
  "description": description,
@@ -264,6 +264,10 @@ async def new_pipe(
264
264
  except Exception as e:
265
265
  raise click.ClickException(FeedbackManager.error_creating_pipe(error=e))
266
266
 
267
+ if data.get("type") == "endpoint":
268
+ token = tb_client.token
269
+ print(f"""** => Test endpoint with:\n** $ curl {host}/v0/pipes/{p["name"]}.json?token={token}""") # noqa: T201
270
+
267
271
 
268
272
  async def get_token_from_main_branch(branch_tb_client: TinyB) -> Optional[str]:
269
273
  token_from_main_branch = None