letta-nightly 0.6.27.dev20250220104103__tar.gz → 0.6.28.dev20250220163833__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 letta-nightly might be problematic. Click here for more details.

Files changed (264) hide show
  1. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/PKG-INFO +9 -2
  2. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/__init__.py +1 -1
  3. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/agent.py +13 -1
  4. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/client.py +2 -0
  5. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/constants.py +2 -0
  6. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/schema_generator.py +6 -6
  7. letta_nightly-0.6.28.dev20250220163833/letta/helpers/converters.py +153 -0
  8. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/tool_rule_solver.py +11 -1
  9. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/anthropic.py +10 -5
  10. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/aws_bedrock.py +1 -1
  11. letta_nightly-0.6.28.dev20250220163833/letta/llm_api/deepseek.py +303 -0
  12. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/llm_api_tools.py +81 -1
  13. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/openai.py +13 -0
  14. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/chat_completion_proxy.py +15 -2
  15. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/lmstudio/api.py +75 -1
  16. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/__init__.py +1 -0
  17. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/agent.py +14 -5
  18. letta_nightly-0.6.28.dev20250220163833/letta/orm/custom_columns.py +80 -0
  19. letta_nightly-0.6.28.dev20250220163833/letta/orm/identity.py +39 -0
  20. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/organization.py +2 -0
  21. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/agent.py +13 -1
  22. letta_nightly-0.6.28.dev20250220163833/letta/schemas/identity.py +44 -0
  23. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/llm_config.py +2 -0
  24. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/message.py +1 -1
  25. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/chat_completion_response.py +2 -0
  26. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/providers.py +72 -1
  27. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/tool_rule.py +9 -1
  28. letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/__init__.py +1 -0
  29. letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/agent.py +36 -0
  30. letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/base.py +12 -0
  31. letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/custom_fields.py +69 -0
  32. letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/message.py +15 -0
  33. letta_nightly-0.6.28.dev20250220163833/letta/server/db.py +111 -0
  34. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/app.py +8 -0
  35. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/interface.py +114 -9
  36. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/__init__.py +2 -0
  37. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/agents.py +7 -1
  38. letta_nightly-0.6.28.dev20250220163833/letta/server/rest_api/routers/v1/identities.py +111 -0
  39. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/server.py +13 -116
  40. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/agent_manager.py +54 -6
  41. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/block_manager.py +1 -1
  42. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/helpers/agent_manager_helper.py +15 -0
  43. letta_nightly-0.6.28.dev20250220163833/letta/services/identity_manager.py +140 -0
  44. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/job_manager.py +1 -1
  45. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/message_manager.py +1 -1
  46. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/organization_manager.py +1 -1
  47. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/passage_manager.py +1 -1
  48. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/provider_manager.py +1 -1
  49. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/sandbox_config_manager.py +1 -1
  50. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/source_manager.py +1 -1
  51. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/step_manager.py +1 -1
  52. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/tool_manager.py +1 -1
  53. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/user_manager.py +1 -1
  54. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/settings.py +3 -0
  55. letta_nightly-0.6.28.dev20250220163833/letta/tracing.py +205 -0
  56. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/utils.py +4 -0
  57. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/pyproject.toml +9 -2
  58. letta_nightly-0.6.27.dev20250220104103/letta/orm/custom_columns.py +0 -159
  59. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/LICENSE +0 -0
  60. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/README.md +0 -0
  61. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/__main__.py +0 -0
  62. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/benchmark/benchmark.py +0 -0
  63. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/benchmark/constants.py +0 -0
  64. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/chat_only_agent.py +0 -0
  65. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/cli/cli.py +0 -0
  66. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/cli/cli_config.py +0 -0
  67. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/cli/cli_load.py +0 -0
  68. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/__init__.py +0 -0
  69. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/streaming.py +0 -0
  70. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/utils.py +0 -0
  71. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/config.py +0 -0
  72. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/data_sources/connectors.py +0 -0
  73. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/data_sources/connectors_helper.py +0 -0
  74. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/embeddings.py +0 -0
  75. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/errors.py +0 -0
  76. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/__init__.py +0 -0
  77. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/ast_parsers.py +0 -0
  78. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/function_sets/base.py +0 -0
  79. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/function_sets/extras.py +0 -0
  80. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/function_sets/multi_agent.py +0 -0
  81. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/functions.py +0 -0
  82. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/helpers.py +0 -0
  83. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/interface.py +0 -0
  84. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/__init__.py +0 -0
  85. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/composio_helpers.py +0 -0
  86. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/datetime_helpers.py +0 -0
  87. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/json_helpers.py +0 -0
  88. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/humans/__init__.py +0 -0
  89. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/humans/examples/basic.txt +0 -0
  90. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/humans/examples/cs_phd.txt +0 -0
  91. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/interface.py +0 -0
  92. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/__init__.py +0 -0
  93. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/azure_openai.py +0 -0
  94. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/azure_openai_constants.py +0 -0
  95. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/cohere.py +0 -0
  96. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/google_ai.py +0 -0
  97. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/google_constants.py +0 -0
  98. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/google_vertex.py +0 -0
  99. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/helpers.py +0 -0
  100. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/mistral.py +0 -0
  101. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/README.md +0 -0
  102. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/__init__.py +0 -0
  103. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/constants.py +0 -0
  104. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/function_parser.py +0 -0
  105. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/__init__.py +0 -0
  106. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  107. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/json.gbnf +0 -0
  108. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  109. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/json_parser.py +0 -0
  110. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/koboldcpp/api.py +0 -0
  111. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/koboldcpp/settings.py +0 -0
  112. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llamacpp/api.py +0 -0
  113. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llamacpp/settings.py +0 -0
  114. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  115. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  116. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  117. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  118. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  119. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  120. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  121. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  122. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  123. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/lmstudio/settings.py +0 -0
  124. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/ollama/api.py +0 -0
  125. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/ollama/settings.py +0 -0
  126. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/__init__.py +0 -0
  127. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  128. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/settings.py +0 -0
  129. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/simple.py +0 -0
  130. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/utils.py +0 -0
  131. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/vllm/api.py +0 -0
  132. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/api.py +0 -0
  133. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/legacy_api.py +0 -0
  134. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/legacy_settings.py +0 -0
  135. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/settings.py +0 -0
  136. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/log.py +0 -0
  137. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/main.py +0 -0
  138. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/memory.py +0 -0
  139. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/offline_memory_agent.py +0 -0
  140. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/openai_backcompat/__init__.py +0 -0
  141. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/openai_backcompat/openai_object.py +0 -0
  142. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/__all__.py +0 -0
  143. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/agents_tags.py +0 -0
  144. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/base.py +0 -0
  145. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/block.py +0 -0
  146. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/blocks_agents.py +0 -0
  147. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/enums.py +0 -0
  148. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/errors.py +0 -0
  149. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/file.py +0 -0
  150. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/job.py +0 -0
  151. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/job_messages.py +0 -0
  152. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/message.py +0 -0
  153. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/mixins.py +0 -0
  154. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/passage.py +0 -0
  155. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/provider.py +0 -0
  156. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sandbox_config.py +0 -0
  157. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/source.py +0 -0
  158. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sources_agents.py +0 -0
  159. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sqlalchemy_base.py +0 -0
  160. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sqlite_functions.py +0 -0
  161. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/step.py +0 -0
  162. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/tool.py +0 -0
  163. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/tools_agents.py +0 -0
  164. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/user.py +0 -0
  165. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/__init__.py +0 -0
  166. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/anna_pa.txt +0 -0
  167. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/google_search_persona.txt +0 -0
  168. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/memgpt_doc.txt +0 -0
  169. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/memgpt_starter.txt +0 -0
  170. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/o1_persona.txt +0 -0
  171. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/offline_memory_persona.txt +0 -0
  172. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sam.txt +0 -0
  173. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sam_pov.txt +0 -0
  174. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  175. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sqldb/test.db +0 -0
  176. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/__init__.py +0 -0
  177. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/gpt_summarize.py +0 -0
  178. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/gpt_system.py +0 -0
  179. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_base.txt +0 -0
  180. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_chat.txt +0 -0
  181. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  182. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  183. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  184. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_doc.txt +0 -0
  185. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  186. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  187. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  188. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  189. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  190. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  191. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/pytest.ini +0 -0
  192. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/block.py +0 -0
  193. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/embedding_config.py +0 -0
  194. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/embedding_config_overrides.py +0 -0
  195. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/enums.py +0 -0
  196. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/environment_variables.py +0 -0
  197. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/file.py +0 -0
  198. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/health.py +0 -0
  199. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/job.py +0 -0
  200. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_base.py +0 -0
  201. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_message.py +0 -0
  202. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_request.py +0 -0
  203. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_response.py +0 -0
  204. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/llm_config_overrides.py +0 -0
  205. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/memory.py +0 -0
  206. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/chat_completion_request.py +0 -0
  207. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/chat_completions.py +0 -0
  208. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/embedding_response.py +0 -0
  209. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/openai.py +0 -0
  210. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/organization.py +0 -0
  211. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/passage.py +0 -0
  212. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/run.py +0 -0
  213. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/sandbox_config.py +0 -0
  214. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/source.py +0 -0
  215. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/step.py +0 -0
  216. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/tool.py +0 -0
  217. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/usage.py +0 -0
  218. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/user.py +0 -0
  219. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/__init__.py +0 -0
  220. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/constants.py +0 -0
  221. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/generate_openapi_schema.sh +0 -0
  222. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/__init__.py +0 -0
  223. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/auth/__init__.py +0 -0
  224. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/auth/index.py +0 -0
  225. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/auth_token.py +0 -0
  226. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/chat_completions_interface.py +0 -0
  227. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/optimistic_json_parser.py +0 -0
  228. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/__init__.py +0 -0
  229. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  230. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  231. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  232. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/health.py +0 -0
  233. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  234. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/llms.py +0 -0
  235. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  236. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/providers.py +0 -0
  237. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/runs.py +0 -0
  238. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  239. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/sources.py +0 -0
  240. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/steps.py +0 -0
  241. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/tags.py +0 -0
  242. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/tools.py +0 -0
  243. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/users.py +0 -0
  244. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/static_files.py +0 -0
  245. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/utils.py +0 -0
  246. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/startup.sh +0 -0
  247. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/assets/index-048c9598.js +0 -0
  248. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  249. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/favicon.ico +0 -0
  250. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/index.html +0 -0
  251. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  252. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/utils.py +0 -0
  253. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/__init__.py +0 -0
  254. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/example_client.py +0 -0
  255. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/interface.py +0 -0
  256. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/protocol.py +0 -0
  257. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/server.py +0 -0
  258. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/__init__.py +0 -0
  259. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/helpers/tool_execution_helper.py +0 -0
  260. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/per_agent_lock_manager.py +0 -0
  261. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/tool_execution_sandbox.py +0 -0
  262. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/streaming_interface.py +0 -0
  263. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/streaming_utils.py +0 -0
  264. {letta_nightly-0.6.27.dev20250220104103 → letta_nightly-0.6.28.dev20250220163833}/letta/system.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.27.dev20250220104103
3
+ Version: 0.6.28.dev20250220163833
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -20,11 +20,13 @@ Provides-Extra: google
20
20
  Provides-Extra: postgres
21
21
  Provides-Extra: qdrant
22
22
  Provides-Extra: server
23
+ Provides-Extra: telemetry
23
24
  Provides-Extra: tests
24
25
  Requires-Dist: alembic (>=1.13.3,<2.0.0)
25
26
  Requires-Dist: anthropic (>=0.43.0,<0.44.0)
26
27
  Requires-Dist: autoflake (>=2.3.0,<3.0.0) ; extra == "dev" or extra == "all"
27
28
  Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev" or extra == "all"
29
+ Requires-Dist: boto3 (>=1.36.24,<2.0.0) ; extra == "bedrock" or extra == "all"
28
30
  Requires-Dist: brotli (>=1.1.0,<2.0.0)
29
31
  Requires-Dist: colorama (>=0.4.6,<0.5.0)
30
32
  Requires-Dist: composio-core (>=0.7.2,<0.8.0)
@@ -37,7 +39,7 @@ Requires-Dist: docx2txt (>=0.8,<0.9)
37
39
  Requires-Dist: e2b-code-interpreter (>=1.0.3,<2.0.0) ; extra == "cloud-tool-sandbox"
38
40
  Requires-Dist: faker (>=36.1.0,<37.0.0)
39
41
  Requires-Dist: fastapi (>=0.115.6,<0.116.0) ; extra == "server" or extra == "all"
40
- Requires-Dist: google-genai (>=1.1.0,<2.0.0) ; extra == "google"
42
+ Requires-Dist: google-genai (>=1.1.0,<2.0.0) ; extra == "google" or extra == "all"
41
43
  Requires-Dist: grpcio (>=1.68.1,<2.0.0)
42
44
  Requires-Dist: grpcio-tools (>=1.68.1,<2.0.0)
43
45
  Requires-Dist: html2text (>=2020.1.16,<2021.0.0)
@@ -51,9 +53,14 @@ Requires-Dist: letta_client (>=0.1.23,<0.2.0)
51
53
  Requires-Dist: llama-index (>=0.12.2,<0.13.0)
52
54
  Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
53
55
  Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "all"
56
+ Requires-Dist: marshmallow-sqlalchemy (>=1.4.1,<2.0.0)
54
57
  Requires-Dist: nltk (>=3.8.1,<4.0.0)
55
58
  Requires-Dist: numpy (>=1.26.2,<2.0.0)
56
59
  Requires-Dist: openai (>=1.60.0,<2.0.0)
60
+ Requires-Dist: opentelemetry-api (==1.30.0) ; extra == "telemetry" or extra == "all"
61
+ Requires-Dist: opentelemetry-exporter-otlp (==1.30.0) ; extra == "telemetry" or extra == "all"
62
+ Requires-Dist: opentelemetry-instrumentation-requests (==0.51b0) ; extra == "telemetry" or extra == "all"
63
+ Requires-Dist: opentelemetry-sdk (==1.30.0) ; extra == "telemetry" or extra == "all"
57
64
  Requires-Dist: pathvalidate (>=3.2.1,<4.0.0)
