letta-nightly 0.7.1.dev20250423104245__tar.gz → 0.7.2.dev20250423222439__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.
Files changed (333) hide show
  1. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/PKG-INFO +1 -1
  2. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/__init__.py +1 -1
  3. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/composio_helpers.py +1 -1
  4. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/datetime_helpers.py +9 -0
  5. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/jobs/llm_batch_job_polling.py +2 -1
  6. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/anthropic.py +10 -6
  7. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/anthropic_client.py +2 -2
  8. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/cohere.py +2 -2
  9. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/google_ai_client.py +2 -2
  10. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/google_vertex_client.py +2 -2
  11. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/openai.py +11 -4
  12. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/openai_client.py +34 -2
  13. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/chat_completion_proxy.py +2 -2
  14. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/letta_message_content.py +2 -1
  15. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/llm_config.py +12 -2
  16. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/message.py +17 -0
  17. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/openai/chat_completion_response.py +52 -3
  18. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/chat_completions_interface.py +2 -2
  19. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/interface.py +1 -1
  20. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/messages.py +9 -1
  21. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/agent_manager.py +5 -1
  22. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/pyproject.toml +1 -1
  23. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/LICENSE +0 -0
  24. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/README.md +0 -0
  25. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/__main__.py +0 -0
  26. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agent.py +0 -0
  27. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/__init__.py +0 -0
  28. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/base_agent.py +0 -0
  29. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/ephemeral_agent.py +0 -0
  30. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/ephemeral_memory_agent.py +0 -0
  31. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/helpers.py +0 -0
  32. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/letta_agent.py +0 -0
  33. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/letta_agent_batch.py +0 -0
  34. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/agents/voice_agent.py +0 -0
  35. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/benchmark/benchmark.py +0 -0
  36. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/benchmark/constants.py +0 -0
  37. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/cli/cli.py +0 -0
  38. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/cli/cli_config.py +0 -0
  39. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/cli/cli_load.py +0 -0
  40. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/client/__init__.py +0 -0
  41. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/client/client.py +0 -0
  42. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/client/streaming.py +0 -0
  43. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/client/utils.py +0 -0
  44. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/config.py +0 -0
  45. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/constants.py +0 -0
  46. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/data_sources/connectors.py +0 -0
  47. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/data_sources/connectors_helper.py +0 -0
  48. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/embeddings.py +0 -0
  49. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/errors.py +0 -0
  50. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/__init__.py +0 -0
  51. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/ast_parsers.py +0 -0
  52. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/function_sets/base.py +0 -0
  53. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/function_sets/extras.py +0 -0
  54. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/function_sets/multi_agent.py +0 -0
  55. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/functions.py +0 -0
  56. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/helpers.py +0 -0
  57. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/interface.py +0 -0
  58. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/mcp_client/__init__.py +0 -0
  59. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/mcp_client/base_client.py +0 -0
  60. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/mcp_client/exceptions.py +0 -0
  61. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/mcp_client/sse_client.py +0 -0
  62. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/mcp_client/stdio_client.py +0 -0
  63. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/mcp_client/types.py +0 -0
  64. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/functions/schema_generator.py +0 -0
  65. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/groups/dynamic_multi_agent.py +0 -0
  66. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/groups/helpers.py +0 -0
  67. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/groups/round_robin_multi_agent.py +0 -0
  68. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/groups/sleeptime_multi_agent.py +0 -0
  69. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/groups/supervisor_multi_agent.py +0 -0
  70. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/__init__.py +0 -0
  71. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/converters.py +0 -0
  72. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/json_helpers.py +0 -0
  73. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/message_helper.py +0 -0
  74. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/tool_execution_helper.py +0 -0
  75. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/helpers/tool_rule_solver.py +0 -0
  76. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/humans/__init__.py +0 -0
  77. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/humans/examples/basic.txt +0 -0
  78. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/humans/examples/cs_phd.txt +0 -0
  79. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/interface.py +0 -0
  80. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/interfaces/__init__.py +0 -0
  81. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/interfaces/anthropic_streaming_interface.py +0 -0
  82. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  83. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/interfaces/utils.py +0 -0
  84. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/jobs/__init__.py +0 -0
  85. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/jobs/helpers.py +0 -0
  86. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/jobs/scheduler.py +0 -0
  87. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/jobs/types.py +0 -0
  88. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/__init__.py +0 -0
  89. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/aws_bedrock.py +0 -0
  90. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/azure_openai.py +0 -0
  91. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/azure_openai_constants.py +0 -0
  92. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/deepseek.py +0 -0
  93. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/google_constants.py +0 -0
  94. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/helpers.py +0 -0
  95. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/llm_api_tools.py +0 -0
  96. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/llm_client.py +0 -0
  97. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/llm_client_base.py +0 -0
  98. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/llm_api/mistral.py +0 -0
  99. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/README.md +0 -0
  100. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/__init__.py +0 -0
  101. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/constants.py +0 -0
  102. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/function_parser.py +0 -0
  103. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/grammars/__init__.py +0 -0
  104. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  105. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/grammars/json.gbnf +0 -0
  106. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  107. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/json_parser.py +0 -0
  108. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/koboldcpp/api.py +0 -0
  109. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/koboldcpp/settings.py +0 -0
  110. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llamacpp/api.py +0 -0
  111. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llamacpp/settings.py +0 -0
  112. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  113. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  114. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  115. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  116. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  117. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  118. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  119. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  120. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  121. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/lmstudio/api.py +0 -0
  122. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/lmstudio/settings.py +0 -0
  123. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/ollama/api.py +0 -0
  124. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/ollama/settings.py +0 -0
  125. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/settings/__init__.py +0 -0
  126. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  127. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/settings/settings.py +0 -0
  128. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/settings/simple.py +0 -0
  129. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/utils.py +0 -0
  130. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/vllm/api.py +0 -0
  131. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/webui/api.py +0 -0
  132. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/webui/legacy_api.py +0 -0
  133. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/webui/legacy_settings.py +0 -0
  134. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/local_llm/webui/settings.py +0 -0
  135. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/log.py +0 -0
  136. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/main.py +0 -0
  137. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/memory.py +0 -0
  138. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/openai_backcompat/__init__.py +0 -0
  139. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/openai_backcompat/openai_object.py +0 -0
  140. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/__all__.py +0 -0
  141. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/__init__.py +0 -0
  142. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/agent.py +0 -0
  143. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/agents_tags.py +0 -0
  144. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/base.py +0 -0
  145. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/block.py +0 -0
  146. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/block_history.py +0 -0
  147. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/blocks_agents.py +0 -0
  148. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/custom_columns.py +0 -0
  149. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/enums.py +0 -0
  150. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/errors.py +0 -0
  151. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/file.py +0 -0
  152. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/group.py +0 -0
  153. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/groups_agents.py +0 -0
  154. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/groups_blocks.py +0 -0
  155. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/identities_agents.py +0 -0
  156. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/identities_blocks.py +0 -0
  157. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/identity.py +0 -0
  158. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/job.py +0 -0
  159. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/job_messages.py +0 -0
  160. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/llm_batch_items.py +0 -0
  161. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/llm_batch_job.py +0 -0
  162. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/message.py +0 -0
  163. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/mixins.py +0 -0
  164. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/organization.py +0 -0
  165. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/passage.py +0 -0
  166. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/provider.py +0 -0
  167. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/sandbox_config.py +0 -0
  168. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/source.py +0 -0
  169. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/sources_agents.py +0 -0
  170. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/sqlalchemy_base.py +0 -0
  171. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/sqlite_functions.py +0 -0
  172. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/step.py +0 -0
  173. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/tool.py +0 -0
  174. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/tools_agents.py +0 -0
  175. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/orm/user.py +0 -0
  176. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/__init__.py +0 -0
  177. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/anna_pa.txt +0 -0
  178. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/google_search_persona.txt +0 -0
  179. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/memgpt_doc.txt +0 -0
  180. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/memgpt_starter.txt +0 -0
  181. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/o1_persona.txt +0 -0
  182. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/offline_memory_persona.txt +0 -0
  183. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/sam.txt +0 -0
  184. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/sam_pov.txt +0 -0
  185. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  186. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
  187. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/personas/examples/sqldb/test.db +0 -0
  188. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/__init__.py +0 -0
  189. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/gpt_summarize.py +0 -0
  190. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/gpt_system.py +0 -0
  191. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_base.txt +0 -0
  192. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_chat.txt +0 -0
  193. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  194. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  195. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  196. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_doc.txt +0 -0
  197. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  198. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  199. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  200. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  201. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  202. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  203. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  204. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
  205. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/sleeptime.txt +0 -0
  206. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
  207. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/pytest.ini +0 -0
  208. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/agent.py +0 -0
  209. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/block.py +0 -0
  210. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/embedding_config.py +0 -0
  211. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/embedding_config_overrides.py +0 -0
  212. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/enums.py +0 -0
  213. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/environment_variables.py +0 -0
  214. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/file.py +0 -0
  215. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/group.py +0 -0
  216. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/health.py +0 -0
  217. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/identity.py +0 -0
  218. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/job.py +0 -0
  219. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/letta_base.py +0 -0
  220. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/letta_message.py +0 -0
  221. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/letta_request.py +0 -0
  222. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/letta_response.py +0 -0
  223. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/llm_batch_job.py +0 -0
  224. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/llm_config_overrides.py +0 -0
  225. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/memory.py +0 -0
  226. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/openai/chat_completion_request.py +0 -0
  227. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/openai/chat_completions.py +0 -0
  228. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/openai/embedding_response.py +0 -0
  229. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/openai/openai.py +0 -0
  230. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/organization.py +0 -0
  231. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/passage.py +0 -0
  232. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/providers.py +0 -0
  233. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/response_format.py +0 -0
  234. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/run.py +0 -0
  235. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/sandbox_config.py +0 -0
  236. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/source.py +0 -0
  237. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/step.py +0 -0
  238. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/tool.py +0 -0
  239. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/tool_execution_result.py +0 -0
  240. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/tool_rule.py +0 -0
  241. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/usage.py +0 -0
  242. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/schemas/user.py +0 -0
  243. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/__init__.py +0 -0
  244. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_agent.py +0 -0
  245. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  246. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_base.py +0 -0
  247. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_block.py +0 -0
  248. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  249. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_message.py +0 -0
  250. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  251. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  252. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
  253. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/__init__.py +0 -0
  254. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/constants.py +0 -0
  255. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/db.py +0 -0
  256. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/generate_openapi_schema.sh +0 -0
  257. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/__init__.py +0 -0
  258. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/app.py +0 -0
  259. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/auth/__init__.py +0 -0
  260. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/auth/index.py +0 -0
  261. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/auth_token.py +0 -0
  262. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/optimistic_json_parser.py +0 -0
  263. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/__init__.py +0 -0
  264. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  265. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  266. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  267. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/agents.py +0 -0
  268. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  269. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/groups.py +0 -0
  270. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/health.py +0 -0
  271. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/identities.py +0 -0
  272. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  273. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/llms.py +0 -0
  274. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  275. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/providers.py +0 -0
  276. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/runs.py +0 -0
  277. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  278. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/sources.py +0 -0
  279. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/steps.py +0 -0
  280. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/tags.py +0 -0
  281. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/tools.py +0 -0
  282. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/users.py +0 -0
  283. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/routers/v1/voice.py +0 -0
  284. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/static_files.py +0 -0
  285. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/rest_api/utils.py +0 -0
  286. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/server.py +0 -0
  287. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/startup.sh +0 -0
  288. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/static_files/assets/index-048c9598.js +0 -0
  289. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  290. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/static_files/favicon.ico +0 -0
  291. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/static_files/index.html +0 -0
  292. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  293. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/utils.py +0 -0
  294. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/ws_api/__init__.py +0 -0
  295. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/ws_api/example_client.py +0 -0
  296. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/ws_api/interface.py +0 -0
  297. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/ws_api/protocol.py +0 -0
  298. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/server/ws_api/server.py +0 -0
  299. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/__init__.py +0 -0
  300. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/block_manager.py +0 -0
  301. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/group_manager.py +0 -0
  302. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/helpers/agent_manager_helper.py +0 -0
  303. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/helpers/tool_execution_helper.py +0 -0
  304. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/identity_manager.py +0 -0
  305. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/job_manager.py +0 -0
  306. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/llm_batch_manager.py +0 -0
  307. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/message_manager.py +0 -0
  308. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/organization_manager.py +0 -0
  309. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/passage_manager.py +0 -0
  310. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/per_agent_lock_manager.py +0 -0
  311. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/provider_manager.py +0 -0
  312. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/sandbox_config_manager.py +0 -0
  313. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/source_manager.py +0 -0
  314. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/step_manager.py +0 -0
  315. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/summarizer/__init__.py +0 -0
  316. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/summarizer/enums.py +0 -0
  317. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/summarizer/summarizer.py +0 -0
  318. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_executor/__init__.py +0 -0
  319. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_executor/tool_execution_manager.py +0 -0
  320. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
  321. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_executor/tool_executor.py +0 -0
  322. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_manager.py +0 -0
  323. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_sandbox/__init__.py +0 -0
  324. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_sandbox/base.py +0 -0
  325. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
  326. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/tool_sandbox/local_sandbox.py +0 -0
  327. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/services/user_manager.py +0 -0
  328. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/settings.py +0 -0
  329. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/streaming_interface.py +0 -0
  330. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/streaming_utils.py +0 -0
  331. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/system.py +0 -0
  332. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/tracing.py +0 -0
  333. {letta_nightly-0.7.1.dev20250423104245 → letta_nightly-0.7.2.dev20250423222439}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.7.1.dev20250423104245
3
+ Version: 0.7.2.dev20250423222439
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -1,4 +1,4 @@
1
- __version__ = "0.7.1"
1
+ __version__ = "0.7.2"
2
2
 
3
3
  # import clients
4
4
  from letta.client.client import LocalClient, RESTClient, create_client
@@ -10,7 +10,7 @@ def get_composio_api_key(actor: User, logger: Optional[Logger] = None) -> Option
10
10
  api_keys = SandboxConfigManager().list_sandbox_env_vars_by_key(key="COMPOSIO_API_KEY", actor=actor)
11
11
  if not api_keys:
12
12
  if logger:
13
- logger.warning(f"No API keys found for Composio. Defaulting to the environment variable...")
13
+ logger.debug(f"No API keys found for Composio. Defaulting to the environment variable...")
14
14
  if tool_settings.composio_api_key:
15
15
  return tool_settings.composio_api_key
16
16
  else:
@@ -66,6 +66,15 @@ def get_utc_time() -> datetime:
66
66
  return datetime.now(timezone.utc)
67
67
 
68
68
 
69
+ def get_utc_time_int() -> int:
70
+ return int(get_utc_time().timestamp())
71
+
72
+
73
+ def timestamp_to_datetime(timestamp_seconds: int) -> datetime:
74
+ """Convert Unix timestamp in seconds to UTC datetime object"""
75
+ return datetime.fromtimestamp(timestamp_seconds, tz=timezone.utc)
76
+
77
+
69
78
  def format_datetime(dt):
70
79
  return dt.strftime("%Y-%m-%d %I:%M:%S %p %Z%z")
71
80
 
@@ -73,7 +73,8 @@ async def fetch_batch_items(server: SyncServer, batch_id: str, batch_resp_id: st
73
73
  """
74
74
  updates = []
75
75
  try:
76
- async for item_result in server.anthropic_async_client.beta.messages.batches.results(batch_resp_id):
76
+ results = await server.anthropic_async_client.beta.messages.batches.results(batch_resp_id)
77
+ async for item_result in results:
77
78
  # Here, custom_id should be the agent_id
78
79
  item_status = map_anthropic_individual_batch_item_status_to_job_status(item_result)
79
80
  updates.append(ItemUpdateInfo(batch_id, item_result.custom_id, item_status, item_result))
@@ -20,7 +20,7 @@ from anthropic.types.beta import (
20
20
  )
21
21
 
22
22
  from letta.errors import BedrockError, BedrockPermissionError
23
- from letta.helpers.datetime_helpers import get_utc_time
23
+ from letta.helpers.datetime_helpers import get_utc_time_int, timestamp_to_datetime
24
24
  from letta.llm_api.aws_bedrock import get_bedrock_client
25
25
  from letta.llm_api.helpers import add_inner_thoughts_to_functions
26
26
  from letta.local_llm.constants import INNER_THOUGHTS_KWARG, INNER_THOUGHTS_KWARG_DESCRIPTION
@@ -396,7 +396,7 @@ def convert_anthropic_response_to_chatcompletion(
396
396
  return ChatCompletionResponse(
397
397
  id=response.id,
398
398
  choices=[choice],
399
- created=get_utc_time(),
399
+ created=get_utc_time_int(),
400
400
  model=response.model,
401
401
  usage=UsageStatistics(
402
402
  prompt_tokens=prompt_tokens,
@@ -451,7 +451,7 @@ def convert_anthropic_stream_event_to_chatcompletion(
451
451
  'logprobs': None
452
452
  }
453
453
  ],
454
- 'created': datetime.datetime(2025, 1, 24, 0, 18, 55, tzinfo=TzInfo(UTC)),
454
+ 'created': 1713216662,
455
455
  'model': 'gpt-4o-mini-2024-07-18',
456
456
  'system_fingerprint': 'fp_bd83329f63',
457
457
  'object': 'chat.completion.chunk'
@@ -613,7 +613,7 @@ def convert_anthropic_stream_event_to_chatcompletion(
613
613
  return ChatCompletionChunkResponse(
614
614
  id=message_id,
615
615
  choices=[choice],
616
- created=get_utc_time(),
616
+ created=get_utc_time_int(),
617
617
  model=model,
618
618
  output_tokens=completion_chunk_tokens,
619
619
  )
@@ -920,7 +920,7 @@ def anthropic_chat_completions_process_stream(
920
920
  chat_completion_response = ChatCompletionResponse(
921
921
  id=dummy_message.id if create_message_id else TEMP_STREAM_RESPONSE_ID,
922
922
  choices=[],
923
- created=dummy_message.created_at,
923
+ created=int(dummy_message.created_at.timestamp()),
924
924
  model=chat_completion_request.model,
925
925
  usage=UsageStatistics(
926
926
  prompt_tokens=prompt_tokens,
@@ -954,7 +954,11 @@ def anthropic_chat_completions_process_stream(
954
954
  message_type = stream_interface.process_chunk(
955
955
  chat_completion_chunk,
956
956
  message_id=chat_completion_response.id if create_message_id else chat_completion_chunk.id,
957
- message_date=chat_completion_response.created if create_message_datetime else chat_completion_chunk.created,
957
+ message_date=(
958
+ timestamp_to_datetime(chat_completion_response.created)
959
+ if create_message_datetime
960
+ else timestamp_to_datetime(chat_completion_chunk.created)
961
+ ),
958
962
  # if extended_thinking is on, then reasoning_content will be flowing as chunks
959
963
  # TODO handle emitting redacted reasoning content (e.g. as concat?)
960
964
  expect_reasoning_content=extended_thinking,
@@ -22,7 +22,7 @@ from letta.errors import (
22
22
  LLMServerError,
23
23
  LLMUnprocessableEntityError,
24
24
  )
25
- from letta.helpers.datetime_helpers import get_utc_time
25
+ from letta.helpers.datetime_helpers import get_utc_time_int
26
26
  from letta.llm_api.helpers import add_inner_thoughts_to_functions, unpack_all_inner_thoughts_from_kwargs
27
27
  from letta.llm_api.llm_client_base import LLMClientBase
28
28
  from letta.local_llm.constants import INNER_THOUGHTS_KWARG, INNER_THOUGHTS_KWARG_DESCRIPTION
@@ -403,7 +403,7 @@ class AnthropicClient(LLMClientBase):
403
403
  chat_completion_response = ChatCompletionResponse(
404
404
  id=response.id,
405
405
  choices=[choice],
406
- created=get_utc_time(),
406
+ created=get_utc_time_int(),
407
407
  model=response.model,
408
408
  usage=UsageStatistics(
409
409
  prompt_tokens=prompt_tokens,
@@ -4,7 +4,7 @@ from typing import List, Optional, Union
4
4
 
5
5
  import requests
6
6
 
7
- from letta.helpers.datetime_helpers import get_utc_time
7
+ from letta.helpers.datetime_helpers import get_utc_time_int
8
8
  from letta.helpers.json_helpers import json_dumps
9
9
  from letta.local_llm.utils import count_tokens
10
10
  from letta.schemas.message import Message
@@ -207,7 +207,7 @@ def convert_cohere_response_to_chatcompletion(
207
207
  return ChatCompletionResponse(
208
208
  id=response_json["response_id"],
209
209
  choices=[choice],
210
- created=get_utc_time(),
210
+ created=get_utc_time_int(),
211
211
  model=model,
212
212
  usage=UsageStatistics(
213
213
  prompt_tokens=prompt_tokens,
@@ -6,7 +6,7 @@ import requests
6
6
  from google.genai.types import FunctionCallingConfig, FunctionCallingConfigMode, ToolConfig
7
7
 
8
8
  from letta.constants import NON_USER_MSG_PREFIX
9
- from letta.helpers.datetime_helpers import get_utc_time
9
+ from letta.helpers.datetime_helpers import get_utc_time_int
10
10
  from letta.helpers.json_helpers import json_dumps
11
11
  from letta.llm_api.helpers import make_post_request
12
12
  from letta.llm_api.llm_client_base import LLMClientBase
@@ -260,7 +260,7 @@ class GoogleAIClient(LLMClientBase):
260
260
  id=response_id,
261
261
  choices=choices,
262
262
  model=self.llm_config.model, # NOTE: Google API doesn't pass back model in the response
263
- created=get_utc_time(),
263
+ created=get_utc_time_int(),
264
264
  usage=usage,
265
265
  )
266
266
  except KeyError as e:
@@ -4,7 +4,7 @@ from typing import List, Optional
4
4
  from google import genai
5
5
  from google.genai.types import FunctionCallingConfig, FunctionCallingConfigMode, GenerateContentResponse, ThinkingConfig, ToolConfig
6
6
 
7
- from letta.helpers.datetime_helpers import get_utc_time
7
+ from letta.helpers.datetime_helpers import get_utc_time_int
8
8
  from letta.helpers.json_helpers import json_dumps
9
9
  from letta.llm_api.google_ai_client import GoogleAIClient
10
10
  from letta.local_llm.json_parser import clean_json_string_extra_backslash
@@ -234,7 +234,7 @@ class GoogleVertexClient(GoogleAIClient):
234
234
  id=response_id,
235
235
  choices=choices,
236
236
  model=self.llm_config.model, # NOTE: Google API doesn't pass back model in the response
237
- created=get_utc_time(),
237
+ created=get_utc_time_int(),
238
238
  usage=usage,
239
239
  )
240
240
  except KeyError as e:
@@ -4,7 +4,9 @@ from typing import Generator, List, Optional, Union
4
4
  import requests
5
5
  from openai import OpenAI
6
6
 
7
+ from letta.helpers.datetime_helpers import timestamp_to_datetime
7
8
  from letta.llm_api.helpers import add_inner_thoughts_to_functions, convert_to_structured_output, make_post_request
9
+ from letta.llm_api.openai_client import supports_parallel_tool_calling, supports_temperature_param
8
10
  from letta.local_llm.constants import INNER_THOUGHTS_KWARG, INNER_THOUGHTS_KWARG_DESCRIPTION, INNER_THOUGHTS_KWARG_DESCRIPTION_GO_FIRST
9
11
  from letta.local_llm.utils import num_tokens_from_functions, num_tokens_from_messages
10
12
  from letta.log import get_logger
@@ -135,7 +137,7 @@ def build_openai_chat_completions_request(
135
137
  tool_choice=tool_choice,
136
138
  user=str(user_id),
137
139
  max_completion_tokens=llm_config.max_tokens,
138
- temperature=1.0 if llm_config.enable_reasoner else llm_config.temperature,
140
+ temperature=llm_config.temperature if supports_temperature_param(model) else None,
139
141
  reasoning_effort=llm_config.reasoning_effort,
140
142
  )
141
143
  else:
@@ -237,7 +239,7 @@ def openai_chat_completions_process_stream(
237
239
  chat_completion_response = ChatCompletionResponse(
238
240
  id=dummy_message.id if create_message_id else TEMP_STREAM_RESPONSE_ID,
239
241
  choices=[],
240
- created=dummy_message.created_at, # NOTE: doesn't matter since both will do get_utc_time()
242
+ created=int(dummy_message.created_at.timestamp()), # NOTE: doesn't matter since both will do get_utc_time()
241
243
  model=chat_completion_request.model,
242
244
  usage=UsageStatistics(
243
245
  completion_tokens=0,
@@ -274,7 +276,11 @@ def openai_chat_completions_process_stream(
274
276
  message_type = stream_interface.process_chunk(
275
277
  chat_completion_chunk,
276
278
  message_id=chat_completion_response.id if create_message_id else chat_completion_chunk.id,
277
- message_date=chat_completion_response.created if create_message_datetime else chat_completion_chunk.created,
279
+ message_date=(
280
+ timestamp_to_datetime(chat_completion_response.created)
281
+ if create_message_datetime
282
+ else timestamp_to_datetime(chat_completion_chunk.created)
283
+ ),
278
284
  expect_reasoning_content=expect_reasoning_content,
279
285
  name=name,
280
286
  message_index=message_idx,
@@ -489,6 +495,7 @@ def prepare_openai_payload(chat_completion_request: ChatCompletionRequest):
489
495
  # except ValueError as e:
490
496
  # warnings.warn(f"Failed to convert tool function to structured output, tool={tool}, error={e}")
491
497
 
492
- if "o3-mini" in chat_completion_request.model or "o1" in chat_completion_request.model:
498
+ if not supports_parallel_tool_calling(chat_completion_request.model):
493
499
  data.pop("parallel_tool_calls", None)
500
+
494
501
  return data
@@ -34,6 +34,33 @@ from letta.settings import model_settings
34
34
  logger = get_logger(__name__)
35
35
 
36
36
 
37
+ def is_openai_reasoning_model(model: str) -> bool:
38
+ """Utility function to check if the model is a 'reasoner'"""
39
+
40
+ # NOTE: needs to be updated with new model releases
41
+ return model.startswith("o1") or model.startswith("o3")
42
+
43
+
44
+ def supports_temperature_param(model: str) -> bool:
45
+ """Certain OpenAI models don't support configuring the temperature.
46
+
47
+ Example error: 400 - {'error': {'message': "Unsupported parameter: 'temperature' is not supported with this model.", 'type': 'invalid_request_error', 'param': 'temperature', 'code': 'unsupported_parameter'}}
48
+ """
49
+ if is_openai_reasoning_model(model):
50
+ return False
51
+ else:
52
+ return True
53
+
54
+
55
+ def supports_parallel_tool_calling(model: str) -> bool:
56
+ """Certain OpenAI models don't support parallel tool calls."""
57
+
58
+ if is_openai_reasoning_model(model):
59
+ return False
60
+ else:
61
+ return True
62
+
63
+
37
64
  class OpenAIClient(LLMClientBase):
38
65
  def _prepare_client_kwargs(self) -> dict:
39
66
  api_key = model_settings.openai_api_key or os.environ.get("OPENAI_API_KEY")
@@ -66,7 +93,8 @@ class OpenAIClient(LLMClientBase):
66
93
  put_inner_thoughts_first=True,
67
94
  )
