tinybird 0.0.1.dev300__tar.gz → 0.0.1.dev301__tar.gz

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.

Files changed (150) hide show
  1. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/PKG-INFO +1 -1
  2. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/connectors.py +1 -7
  3. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/datafile/common.py +2 -6
  4. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/service_datasources.py +0 -2
  5. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/__cli__.py +2 -2
  6. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/client.py +0 -4
  7. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/agent.py +39 -8
  8. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/utils.py +1 -1
  9. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/build.py +2 -2
  10. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/build_common.py +2 -2
  11. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/cli.py +1 -1
  12. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/common.py +2 -2
  13. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/diff.py +1 -1
  14. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/format_pipe.py +1 -1
  15. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/exceptions.py +7 -0
  16. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/shell.py +1 -1
  17. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/cli.py +2 -2
  18. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/common.py +2 -2
  19. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/pipe.py +1 -1
  20. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tornado_template.py +1 -1
  21. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird.egg-info/PKG-INFO +1 -1
  22. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/setup.cfg +0 -0
  23. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/__cli__.py +0 -0
  24. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/ch_utils/constants.py +0 -0
  25. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/ch_utils/engine.py +0 -0
  26. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/check_pypi.py +0 -0
  27. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/client.py +0 -0
  28. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/config.py +0 -0
  29. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/context.py +0 -0
  30. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/datafile/exceptions.py +0 -0
  31. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/datafile/parse_connection.py +0 -0
  32. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/datafile/parse_datasource.py +0 -0
  33. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/datafile/parse_pipe.py +0 -0
  34. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/datatypes.py +0 -0
  35. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/feedback_manager.py +0 -0
  36. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/git_settings.py +0 -0
  37. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/prompts.py +0 -0
  38. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/sql.py +0 -0
  39. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/sql_template.py +0 -0
  40. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/sql_template_fmt.py +0 -0
  41. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/sql_toolset.py +0 -0
  42. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/syncasync.py +0 -0
  43. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/check_pypi.py +0 -0
  44. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/cli.py +0 -0
  45. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/config.py +0 -0
  46. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/__init__.py +0 -0
  47. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/animations.py +0 -0
  48. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/banner.py +0 -0
  49. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/command_agent.py +0 -0
  50. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/compactor.py +0 -0
  51. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/explore_agent.py +0 -0
  52. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/file_agent.py +0 -0
  53. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/memory.py +0 -0
  54. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/mock_agent.py +0 -0
  55. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/models.py +0 -0
  56. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/prompts.py +0 -0
  57. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/testing_agent.py +0 -0
  58. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/__init__.py +0 -0
  59. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/analyze.py +0 -0
  60. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/append.py +0 -0
  61. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/build.py +0 -0
  62. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/datafile.py +0 -0
  63. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/deploy.py +0 -0
  64. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/deploy_check.py +0 -0
  65. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/diff_resource.py +0 -0
  66. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/execute_query.py +0 -0
  67. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/file.py +0 -0
  68. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/get_endpoint_stats.py +0 -0
  69. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/get_openapi_definition.py +0 -0
  70. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/mock.py +0 -0
  71. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/plan.py +0 -0
  72. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/request_endpoint.py +0 -0
  73. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/run_command.py +0 -0
  74. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/secret.py +0 -0
  75. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/agent/tools/test.py +0 -0
  76. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/cicd.py +0 -0
  77. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/config.py +0 -0
  78. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/connection.py +0 -0
  79. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/copy.py +0 -0
  80. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/create.py +0 -0
  81. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/build.py +0 -0
  82. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/build_common.py +0 -0
  83. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
  84. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  85. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/fixture.py +0 -0
  86. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/format_common.py +0 -0
  87. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  88. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  89. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/playground.py +0 -0
  90. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datafile/pull.py +0 -0
  91. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/datasource.py +0 -0
  92. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/deployment.py +0 -0
  93. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/deployment_common.py +0 -0
  94. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/deprecations.py +0 -0
  95. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/dev_server.py +0 -0
  96. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/endpoint.py +0 -0
  97. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/feedback_manager.py +0 -0
  98. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/info.py +0 -0
  99. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/infra.py +0 -0
  100. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/job.py +0 -0
  101. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/llm.py +0 -0
  102. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/llm_utils.py +0 -0
  103. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/local.py +0 -0
  104. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/local_common.py +0 -0
  105. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/login.py +0 -0
  106. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/login_common.py +0 -0
  107. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/logout.py +0 -0
  108. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/materialization.py +0 -0
  109. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/mock.py +0 -0
  110. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/mock_common.py +0 -0
  111. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/open.py +0 -0
  112. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/pipe.py +0 -0
  113. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/project.py +0 -0
  114. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/regions.py +0 -0
  115. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/secret.py +0 -0
  116. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/secret_common.py +0 -0
  117. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/sink.py +0 -0
  118. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/table.py +0 -0
  119. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/telemetry.py +0 -0
  120. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/test.py +0 -0
  121. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/test_common.py +0 -0
  122. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
  123. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
  124. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/token.py +0 -0
  125. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/watch.py +0 -0
  126. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/workspace.py +0 -0
  127. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb/modules/workspace_members.py +0 -0
  128. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli.py +0 -0
  129. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/auth.py +0 -0
  130. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/branch.py +0 -0
  131. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/cicd.py +0 -0
  132. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/config.py +0 -0
  133. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/connection.py +0 -0
  134. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/datasource.py +0 -0
  135. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/exceptions.py +0 -0
  136. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/fmt.py +0 -0
  137. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/job.py +0 -0
  138. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/regions.py +0 -0
  139. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/tag.py +0 -0
  140. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/telemetry.py +0 -0
  141. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/test.py +0 -0
  142. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  143. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  144. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/workspace.py +0 -0
  145. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  146. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird.egg-info/SOURCES.txt +0 -0
  147. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird.egg-info/dependency_links.txt +0 -0
  148. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird.egg-info/entry_points.txt +0 -0
  149. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird.egg-info/requires.txt +0 -0
  150. {tinybird-0.0.1.dev300 → tinybird-0.0.1.dev301}/tinybird.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev300