58
65
  Requires-Dist: pexpect (>=4.9.0,<5.0.0) ; extra == "dev" or extra == "all"
59
66
  Requires-Dist: pg8000 (>=1.30.3,<2.0.0) ; extra == "postgres" or extra == "all"
@@ -1,4 +1,4 @@
1
- __version__ = "0.6.27"
1
+ __version__ = "0.6.28"
2
2
 
3
3
  # import clients
4
4
  from letta.client.client import LocalClient, RESTClient, create_client
@@ -60,6 +60,7 @@ from letta.services.tool_manager import ToolManager
60
60
  from letta.settings import summarizer_settings
61
61
  from letta.streaming_interface import StreamingRefreshCLIInterface
62
62
  from letta.system import get_heartbeat, get_token_limit_warning, package_function_response, package_summarize_message, package_user_message
63
+ from letta.tracing import trace_method
63
64
  from letta.utils import (
64
65
  count_tokens,
65
66
  get_friendly_error_msg,
@@ -309,6 +310,7 @@ class Agent(BaseAgent):
309
310
  # Return updated messages
310
311
  return messages
311
312
 
313
+ @trace_method("Get AI Reply")
312
314
  def _get_ai_reply(
313
315
  self,
314
316
  message_sequence: List[Message],
@@ -399,6 +401,7 @@ class Agent(BaseAgent):
399
401
  log_telemetry(self.logger, "_handle_ai_response finish catch-all exception")
400
402
  raise Exception("Retries exhausted and no valid response received.")
401
403
 
404
+ @trace_method("Handle AI Response")
402
405
  def _handle_ai_response(
403
406
  self,
404
407
  response_message: ChatCompletionMessage, # TODO should we eventually move the Message creation outside of this function?
@@ -492,7 +495,10 @@ class Agent(BaseAgent):
492
495
  try:
493
496
  raw_function_args = function_call.arguments
494
497
  function_args = parse_json(raw_function_args)
495
- except Exception:
498
+ if not isinstance(function_args, dict):
499
+ raise ValueError(f"Function arguments are not a dictionary: {function_args} (raw={raw_function_args})")
500
+ except Exception as e:
501
+ print(e)
496
502
  error_msg = f"Error parsing JSON for function '{function_name}' arguments: {function_call.arguments}"
497
503
  function_response = "None" # more like "never ran?"
498
504
  messages = self._handle_function_error_response(
@@ -627,9 +633,15 @@ class Agent(BaseAgent):
627
633
  elif self.tool_rules_solver.is_terminal_tool(function_name):
628
634
  heartbeat_request = False
629
635
 
636
+ # if continue tool rule, then must request a heartbeat
637
+ # TODO: dont even include heartbeats in the args
638
+ if self.tool_rules_solver.is_continue_tool(function_name):
639
+ heartbeat_request = True
640
+
630
641
  log_telemetry(self.logger, "_handle_ai_response finish")
631
642
  return messages, heartbeat_request, function_failed
632
643
 
644
+ @trace_method("Agent Step")
633
645
  def step(
634
646
  self,
635
647
  messages: Union[Message, List[Message]],
@@ -2351,6 +2351,7 @@ class LocalClient(AbstractClient):
2351
2351
  tool_rules: Optional[List[BaseToolRule]] = None,
2352
2352
  include_base_tools: Optional[bool] = True,
2353
2353
  include_multi_agent_tools: bool = False,
2354
+ include_base_tool_rules: bool = True,
2354
2355
  # metadata
2355
2356
  metadata: Optional[Dict] = {"human:": DEFAULT_HUMAN, "persona": DEFAULT_PERSONA},
2356
2357
  description: Optional[str] = None,
@@ -2402,6 +2403,7 @@ class LocalClient(AbstractClient):
2402
2403
  "tool_rules": tool_rules,
2403
2404
  "include_base_tools": include_base_tools,
2404
2405
  "include_multi_agent_tools": include_multi_agent_tools,
2406
+ "include_base_tool_rules": include_base_tool_rules,
2405
2407
  "system": system,
2406
2408
  "agent_type": agent_type,
2407
2409
  "llm_config": llm_config if llm_config else self._default_llm_config,
@@ -86,6 +86,8 @@ NON_USER_MSG_PREFIX = "[This is an automated system message hidden from the user
86
86
  # The max amount of tokens supported by the underlying model (eg 8k for gpt-4 and Mistral 7B)
87
87
  LLM_MAX_TOKENS = {
88
88
  "DEFAULT": 8192,
89
+ "deepseek-chat": 64000,
90
+ "deepseek-reasoner": 64000,
89
91
  ## OpenAI models: https://platform.openai.com/docs/models/overview
90
92
  # "o1-preview
91
93
  "chatgpt-4o-latest": 128000,
@@ -394,12 +394,12 @@ def generate_schema(function, name: Optional[str] = None, description: Optional[
394
394
  # append the heartbeat
395
395
  # TODO: don't hard-code
396
396
  # TODO: if terminal, don't include this
397
- if function.__name__ not in ["send_message"]:
398
- schema["parameters"]["properties"]["request_heartbeat"] = {
399
- "type": "boolean",
400
- "description": "Request an immediate heartbeat after function execution. Set to `True` if you want to send a follow-up message or run a follow-up function.",
401
- }
402
- schema["parameters"]["required"].append("request_heartbeat")
397
+ # if function.__name__ not in ["send_message"]:
398
+ schema["parameters"]["properties"]["request_heartbeat"] = {
399
+ "type": "boolean",
400
+ "description": "Request an immediate heartbeat after function execution. Set to `True` if you want to send a follow-up message or run a follow-up function.",
401
+ }
402
+ schema["parameters"]["required"].append("request_heartbeat")
403
403
 
404
404
  return schema
405
405
 
@@ -0,0 +1,153 @@
1
+ import base64
2
+ from typing import Any, Dict, List, Optional, Union
3
+
4
+ import numpy as np
5
+ from openai.types.chat.chat_completion_message_tool_call import ChatCompletionMessageToolCall as OpenAIToolCall
6
+ from openai.types.chat.chat_completion_message_tool_call import Function as OpenAIFunction
7
+ from sqlalchemy import Dialect
8
+
9
+ from letta.schemas.embedding_config import EmbeddingConfig
10
+ from letta.schemas.enums import ToolRuleType
11
+ from letta.schemas.llm_config import LLMConfig
12
+ from letta.schemas.tool_rule import ChildToolRule, ConditionalToolRule, ContinueToolRule, InitToolRule, TerminalToolRule, ToolRule
13
+
14
+ # --------------------------
15
+ # LLMConfig Serialization
16
+ # --------------------------
17
+
18
+
19
+ def serialize_llm_config(config: Union[Optional[LLMConfig], Dict]) -> Optional[Dict]:
20
+ """Convert an LLMConfig object into a JSON-serializable dictionary."""
21
+ if config and isinstance(config, LLMConfig):
22
+ return config.model_dump()
23
+ return config
24
+
25
+
26
+ def deserialize_llm_config(data: Optional[Dict]) -> Optional[LLMConfig]:
27
+ """Convert a dictionary back into an LLMConfig object."""
28
+ return LLMConfig(**data) if data else None
29
+
30
+
31
+ # --------------------------
32
+ # EmbeddingConfig Serialization
33
+ # --------------------------
34
+
35
+
36
+ def serialize_embedding_config(config: Union[Optional[EmbeddingConfig], Dict]) -> Optional[Dict]:
37
+ """Convert an EmbeddingConfig object into a JSON-serializable dictionary."""
38
+ if config and isinstance(config, EmbeddingConfig):
39
+ return config.model_dump()
40
+ return config
41
+
42
+
43
+ def deserialize_embedding_config(data: Optional[Dict]) -> Optional[EmbeddingConfig]:
44
+ """Convert a dictionary back into an EmbeddingConfig object."""
45
+ return EmbeddingConfig(**data) if data else None
46
+
47
+
48
+ # --------------------------
49
+ # ToolRule Serialization
50
+ # --------------------------
51
+
52
+
53
+ def serialize_tool_rules(tool_rules: Optional[List[ToolRule]]) -> List[Dict[str, Any]]:
54
+ """Convert a list of ToolRules into a JSON-serializable format."""
55
+
56
+ if not tool_rules:
57
+ return []
58
+
59
+ data = [{**rule.model_dump(), "type": rule.type.value} for rule in tool_rules] # Convert Enum to string for JSON compatibility
60
+
61
+ # Validate ToolRule structure
62
+ for rule_data in data:
63
+ if rule_data["type"] == ToolRuleType.constrain_child_tools.value and "children" not in rule_data:
64
+ raise ValueError(f"Invalid ToolRule serialization: 'children' field missing for rule {rule_data}")
65
+
66
+ return data
67
+
68
+
69
+ def deserialize_tool_rules(data: Optional[List[Dict]]) -> List[Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule]]:
70
+ """Convert a list of dictionaries back into ToolRule objects."""
71
+ if not data:
72
+ return []
73
+
74
+ return [deserialize_tool_rule(rule_data) for rule_data in data]
75
+
76
+
77
+ def deserialize_tool_rule(data: Dict) -> Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule, ContinueToolRule]:
78
+ """Deserialize a dictionary to the appropriate ToolRule subclass based on 'type'."""
79
+ rule_type = ToolRuleType(data.get("type"))
80
+
81
+ if rule_type == ToolRuleType.run_first:
82
+ return InitToolRule(**data)
83
+ elif rule_type == ToolRuleType.exit_loop:
84
+ return TerminalToolRule(**data)
85
+ elif rule_type == ToolRuleType.constrain_child_tools:
86
+ return ChildToolRule(**data)
87
+ elif rule_type == ToolRuleType.conditional:
88
+ return ConditionalToolRule(**data)
89
+ elif rule_type == ToolRuleType.continue_loop:
90
+ return ContinueToolRule(**data)
91
+ raise ValueError(f"Unknown ToolRule type: {rule_type}")
92
+
93
+
94
+ # --------------------------
95
+ # ToolCall Serialization
96
+ # --------------------------
97
+
98
+
99
+ def serialize_tool_calls(tool_calls: Optional[List[Union[OpenAIToolCall, dict]]]) -> List[Dict]:
100
+ """Convert a list of OpenAI ToolCall objects into JSON-serializable format."""
101
+ if not tool_calls:
102
+ return []
103
+
104
+ serialized_calls = []
105
+ for call in tool_calls:
106
+ if isinstance(call, OpenAIToolCall):
107
+ serialized_calls.append(call.model_dump())
108
+ elif isinstance(call, dict):
109
+ serialized_calls.append(call) # Already a dictionary, leave it as-is
110
+ else:
111
+ raise TypeError(f"Unexpected tool call type: {type(call)}")
112
+
113
+ return serialized_calls
114
+
115
+
116
+ def deserialize_tool_calls(data: Optional[List[Dict]]) -> List[OpenAIToolCall]:
117
+ """Convert a JSON list back into OpenAIToolCall objects."""
118
+ if not data:
119
+ return []
120
+
121
+ calls = []
122
+ for item in data:
123
+ func_data = item.pop("function", None)
124
+ tool_call_function = OpenAIFunction(**func_data) if func_data else None
125
+ calls.append(OpenAIToolCall(function=tool_call_function, **item))
126
+
127
+ return calls
128
+
129
+
130
+ # --------------------------
131
+ # Vector Serialization
132
+ # --------------------------
133
+
134
+
135
+ def serialize_vector(vector: Optional[Union[List[float], np.ndarray]]) -> Optional[bytes]:
136
+ """Convert a NumPy array or list into a base64-encoded byte string."""
137
+ if vector is None:
138
+ return None
139
+ if isinstance(vector, list):
140
+ vector = np.array(vector, dtype=np.float32)
141
+
142
+ return base64.b64encode(vector.tobytes())
143
+
144
+
145
+ def deserialize_vector(data: Optional[bytes], dialect: Dialect) -> Optional[np.ndarray]:
146
+ """Convert a base64-encoded byte string back into a NumPy array."""
147
+ if not data:
148
+ return None
149
+
150
+ if dialect.name == "sqlite":
151
+ data = base64.b64decode(data)
152
+
153
+ return np.frombuffer(data, dtype=np.float32)
@@ -4,7 +4,7 @@ from typing import List, Optional, Union
4
4
  from pydantic import BaseModel, Field
5
5
 
6
6
  from letta.schemas.enums import ToolRuleType
7
- from letta.schemas.tool_rule import BaseToolRule, ChildToolRule, ConditionalToolRule, InitToolRule, TerminalToolRule
7
+ from letta.schemas.tool_rule import BaseToolRule, ChildToolRule, ConditionalToolRule, ContinueToolRule, InitToolRule, TerminalToolRule
8
8
 
9
9
 
10
10
  class ToolRuleValidationError(Exception):
@@ -18,6 +18,9 @@ class ToolRulesSolver(BaseModel):
18
18
  init_tool_rules: List[InitToolRule] = Field(
19
19
  default_factory=list, description="Initial tool rules to be used at the start of tool execution."
20
20
  )
21
+ continue_tool_rules: List[ContinueToolRule] = Field(
22
+ default_factory=list, description="Continue tool rules to be used to continue tool execution."
23
+ )
21
24
  tool_rules: List[Union[ChildToolRule, ConditionalToolRule]] = Field(
22
25
  default_factory=list, description="Standard tool rules for controlling execution sequence and allowed transitions."
23
26
  )
@@ -43,6 +46,9 @@ class ToolRulesSolver(BaseModel):
43
46
  elif rule.type == ToolRuleType.exit_loop:
44
47
  assert isinstance(rule, TerminalToolRule)
45
48
  self.terminal_tool_rules.append(rule)
49
+ elif rule.type == ToolRuleType.continue_loop:
50
+ assert isinstance(rule, ContinueToolRule)
51
+ self.continue_tool_rules.append(rule)
46
52
 
47
53
  def update_tool_usage(self, tool_name: str):
48
54
  """Update the internal state to track the last tool called."""
@@ -80,6 +86,10 @@ class ToolRulesSolver(BaseModel):
80
86
  """Check if the tool has children tools"""
81
87
  return any(rule.tool_name == tool_name for rule in self.tool_rules)
82
88
 
89
+ def is_continue_tool(self, tool_name):
90
+ """Check if the tool is defined as a continue tool in the tool rules."""
91
+ return any(rule.tool_name == tool_name for rule in self.continue_tool_rules)
92
+
83
93
  def validate_conditional_tool(self, rule: ConditionalToolRule):
84
94
  """
85
95
  Validate a conditional tool rule
@@ -519,6 +519,7 @@ def _prepare_anthropic_request(
519
519
  prefix_fill: bool = True,
520
520
  # if true, put COT inside the tool calls instead of inside the content
521
521
  put_inner_thoughts_in_kwargs: bool = False,
522
+ bedrock: bool = False,
522
523
  ) -> dict:
523
524
  """Prepare the request data for Anthropic API format."""
524
525
 
@@ -606,10 +607,11 @@ def _prepare_anthropic_request(
606
607
  # NOTE: cannot prefill with tools for opus:
607
608
  # Your API request included an `assistant` message in the final position, which would pre-fill the `assistant` response. When using tools with "claude-3-opus-20240229"
608
609
  if prefix_fill and not put_inner_thoughts_in_kwargs and "opus" not in data["model"]:
609
- data["messages"].append(
610
- # Start the thinking process for the assistant
611
- {"role": "assistant", "content": f"<{inner_thoughts_xml_tag}>"},
612
- )
610
+ if not bedrock: # not support for bedrock
611
+ data["messages"].append(
612
+ # Start the thinking process for the assistant
613
+ {"role": "assistant", "content": f"<{inner_thoughts_xml_tag}>"},
614
+ )
613
615
 
614
616
  # Validate max_tokens
615
617
  assert "max_tokens" in data, data
@@ -651,13 +653,16 @@ def anthropic_bedrock_chat_completions_request(
651
653
  inner_thoughts_xml_tag: Optional[str] = "thinking",
652
654
  ) -> ChatCompletionResponse:
653
655
  """Make a chat completion request to Anthropic via AWS Bedrock."""
654
- data = _prepare_anthropic_request(data, inner_thoughts_xml_tag)
656
+ data = _prepare_anthropic_request(data, inner_thoughts_xml_tag, bedrock=True)
655
657
 
656
658
  # Get the client
657
659
  client = get_bedrock_client()
658
660
 
659
661
  # Make the request
660
662
  try:
663
+ # bedrock does not support certain args
664
+ data["tool_choice"] = {"type": "any"}
665
+
661
666
  response = client.messages.create(**data)
662
667
  return convert_anthropic_response_to_chatcompletion(response=response, inner_thoughts_xml_tag=inner_thoughts_xml_tag)
663
668
  except PermissionDeniedError:
@@ -10,7 +10,7 @@ def has_valid_aws_credentials() -> bool:
10
10
  """
11
11
  Check if AWS credentials are properly configured.
12
12
  """
13
- valid_aws_credentials = os.getenv("AWS_ACCESS_KEY_ID") and os.getenv("AWS_SECRET_ACCESS_KEY") and os.getenv("AWS_REGION")
13
+ valid_aws_credentials = os.getenv("AWS_ACCESS_KEY") and os.getenv("AWS_SECRET_ACCESS_KEY") and os.getenv("AWS_REGION")
14
14
  return valid_aws_credentials
15
15
 
16
16