68
95
 
69
- use_developer_message = llm_config.model.startswith("o1") or llm_config.model.startswith("o3") # o-series models
96
+ use_developer_message = is_openai_reasoning_model(llm_config.model)
97
+
70
98
  openai_message_list = [
71
99
  cast_message_to_subtype(
72
100
  m.to_openai_dict(
@@ -103,7 +131,7 @@ class OpenAIClient(LLMClientBase):
103
131
  tool_choice=tool_choice,
104
132
  user=str(),
105
133
  max_completion_tokens=llm_config.max_tokens,
106
- temperature=llm_config.temperature,
134
+ temperature=llm_config.temperature if supports_temperature_param(model) else None,
107
135
  )
108
136
 
109
137
  if "inference.memgpt.ai" in llm_config.model_endpoint:
@@ -160,6 +188,10 @@ class OpenAIClient(LLMClientBase):
160
188
  response=chat_completion_response, inner_thoughts_key=INNER_THOUGHTS_KWARG
161
189
  )
162
190
 
191
+ # If we used a reasoning model, create a content part for the ommitted reasoning
192
+ if is_openai_reasoning_model(self.llm_config.model):
193
+ chat_completion_response.choices[0].message.ommitted_reasoning_content = True
194
+
163
195
  return chat_completion_response
164
196
 
165
197
  def stream(self, request_data: dict) -> Stream[ChatCompletionChunk]:
@@ -6,7 +6,7 @@ import requests
6
6
 
7
7
  from letta.constants import CLI_WARNING_PREFIX
8
8
  from letta.errors import LocalLLMConnectionError, LocalLLMError
9
- from letta.helpers.datetime_helpers import get_utc_time
9
+ from letta.helpers.datetime_helpers import get_utc_time_int
10
10
  from letta.helpers.json_helpers import json_dumps
11
11
  from letta.local_llm.constants import DEFAULT_WRAPPER
12
12
  from letta.local_llm.function_parser import patch_function
@@ -241,7 +241,7 @@ def get_chat_completion(
241
241
  ),
242
242
  )
243
243
  ],
244
- created=get_utc_time(),
244
+ created=get_utc_time_int(),
245
245
  model=model,
246
246
  # "This fingerprint represents the backend configuration that the model runs with."
247
247
  # system_fingerprint=user if user is not None else "null",
@@ -145,7 +145,8 @@ class OmittedReasoningContent(MessageContent):
145
145
  type: Literal[MessageContentType.omitted_reasoning] = Field(
146
146
  MessageContentType.omitted_reasoning, description="Indicates this is an omitted reasoning step."
147
147
  )
148
- tokens: int = Field(..., description="The reasoning token count for intermediate reasoning content.")
148
+ # NOTE: dropping because we don't track this kind of information for the other reasoning types
149
+ # tokens: int = Field(..., description="The reasoning token count for intermediate reasoning content.")
149
150
 
150
151
 
151
152
  LettaMessageContentUnion = Annotated[
@@ -81,8 +81,11 @@ class LLMConfig(BaseModel):
81
81
  @model_validator(mode="before")
82
82
  @classmethod
83
83
  def set_default_enable_reasoner(cls, values):
84
- if any(openai_reasoner_model in values.get("model", "") for openai_reasoner_model in ["o3-mini", "o1"]):
85
- values["enable_reasoner"] = True
84
+ # NOTE: this is really only applicable for models that can toggle reasoning on-and-off, like 3.7
85
+ # We can also use this field to identify if a model is a "reasoning" model (o1/o3, etc.) if we want
86
+ # if any(openai_reasoner_model in values.get("model", "") for openai_reasoner_model in ["o3-mini", "o1"]):
87
+ # values["enable_reasoner"] = True
88
+ # values["put_inner_thoughts_in_kwargs"] = False
86
89
  return values
87
90
 
88
91
  @model_validator(mode="before")
@@ -100,6 +103,13 @@ class LLMConfig(BaseModel):
100
103
  if values.get("put_inner_thoughts_in_kwargs") is None:
101
104
  values["put_inner_thoughts_in_kwargs"] = False if model in avoid_put_inner_thoughts_in_kwargs else True
102
105
 
106
+ # For the o1/o3 series from OpenAI, set to False by default
107
+ # We can set this flag to `true` if desired, which will enable "double-think"
108
+ from letta.llm_api.openai_client import is_openai_reasoning_model
109
+
110
+ if is_openai_reasoning_model(model):
111
+ values["put_inner_thoughts_in_kwargs"] = False
112
+
103
113
  return values
104
114
 
105
115
  @model_validator(mode="after")
@@ -31,6 +31,7 @@ from letta.schemas.letta_message import (
31
31
  )
32
32
  from letta.schemas.letta_message_content import (
33
33
  LettaMessageContentUnion,
34
+ OmittedReasoningContent,
34
35
  ReasoningContent,
35
36
  RedactedReasoningContent,
36
37
  TextContent,
@@ -295,6 +296,18 @@ class Message(BaseMessage):
295
296
  sender_id=self.sender_id,
296
297
  )
297
298
  )
299
+ elif isinstance(content_part, OmittedReasoningContent):
300
+ # Special case for "hidden reasoning" models like o1/o3
301
+ # NOTE: we also have to think about how to return this during streaming
302
+ messages.append(
303
+ HiddenReasoningMessage(
304
+ id=self.id,
305
+ date=self.created_at,
306
+ state="omitted",
307
+ name=self.name,
308
+ otid=otid,
309
+ )
310
+ )
298
311
  else:
299
312
  warnings.warn(f"Unrecognized content part in assistant message: {content_part}")
300
313
 
@@ -464,6 +477,10 @@ class Message(BaseMessage):
464
477
  data=openai_message_dict["redacted_reasoning_content"] if "redacted_reasoning_content" in openai_message_dict else None,
465
478
  ),
466
479
  )
480
+ if "omitted_reasoning_content" in openai_message_dict and openai_message_dict["omitted_reasoning_content"]:
481
+ content.append(
482
+ OmittedReasoningContent(),
483
+ )
467
484
 
468
485
  # If we're going from deprecated function form
469
486
  if openai_message_dict["role"] == "function":
@@ -39,9 +39,10 @@ class Message(BaseModel):
39
39
  tool_calls: Optional[List[ToolCall]] = None
40
40
  role: str
41
41
  function_call: Optional[FunctionCall] = None # Deprecated
42
- reasoning_content: Optional[str] = None # Used in newer reasoning APIs
42
+ reasoning_content: Optional[str] = None # Used in newer reasoning APIs, e.g. DeepSeek
43
43
  reasoning_content_signature: Optional[str] = None # NOTE: for Anthropic
44
44
  redacted_reasoning_content: Optional[str] = None # NOTE: for Anthropic
45
+ ommitted_reasoning_content: bool = False # NOTE: for OpenAI o1/o3
45
46
 
46
47
 
47
48
  class Choice(BaseModel):
@@ -52,16 +53,64 @@ class Choice(BaseModel):
52
53
  seed: Optional[int] = None # found in TogetherAI
53
54
 
54
55
 
56
+ class UsageStatisticsPromptTokenDetails(BaseModel):
57
+ cached_tokens: int = 0
58
+ # NOTE: OAI specific
59
+ # audio_tokens: int = 0
60
+
61
+ def __add__(self, other: "UsageStatisticsPromptTokenDetails") -> "UsageStatisticsPromptTokenDetails":
62
+ return UsageStatisticsPromptTokenDetails(
63
+ cached_tokens=self.cached_tokens + other.cached_tokens,
64
+ )
65
+
66
+
67
+ class UsageStatisticsCompletionTokenDetails(BaseModel):
68
+ reasoning_tokens: int = 0
69
+ # NOTE: OAI specific
70
+ # audio_tokens: int = 0
71
+ # accepted_prediction_tokens: int = 0
72
+ # rejected_prediction_tokens: int = 0
73
+
74
+ def __add__(self, other: "UsageStatisticsCompletionTokenDetails") -> "UsageStatisticsCompletionTokenDetails":
75
+ return UsageStatisticsCompletionTokenDetails(
76
+ reasoning_tokens=self.reasoning_tokens + other.reasoning_tokens,
77
+ )
78
+
79
+
55
80
  class UsageStatistics(BaseModel):
56
81
  completion_tokens: int = 0
57
82
  prompt_tokens: int = 0
58
83
  total_tokens: int = 0
59
84
 
85
+ prompt_tokens_details: Optional[UsageStatisticsPromptTokenDetails] = None
86
+ completion_tokens_details: Optional[UsageStatisticsCompletionTokenDetails] = None
87
+
60
88
  def __add__(self, other: "UsageStatistics") -> "UsageStatistics":
89
+
90
+ if self.prompt_tokens_details is None and other.prompt_tokens_details is None:
91
+ total_prompt_tokens_details = None
92
+ elif self.prompt_tokens_details is None:
93
+ total_prompt_tokens_details = other.prompt_tokens_details
94
+ elif other.prompt_tokens_details is None:
95
+ total_prompt_tokens_details = self.prompt_tokens_details
96
+ else:
97
+ total_prompt_tokens_details = self.prompt_tokens_details + other.prompt_tokens_details
98
+
99
+ if self.completion_tokens_details is None and other.completion_tokens_details is None:
100
+ total_completion_tokens_details = None
101
+ elif self.completion_tokens_details is None:
102
+ total_completion_tokens_details = other.completion_tokens_details
103
+ elif other.completion_tokens_details is None:
104
+ total_completion_tokens_details = self.completion_tokens_details
105
+ else:
106
+ total_completion_tokens_details = self.completion_tokens_details + other.completion_tokens_details
107
+
61
108
  return UsageStatistics(
62
109
  completion_tokens=self.completion_tokens + other.completion_tokens,
63
110
  prompt_tokens=self.prompt_tokens + other.prompt_tokens,
64
111
  total_tokens=self.total_tokens + other.total_tokens,
112
+ prompt_tokens_details=total_prompt_tokens_details,
113
+ completion_tokens_details=total_completion_tokens_details,
65
114
  )
66
115
 
67
116
 
@@ -70,7 +119,7 @@ class ChatCompletionResponse(BaseModel):
70
119
 
71
120
  id: str
72
121
  choices: List[Choice]
73
- created: datetime.datetime
122
+ created: Union[datetime.datetime, int]
74
123
  model: Optional[str] = None # NOTE: this is not consistent with OpenAI API standard, however is necessary to support local LLMs
75
124
  # system_fingerprint: str # docs say this is mandatory, but in reality API returns None
76
125
  system_fingerprint: Optional[str] = None
@@ -138,7 +187,7 @@ class ChatCompletionChunkResponse(BaseModel):
138
187
 
139
188
  id: str
140
189
  choices: List[ChunkChoice]
141
- created: Union[datetime.datetime, str]
190
+ created: Union[datetime.datetime, int]
142
191
  model: str
143
192
  # system_fingerprint: str # docs say this is mandatory, but in reality API returns None
144
193
  system_fingerprint: Optional[str] = None
@@ -238,7 +238,7 @@ class ChatCompletionsStreamingInterface(AgentChunkStreamingInterface):
238
238
  return ChatCompletionChunk(
239
239
  id=chunk.id,
240
240
  object=chunk.object,
241
- created=chunk.created.timestamp(),
241
+ created=chunk.created,
242
242
  model=chunk.model,
243
243
  choices=[
244
244
  Choice(
@@ -256,7 +256,7 @@ class ChatCompletionsStreamingInterface(AgentChunkStreamingInterface):
256
256
  return ChatCompletionChunk(
257
257
  id=chunk.id,
258
258
  object=chunk.object,
259
- created=chunk.created.timestamp(),
259
+ created=chunk.created,
260
260
  model=chunk.model,
261
261
  choices=[
262
262
  Choice(
@@ -1001,7 +1001,7 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
1001
1001
  # Example case that would trigger here:
1002
1002
  # id='chatcmpl-AKtUvREgRRvgTW6n8ZafiKuV0mxhQ'
1003
1003
  # choices=[ChunkChoice(finish_reason=None, index=0, delta=MessageDelta(content=None, tool_calls=None, function_call=None), logprobs=None)]
1004
- # created=datetime.datetime(2024, 10, 21, 20, 40, 57, tzinfo=TzInfo(UTC))
1004
+ # created=1713216662
1005
1005
  # model='gpt-4o-mini-2024-07-18'
1006
1006
  # object='chat.completion.chunk'
1007
1007
  warnings.warn(f"Couldn't find delta in chunk: {chunk}")
@@ -1,6 +1,6 @@
1
1
  from typing import List, Optional
2
2
 
3
- from fastapi import APIRouter, Body, Depends, Header
3
+ from fastapi import APIRouter, Body, Depends, Header, status
4
4
  from fastapi.exceptions import HTTPException
5
5
  from starlette.requests import Request
6
6
 
@@ -11,6 +11,7 @@ from letta.schemas.job import BatchJob, JobStatus, JobType, JobUpdate
11
11
  from letta.schemas.letta_request import CreateBatch
12
12
  from letta.server.rest_api.utils import get_letta_server
13
13
  from letta.server.server import SyncServer
14
+ from letta.settings import settings
14
15
 
15
16
  router = APIRouter(prefix="/messages", tags=["messages"])
16
17
 
@@ -43,6 +44,13 @@ async def create_messages_batch(
43
44
  if length > max_bytes:
44
45
  raise HTTPException(status_code=413, detail=f"Request too large ({length} bytes). Max is {max_bytes} bytes.")
45
46
 
47
+ # Reject request if env var is not set
48
+ if not settings.enable_batch_job_polling:
49
+ raise HTTPException(
50
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
51
+ detail=f"Server misconfiguration: LETTA_ENABLE_BATCH_JOB_POLLING is set to False.",
52
+ )
53
+
46
54
  actor = server.user_manager.get_user_or_default(user_id=actor_id)
47
55
  batch_job = BatchJob(
48
56
  user_id=actor.id,
@@ -161,7 +161,7 @@ class AgentManager:
161
161
  # Basic CRUD operations
162
162
  # ======================================================================================================================
163
163
  @trace_method
164
- def create_agent(self, agent_create: CreateAgent, actor: PydanticUser) -> PydanticAgentState:
164
+ def create_agent(self, agent_create: CreateAgent, actor: PydanticUser, _test_only_force_id: Optional[str] = None) -> PydanticAgentState:
165
165
  # validate required configs
166
166
  if not agent_create.llm_config or not agent_create.embedding_config:
167
167
  raise ValueError("llm_config and embedding_config are required")
@@ -239,6 +239,10 @@ class AgentManager:
239
239
  created_by_id=actor.id,
240
240
  last_updated_by_id=actor.id,
241
241
  )
242
+
243
+ if _test_only_force_id:
244
+ new_agent.id = _test_only_force_id
245
+
242
246
  session.add(new_agent)
243
247
  session.flush()
244
248
  aid = new_agent.id
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "letta-nightly"
3
- version = "0.7.1.dev20250423104245"
3
+ version = "0.7.2.dev20250423222439"
4
4
  packages = [
5
5
  {include = "letta"},
6
6
  ]