3
+ Version: 0.0.1.dev301
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -369,13 +369,7 @@ class Snowflake(Connector):
369
369
  the_type = "String"
370
370
  if t.startswith("NUMBER"):
371
371
  the_type = "Int32"
372
- if (
373
- t.startswith("FLOAT")
374
- or t.startswith("DOUBLE")
375
- or t.startswith("REAL")
376
- or t.startswith("NUMERIC")
377
- or t.startswith("DECIMAL")
378
- ):
372
+ if t.startswith(("FLOAT", "DOUBLE", "REAL", "NUMERIC", "DECIMAL")):
379
373
  the_type = "Float32"
380
374
  if t == "DATE":
381
375
  the_type = "Date"
@@ -2051,11 +2051,7 @@ def parse(
2051
2051
  lexer = list(sa)
2052
2052
  if lexer:
2053
2053
  cmd, args = lexer[0], lexer[1:]
2054
- if (
2055
- parser_state.multiline
2056
- and cmd.lower() in cmds
2057
- and not (line.startswith(" ") or line.startswith("\t"))
2058
- ):
2054
+ if parser_state.multiline and cmd.lower() in cmds and not line.startswith((" ", "\t")):
2059
2055
  cmds[parser_state.command](
2060
2056
  parser_state.multiline_string,
2061
2057
  lineno=lineno,
@@ -2508,7 +2504,7 @@ def is_file_a_datasource(filename: str) -> bool:
2508
2504
 
2509
2505
  for line in lines:
2510
2506
  trimmed_line = line.strip().lower()
2511
- if trimmed_line.startswith("schema") or trimmed_line.startswith("engine"):
2507
+ if trimmed_line.startswith(("schema", "engine")):
2512
2508
  return True
2513
2509
 
2514
2510
  return False
@@ -446,7 +446,6 @@ def get_tinybird_service_datasources() -> List[Dict[str, Any]]:
446
446
  {"name": "workspace_name", "type": "String"},
447
447
  {"name": "user_email", "type": "String"},
448
448
  {"name": "request_id", "type": "String"},
449
- {"name": "model", "type": "LowCardinality(String)"},
450
449
  {"name": "prompt_tokens", "type": "UInt32"},
451
450
  {"name": "completion_tokens", "type": "UInt32"},
452
451
  {"name": "total_tokens", "type": "UInt32"},
@@ -927,7 +926,6 @@ def get_organization_service_datasources() -> List[Dict[str, Any]]:
927
926
  {"name": "workspace_name", "type": "String"},
928
927
  {"name": "user_email", "type": "String"},
929
928
  {"name": "request_id", "type": "String"},
930
- {"name": "model", "type": "LowCardinality(String)"},
931
929
  {"name": "prompt_tokens", "type": "UInt32"},
932
930
  {"name": "completion_tokens", "type": "UInt32"},
933
931
  {"name": "total_tokens", "type": "UInt32"},
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://www.tinybird.co/docs/forward/commands'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '0.0.1.dev300'
8
- __revision__ = '9791d55'
7
+ __version__ = '0.0.1.dev301'
8
+ __revision__ = '1ce40fd'
@@ -1390,7 +1390,3 @@ class TinyB:
1390
1390
 
1391
1391
  def delete_tag(self, name: str):
1392
1392
  self._req(f"/v0/tags/{name}", method="DELETE")
1393
-
1394
- def explore_data(self, prompt: str) -> str:
1395
- params = urlencode({"prompt": prompt, "host": self.host, "origin": "cli"})
1396
- return self._req(f"/v1/agents/explore?{params}")
@@ -7,7 +7,7 @@ import urllib.parse
7
7
  import uuid
8
8
  from functools import partial
9
9
  from pathlib import Path
10
- from typing import Any, Optional
10
+ from typing import Any, Callable, Optional
11
11
 
12
12
  import click
13
13
  import humanfriendly
@@ -67,6 +67,7 @@ from tinybird.tb.modules.common import (
67
67
  echo_safe_humanfriendly_tables_format_pretty_table,
68
68
  get_region_from_host,
69
69
  get_regions,
70
+ sys_exit,
70
71
  update_cli,
71
72
  )
72
73
  from tinybird.tb.modules.config import CLIConfig
@@ -428,7 +429,6 @@ class TinybirdAgent:
428
429
  save_messages(new_messages)
429
430
  self.thinking_animation.stop()
430
431
  click.echo(result.output)
431
- self.echo_usage(config)
432
432
 
433
433
  async def run_iter(self, user_prompt: str, config: dict[str, Any], run_id: Optional[str] = None) -> None:
434
434
  model = create_model(self.user_token, self.host, self.workspace_id, run_id=run_id)
@@ -455,28 +455,57 @@ class TinybirdAgent:
455
455
  self.messages.extend(new_messages)
456
456
  save_messages(new_messages)
457
457
  self.thinking_animation.stop()
458
- self.echo_usage(config)
459
458
 
460
- def echo_usage(self, config: dict[str, Any]) -> None:
459
+ def echo_usage(self, config: dict[str, Any], show_credits: bool = False) -> None:
461
460
  try:
462
461
  client = _get_tb_client(config["user_token"], config["host"])
463
462
  workspace_id = config.get("id", "")
464
463
  workspace = client.workspace(workspace_id, with_organization=True, version="v1")
464
+ is_free_plan = workspace["organization"]["plan"].get("billing") == "free_shared_infrastructure_usage"
465
+
466
+ if not is_free_plan and not show_credits:
467
+ return
468
+
465
469
  limits_data = client.organization_limits(workspace["organization"]["id"])
466
470
  llm_usage_limits = limits_data.get("limits", {}).get("llm_usage", {})
467
471
  current_llm_usage = llm_usage_limits.get("quantity") or 0
468
472
  llm_usage = llm_usage_limits.get("max") or 0
469
473
  remaining_credits = round(max(llm_usage - current_llm_usage, 0), 2)
470
474
  current_llm_usage = round(min(llm_usage, current_llm_usage), 2)
475
+
471
476
  if not llm_usage:
472
477
  return
473
- warning_threshold = llm_usage * 0.8
474
- message_color = FeedbackManager.warning if current_llm_usage >= warning_threshold else FeedbackManager.gray
478
+
479
+ def get_message(current_llm_usage, llm_usage: int) -> tuple[Callable[..., str], str, bool]:
480
+ warning_threshold = llm_usage * 0.8
481
+ ui_host = get_display_cloud_host(config["host"])
482
+
483
+ if is_free_plan:
484
+ upgrade_link = f"{ui_host}/organizations/{workspace['organization']['name']}/upgrade?from=agent"
485
+ if current_llm_usage >= llm_usage:
486
+ return (
487
+ FeedbackManager.error,
488
+ f" You have reached the maximum number of credits. Please upgrade to continue using Tinybird Code: {upgrade_link}",
489
+ True,
490
+ )
491
+ if current_llm_usage >= warning_threshold:
492
+ return (
493
+ FeedbackManager.warning,
494
+ f" You are reaching the maximum number of credits. Please upgrade to continue using Tinybird Code: {upgrade_link}",
495
+ False,
496
+ )
497
+ return FeedbackManager.gray, "", False
498
+
499
+ message_color, upgrade_message, should_exit = get_message(current_llm_usage, llm_usage)
475
500
  click.echo(
476
501
  message_color(
477
- message=f"{remaining_credits} credits left ({current_llm_usage}/{llm_usage}). You can continue using Tinybird Code. Limits will be enforced soon."
502
+ message=f"{remaining_credits} credits left ({current_llm_usage}/{llm_usage}).{upgrade_message}"
478
503
  )
479
504
  )
505
+
506
+ if should_exit:
507
+ sys_exit("tinybird_code_error", "Maximum number of credits reached")
508
+
480
509
  except Exception:
481
510
  pass
482
511
 
@@ -577,7 +606,6 @@ def run_agent(
577
606
  )
578
607
  )
579
608
  agent.echo_usage(config)
580
- click.echo()
581
609
 
582
610
  except Exception as e:
583
611
  click.echo(FeedbackManager.error(message=f"Failed to initialize agent: {e}"))
@@ -630,6 +658,9 @@ def run_agent(
630
658
  elif user_input.lower() == "/help":
631
659
  subprocess.run(["tb", "--help"], check=True)
632
660
  continue
661
+ elif user_input.lower() == "/usage":
662
+ agent.echo_usage(config, show_credits=True)
663
+ continue
633
664
  elif user_input.strip() == "":
634
665
  continue
635
666
  else:
@@ -512,7 +512,7 @@ def create_terminal_box(content: str, new_content: Optional[str] = None, title:
512
512
  new_line_num = int(match.group(2))
513
513
  old_index = old_line_num - 1
514
514
  new_index = new_line_num - 1
515
- elif line.startswith("---") or line.startswith("+++"):
515
+ elif line.startswith(("---", "+++")):
516
516
  # Skip file headers
517
517
  pass
518
518
  elif line.startswith(" "):
@@ -8,7 +8,7 @@ from urllib.parse import urlencode
8
8
 
9
9
  import click
10
10
 
11
- import tinybird.context as context
11
+ from tinybird import context
12
12
  from tinybird.datafile.exceptions import ParseException
13
13
  from tinybird.datafile.parse_datasource import parse_datasource
14
14
  from tinybird.datafile.parse_pipe import parse_pipe
@@ -140,7 +140,7 @@ def dev_cloud(
140
140
  context.disable_template_security_validation.set(True)
141
141
 
142
142
  def process(filenames: List[str], watch: bool = False):
143
- datafiles = [f for f in filenames if f.endswith(".datasource") or f.endswith(".pipe")]
143
+ datafiles = [f for f in filenames if f.endswith((".datasource", ".pipe"))]
144
144
  if len(datafiles) > 0:
145
145
  check_filenames(filenames=datafiles)
146
146
  folder_playground(
@@ -51,7 +51,7 @@ def process(
51
51
  return build_status.error
52
52
  else:
53
53
  build_status.building = True
54
- if file_changed and (file_changed.endswith(FixtureExtension.NDJSON) or file_changed.endswith(FixtureExtension.CSV)):
54
+ if file_changed and file_changed.endswith((FixtureExtension.NDJSON, FixtureExtension.CSV)):
55
55
  rebuild_fixture(project, tb_client, file_changed)
56
56
  if build_status:
57
57
  build_status.building = False
@@ -61,7 +61,7 @@ def process(
61
61
  if build_status:
62
62
  build_status.building = False
63
63
  build_status.error = None
64
- elif file_changed and (file_changed.endswith(".env.local") or file_changed.endswith(".env")):
64
+ elif file_changed and file_changed.endswith((".env.local", ".env")):
65
65
  if build_status:
66
66
  build_status.building = False
67
67
  build_status.error = None
@@ -302,7 +302,7 @@ def sql(
302
302
  )
303
303
 
304
304
  query = ""
305
- for _, elem in dependencies_graph.to_run.items():
305
+ for elem in dependencies_graph.to_run.values():
306
306
  for _node in elem["nodes"]:
307
307
  if _node["params"]["name"].lower() == node.lower():
308
308
  query = "".join(_node["sql"])
@@ -908,7 +908,7 @@ def get_format_from_filename_or_url(filename_or_url: str) -> str:
908
908
  'csv'
909
909
  """
910
910
  filename_or_url = filename_or_url.lower()
911
- if filename_or_url.endswith("json") or filename_or_url.endswith("ndjson"):
911
+ if filename_or_url.endswith(("json", "ndjson")):
912
912
  return "ndjson"
913
913
  if filename_or_url.endswith("parquet"):
914
914
  return "parquet"
@@ -916,7 +916,7 @@ def get_format_from_filename_or_url(filename_or_url: str) -> str:
916
916
  return "csv"
917
917
  try:
918
918
  parsed = urlparse(filename_or_url)
919
- if parsed.path.endswith("json") or parsed.path.endswith("ndjson"):
919
+ if parsed.path.endswith(("json", "ndjson")):
920
920
  return "ndjson"
921
921
  if parsed.path.endswith("parquet"):
922
922
  return "parquet"
@@ -168,7 +168,7 @@ def diff_command(
168
168
  sys.stdout.writelines(diff_lines)
169
169
  click.echo("")
170
170
 
171
- for rfilename, _ in local_resources.items():
171
+ for rfilename in local_resources.keys():
172
172
  if rfilename not in changed:
173
173
  for resource in remote_datasources + remote_pipes:
174
174
  properties = get_name_version(resource["name"])
@@ -181,7 +181,7 @@ def format_pipe(
181
181
  )
182
182
 
183
183
  if not unroll_includes:
184
- for k, _ in doc.includes.items():
184
+ for k in doc.includes.keys():
185
185
  if ".incl" not in k:
186
186
  continue
187
187
  file_parts.append(f"INCLUDE {k}")
@@ -127,6 +127,13 @@ class CLIMockException(CLIException):
127
127
  super().__init__(message, "mock_error", **kw_telemetry_event_data)
128
128
 
129
129
 
130
+ class CLIAgentException(CLIException):
131
+ """Exceptions generated by the agent commands"""
132
+
133
+ def __init__(self, message: str, **kw_telemetry_event_data: Any) -> None:
134
+ super().__init__(message, "agent_error", **kw_telemetry_event_data)
135
+
136
+
130
137
  class CLILoginException(CLIException):
131
138
  """Exceptions generated by the login commands"""
132
139
 
@@ -294,7 +294,7 @@ class Shell:
294
294
  arg = argline.strip().lower()
295
295
  if not arg:
296
296
  return
297
- if arg.startswith("with") or arg.startswith("select"):
297
+ if arg.startswith(("with", "select")):
298
298
  self.run_sql(argline)
299
299
  elif len(arg.split()) == 1 and arg in self.project.pipes + self.project.datasources:
300
300
  self.run_sql(f"select * from {argline}")
@@ -19,7 +19,7 @@ import humanfriendly
19
19
  from click import Context
20
20
  from packaging import version
21
21
 
22
- import tinybird.context as context
22
+ from tinybird import context
23
23
  from tinybird.client import (
24
24
  AuthException,
25
25
  AuthNoTokenException,
@@ -904,7 +904,7 @@ async def sql(
904
904
  verbose=False,
905
905
  )
906
906
  query = ""
907
- for _, elem in dependencies_graph.to_run.items():
907
+ for elem in dependencies_graph.to_run.values():
908
908
  for _node in elem["nodes"]:
909
909
  if _node["params"]["name"].lower() == node.lower():
910
910
  query = "".join(_node["sql"])
@@ -1042,7 +1042,7 @@ def get_format_from_filename_or_url(filename_or_url: str) -> str:
1042
1042
  'csv'
1043
1043
  """
1044
1044
  filename_or_url = filename_or_url.lower()
1045
- if filename_or_url.endswith("json") or filename_or_url.endswith("ndjson"):
1045
+ if filename_or_url.endswith(("json", "ndjson")):
1046
1046
  return "ndjson"
1047
1047
  if filename_or_url.endswith("parquet"):
1048
1048
  return "parquet"
@@ -1050,7 +1050,7 @@ def get_format_from_filename_or_url(filename_or_url: str) -> str:
1050
1050
  return "csv"
1051
1051
  try:
1052
1052
  parsed = urlparse(filename_or_url)
1053
- if parsed.path.endswith("json") or parsed.path.endswith("ndjson"):
1053
+ if parsed.path.endswith(("json", "ndjson")):
1054
1054
  return "ndjson"
1055
1055
  if parsed.path.endswith("parquet"):
1056
1056
  return "parquet"
@@ -13,7 +13,7 @@ import click
13
13
  import humanfriendly
14
14
  from click import Context
15
15
 
16
- import tinybird.context as context
16
+ from tinybird import context
17
17
  from tinybird.client import AuthNoTokenException, DoesNotExistException, TinyB
18
18
  from tinybird.config import DEFAULT_API_HOST, FeatureFlags
19
19
  from tinybird.datafile_common import PipeNodeTypes, PipeTypes, folder_push, get_name_version, process_file, wait_job
@@ -291,7 +291,7 @@ class Template:
291
291
  whitespace = loader.whitespace
292
292
  else:
293
293
  # Whitespace defaults by filename.
294
- if name.endswith(".html") or name.endswith(".js"):
294
+ if name.endswith((".html", ".js")):
295
295
  whitespace = "single"
296
296
  else:
297
297
  whitespace = "all"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev300
3
+ Version: 0.0.1.dev301
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird