letta-nightly 0.5.4.dev20241130104041__tar.gz → 0.5.4.dev20241204014655__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 (228) hide show
  1. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/PKG-INFO +6 -6
  2. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/README.md +5 -5
  3. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent.py +45 -44
  4. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/cli/cli.py +2 -1
  5. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/client.py +6 -1
  6. letta_nightly-0.5.4.dev20241204014655/letta/functions/functions.py +89 -0
  7. letta_nightly-0.5.4.dev20241204014655/letta/functions/schema_generator.py +477 -0
  8. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/helpers.py +99 -5
  9. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/openai.py +8 -2
  10. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/utils.py +8 -4
  11. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/metadata.py +4 -5
  12. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/tool.py +12 -0
  13. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/app.py +5 -4
  14. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/agents.py +24 -30
  15. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/sandbox_configs.py +19 -0
  16. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/sources.py +8 -1
  17. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/tools.py +88 -1
  18. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/server.py +146 -12
  19. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/per_agent_lock_manager.py +3 -3
  20. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/tool_execution_sandbox.py +51 -23
  21. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/utils.py +0 -7
  22. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/pyproject.toml +3 -3
  23. letta_nightly-0.5.4.dev20241130104041/letta/functions/functions.py +0 -104
  24. letta_nightly-0.5.4.dev20241130104041/letta/functions/schema_generator.py +0 -237
  25. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/LICENSE +0 -0
  26. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/__init__.py +0 -0
  27. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/__main__.py +0 -0
  28. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/chroma.py +0 -0
  29. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/db.py +0 -0
  30. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/lancedb.py +0 -0
  31. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/milvus.py +0 -0
  32. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/qdrant.py +0 -0
  33. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/storage.py +0 -0
  34. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/benchmark/benchmark.py +0 -0
  35. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/benchmark/constants.py +0 -0
  36. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/cli/cli_config.py +0 -0
  37. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/cli/cli_load.py +0 -0
  38. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/__init__.py +0 -0
  39. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/streaming.py +0 -0
  40. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/utils.py +0 -0
  41. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/config.py +0 -0
  42. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/constants.py +0 -0
  43. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/credentials.py +0 -0
  44. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/data_sources/connectors.py +0 -0
  45. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/data_sources/connectors_helper.py +0 -0
  46. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/embeddings.py +0 -0
  47. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/errors.py +0 -0
  48. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/__init__.py +0 -0
  49. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/function_sets/base.py +0 -0
  50. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/function_sets/extras.py +0 -0
  51. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/helpers.py +0 -0
  52. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/helpers/__init__.py +0 -0
  53. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/helpers/tool_rule_solver.py +0 -0
  54. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/humans/__init__.py +0 -0
  55. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/humans/examples/basic.txt +0 -0
  56. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/humans/examples/cs_phd.txt +0 -0
  57. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/interface.py +0 -0
  58. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/__init__.py +0 -0
  59. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/anthropic.py +0 -0
  60. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/azure_openai.py +0 -0
  61. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/azure_openai_constants.py +0 -0
  62. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/cohere.py +0 -0
  63. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/google_ai.py +0 -0
  64. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/llm_api_tools.py +0 -0
  65. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/mistral.py +0 -0
  66. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/README.md +0 -0
  67. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/__init__.py +0 -0
  68. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/chat_completion_proxy.py +0 -0
  69. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/constants.py +0 -0
  70. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/function_parser.py +0 -0
  71. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/__init__.py +0 -0
  72. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  73. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/json.gbnf +0 -0
  74. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  75. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/json_parser.py +0 -0
  76. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/koboldcpp/api.py +0 -0
  77. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/koboldcpp/settings.py +0 -0
  78. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llamacpp/api.py +0 -0
  79. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llamacpp/settings.py +0 -0
  80. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  81. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  82. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  83. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  84. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  85. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  86. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  87. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  88. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  89. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/lmstudio/api.py +0 -0
  90. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/lmstudio/settings.py +0 -0
  91. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/ollama/api.py +0 -0
  92. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/ollama/settings.py +0 -0
  93. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/__init__.py +0 -0
  94. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  95. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/settings.py +0 -0
  96. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/simple.py +0 -0
  97. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/vllm/api.py +0 -0
  98. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/api.py +0 -0
  99. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/legacy_api.py +0 -0
  100. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/legacy_settings.py +0 -0
  101. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/settings.py +0 -0
  102. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/log.py +0 -0
  103. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/main.py +0 -0
  104. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/memory.py +0 -0
  105. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/o1_agent.py +0 -0
  106. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/openai_backcompat/__init__.py +0 -0
  107. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/openai_backcompat/openai_object.py +0 -0
  108. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/__all__.py +0 -0
  109. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/__init__.py +0 -0
  110. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/agents_tags.py +0 -0
  111. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/base.py +0 -0
  112. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/block.py +0 -0
  113. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/blocks_agents.py +0 -0
  114. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/enums.py +0 -0
  115. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/errors.py +0 -0
  116. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/file.py +0 -0
  117. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/mixins.py +0 -0
  118. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/organization.py +0 -0
  119. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/sandbox_config.py +0 -0
  120. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/source.py +0 -0
  121. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/sqlalchemy_base.py +0 -0
  122. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/tool.py +0 -0
  123. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/user.py +0 -0
  124. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/persistence_manager.py +0 -0
  125. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/__init__.py +0 -0
  126. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/anna_pa.txt +0 -0
  127. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/google_search_persona.txt +0 -0
  128. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/memgpt_doc.txt +0 -0
  129. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/memgpt_starter.txt +0 -0
  130. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/o1_persona.txt +0 -0
  131. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sam.txt +0 -0
  132. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sam_pov.txt +0 -0
  133. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  134. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sqldb/test.db +0 -0
  135. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/__init__.py +0 -0
  136. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/gpt_summarize.py +0 -0
  137. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/gpt_system.py +0 -0
  138. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_base.txt +0 -0
  139. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_chat.txt +0 -0
  140. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  141. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  142. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_doc.txt +0 -0
  143. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  144. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  145. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  146. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  147. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/providers.py +0 -0
  148. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/pytest.ini +0 -0
  149. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/agent.py +0 -0
  150. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/agents_tags.py +0 -0
  151. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/api_key.py +0 -0
  152. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/block.py +0 -0
  153. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/blocks_agents.py +0 -0
  154. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/embedding_config.py +0 -0
  155. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/enums.py +0 -0
  156. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/file.py +0 -0
  157. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/health.py +0 -0
  158. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/job.py +0 -0
  159. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_base.py +0 -0
  160. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_message.py +0 -0
  161. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_request.py +0 -0
  162. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_response.py +0 -0
  163. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/llm_config.py +0 -0
  164. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/memory.py +0 -0
  165. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/message.py +0 -0
  166. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/chat_completion_request.py +0 -0
  167. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/chat_completion_response.py +0 -0
  168. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/chat_completions.py +0 -0
  169. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/embedding_response.py +0 -0
  170. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/openai.py +0 -0
  171. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/organization.py +0 -0
  172. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/passage.py +0 -0
  173. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/sandbox_config.py +0 -0
  174. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/source.py +0 -0
  175. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/tool_rule.py +0 -0
  176. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/usage.py +0 -0
  177. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/user.py +0 -0
  178. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/__init__.py +0 -0
  179. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/constants.py +0 -0
  180. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/generate_openapi_schema.sh +0 -0
  181. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/__init__.py +0 -0
  182. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/auth/__init__.py +0 -0
  183. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/auth/index.py +0 -0
  184. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/auth_token.py +0 -0
  185. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/interface.py +0 -0
  186. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/__init__.py +0 -0
  187. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/__init__.py +0 -0
  188. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/__init__.py +0 -0
  189. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/assistants.py +0 -0
  190. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/schemas.py +0 -0
  191. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/threads.py +0 -0
  192. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  193. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  194. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  195. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  196. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/health.py +0 -0
  197. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  198. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/llms.py +0 -0
  199. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  200. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/users.py +0 -0
  201. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/static_files.py +0 -0
  202. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/utils.py +0 -0
  203. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/startup.sh +0 -0
  204. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/assets/index-3ab03d5b.css +0 -0
  205. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/assets/index-9fa459a2.js +0 -0
  206. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/favicon.ico +0 -0
  207. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/index.html +0 -0
  208. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  209. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/utils.py +0 -0
  210. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/__init__.py +0 -0
  211. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/example_client.py +0 -0
  212. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/interface.py +0 -0
  213. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/protocol.py +0 -0
  214. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/server.py +0 -0
  215. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/__init__.py +0 -0
  216. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/agents_tags_manager.py +0 -0
  217. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/block_manager.py +0 -0
  218. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/blocks_agents_manager.py +0 -0
  219. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/organization_manager.py +0 -0
  220. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/sandbox_config_manager.py +0 -0
  221. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/source_manager.py +0 -0
  222. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/tool_manager.py +0 -0
  223. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/tool_sandbox_env/.gitkeep +0 -0
  224. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/user_manager.py +0 -0
  225. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/settings.py +0 -0
  226. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/streaming_interface.py +0 -0
  227. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/streaming_utils.py +0 -0
  228. {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/system.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.5.4.dev20241130104041
3
+ Version: 0.5.4.dev20241204014655
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -129,24 +129,24 @@ The two main ways to install Letta are through **pypi** (`pip`) or via **Docker*
129
129
 
130
130
  ### Step 1 - Install Letta using `pip`
131
131
  ```sh
132
- $ pip install -U letta
132
+ pip install -U letta
133
133
  ```
134
134
 
135
135
  ### Step 2 - Set your environment variables for your chosen LLM / embedding providers
136
136
  ```sh
137
- $ export OPENAI_API_KEY=sk-...
137
+ export OPENAI_API_KEY=sk-...
138
138
  ```
139
139
 
140
140
  For Ollama (see our full [documentation](https://docs.letta.com/install) for examples of how to set up various providers):
141
141
  ```sh
142
- $ export OLLAMA_BASE_URL=http://localhost:11434
142
+ export OLLAMA_BASE_URL=http://localhost:11434
143
143
  ```
144
144
 
145
145
  ### Step 3 - Run the Letta CLI
146
146
 
147
147
  You can create agents and chat with them via the Letta CLI tool (`letta run`):
148
148
  ```sh
149
- $ letta run
149
+ letta run
150
150
  ```
151
151
  ```
152
152
  🧬 Creating new agent...
@@ -179,7 +179,7 @@ Hit enter to begin (will request first Letta message)
179
179
 
180
180
  You can start the Letta API server with `letta server` (see the full API reference [here](https://docs.letta.com/api-reference)):
181
181
  ```sh
182
- $ letta server
182
+ letta server
183
183
  ```
184
184
  ```
185
185
  Initializing database...
@@ -44,24 +44,24 @@ The two main ways to install Letta are through **pypi** (`pip`) or via **Docker*
44
44
 
45
45
  ### Step 1 - Install Letta using `pip`
46
46
  ```sh
47
- $ pip install -U letta
47
+ pip install -U letta
48
48
  ```
49
49
 
50
50
  ### Step 2 - Set your environment variables for your chosen LLM / embedding providers
51
51
  ```sh
52
- $ export OPENAI_API_KEY=sk-...
52
+ export OPENAI_API_KEY=sk-...
53
53
  ```
54
54
 
55
55
  For Ollama (see our full [documentation](https://docs.letta.com/install) for examples of how to set up various providers):
56
56
  ```sh
57
- $ export OLLAMA_BASE_URL=http://localhost:11434
57
+ export OLLAMA_BASE_URL=http://localhost:11434
58
58
  ```
59
59
 
60
60
  ### Step 3 - Run the Letta CLI
61
61
 
62
62
  You can create agents and chat with them via the Letta CLI tool (`letta run`):
63
63
  ```sh
64
- $ letta run
64
+ letta run
65
65
  ```
66
66
  ```
67
67
  🧬 Creating new agent...
@@ -94,7 +94,7 @@ Hit enter to begin (will request first Letta message)
94
94
 
95
95
  You can start the Letta API server with `letta server` (see the full API reference [here](https://docs.letta.com/api-reference)):
96
96
  ```sh
97
- $ letta server
97
+ letta server
98
98
  ```
99
99
  ```
100
100
  Initializing database...
@@ -1,5 +1,6 @@
1
1
  import datetime
2
2
  import inspect
3
+ import time
3
4
  import traceback
4
5
  import warnings
5
6
  from abc import ABC, abstractmethod
@@ -566,60 +567,60 @@ class Agent(BaseAgent):
566
567
  self,
567
568
  message_sequence: List[Message],
568
569
  function_call: str = "auto",
569
- first_message: bool = False, # hint
570
+ first_message: bool = False,
570
571
  stream: bool = False, # TODO move to config?
571
- fail_on_empty_response: bool = False,
572
572
  empty_response_retry_limit: int = 3,
573
+ backoff_factor: float = 0.5, # delay multiplier for exponential backoff
574
+ max_delay: float = 10.0, # max delay between retries
573
575
  ) -> ChatCompletionResponse:
574
- """Get response from LLM API"""
575
- # Get the allowed tools based on the ToolRulesSolver state
576
+ """Get response from LLM API with robust retry mechanism."""
577
+
576
578
  allowed_tool_names = self.tool_rules_solver.get_allowed_tool_names()
579
+ allowed_functions = (
580
+ self.functions if not allowed_tool_names else [func for func in self.functions if func["name"] in allowed_tool_names]
581
+ )
577
582
 
578
- if not allowed_tool_names:
579
- # if it's empty, any available tools are fair game
580
- allowed_functions = self.functions
581
- else:
582
- allowed_functions = [func for func in self.functions if func["name"] in allowed_tool_names]
583
+ for attempt in range(1, empty_response_retry_limit + 1):
584
+ try:
585
+ response = create(
586
+ llm_config=self.agent_state.llm_config,
587
+ messages=message_sequence,
588
+ user_id=self.agent_state.user_id,
589
+ functions=allowed_functions,
590
+ functions_python=self.functions_python,
591
+ function_call=function_call,
592
+ first_message=first_message,
593
+ stream=stream,
594
+ stream_interface=self.interface,
595
+ )
583
596
 
584
- try:
585
- response = create(
586
- # agent_state=self.agent_state,
587
- llm_config=self.agent_state.llm_config,
588
- messages=message_sequence,
589
- user_id=self.agent_state.user_id,
590
- functions=allowed_functions,
591
- functions_python=self.functions_python,
592
- function_call=function_call,
593
- # hint
594
- first_message=first_message,
595
- # streaming
596
- stream=stream,
597
- stream_interface=self.interface,
598
- )
597
+ # These bottom two are retryable
598
+ if len(response.choices) == 0 or response.choices[0] is None:
599
+ raise ValueError(f"API call returned an empty message: {response}")
599
600
 
600
- if len(response.choices) == 0 or response.choices[0] is None:
601
- empty_api_err_message = f"API call didn't return a message: {response}"
602
- if fail_on_empty_response or empty_response_retry_limit == 0:
603
- raise Exception(empty_api_err_message)
604
- else:
605
- # Decrement retry limit and try again
606
- warnings.warn(empty_api_err_message)
607
- return self._get_ai_reply(
608
- message_sequence, function_call, first_message, stream, fail_on_empty_response, empty_response_retry_limit - 1
609
- )
601
+ if response.choices[0].finish_reason not in ["stop", "function_call", "tool_calls"]:
602
+ if response.choices[0].finish_reason == "length":
603
+ # This is not retryable, hence RuntimeError v.s. ValueError
604
+ raise RuntimeError("Finish reason was length (maximum context length)")
605
+ else:
606
+ raise ValueError(f"Bad finish reason from API: {response.choices[0].finish_reason}")
607
+
608
+ return response
610
609
 
611
- # special case for 'length'
612
- if response.choices[0].finish_reason == "length":
613
- raise Exception("Finish reason was length (maximum context length)")
610
+ except ValueError as ve:
611
+ if attempt >= empty_response_retry_limit:
612
+ warnings.warn(f"Retry limit reached. Final error: {ve}")
613
+ break
614
+ else:
615
+ delay = min(backoff_factor * (2 ** (attempt - 1)), max_delay)
616
+ warnings.warn(f"Attempt {attempt} failed: {ve}. Retrying in {delay} seconds...")
617
+ time.sleep(delay)
614
618
 
615
- # catches for soft errors
616
- if response.choices[0].finish_reason not in ["stop", "function_call", "tool_calls"]:
617
- raise Exception(f"API call finish with bad finish reason: {response}")
619
+ except Exception as e:
620
+ # For non-retryable errors, exit immediately
621
+ raise e
618
622
 
619
- # unpack with response.choices[0].message.content
620
- return response
621
- except Exception as e:
622
- raise e
623
+ raise Exception("Retries exhausted and no valid response received.")
623
624
 
624
625
  def _handle_ai_response(
625
626
  self,
@@ -220,7 +220,8 @@ def run(
220
220
 
221
221
  # create agent
222
222
  tools = [server.tool_manager.get_tool_by_name(tool_name=tool_name, actor=client.user) for tool_name in agent_state.tool_names]
223
- letta_agent = Agent(agent_state=agent_state, interface=interface(), tools=tools, user=client.user)
223
+ agent_state.tools = tools
224
+ letta_agent = Agent(agent_state=agent_state, interface=interface(), user=client.user)
224
225
 
225
226
  else: # create new agent
226
227
  # create new agent config: override defaults with args if provided
@@ -434,6 +434,7 @@ class RESTClient(AbstractClient):
434
434
  debug: bool = False,
435
435
  default_llm_config: Optional[LLMConfig] = None,
436
436
  default_embedding_config: Optional[EmbeddingConfig] = None,
437
+ headers: Optional[Dict] = None,
437
438
  ):
438
439
  """
439
440
  Initializes a new instance of Client class.
@@ -442,12 +443,16 @@ class RESTClient(AbstractClient):
442
443
  auto_save (bool): Whether to automatically save changes.
443
444
  user_id (str): The user ID.
444
445
  debug (bool): Whether to print debug information.
445
- default
446
+ default_llm_config (Optional[LLMConfig]): The default LLM configuration.
447
+ default_embedding_config (Optional[EmbeddingConfig]): The default embedding configuration.
448
+ headers (Optional[Dict]): The additional headers for the REST API.
446
449
  """
447
450
  super().__init__(debug=debug)
448
451
  self.base_url = base_url
449
452
  self.api_prefix = api_prefix
450
453
  self.headers = {"accept": "application/json", "authorization": f"Bearer {token}"}
454
+ if headers:
455
+ self.headers.update(headers)
451
456
  self._default_llm_config = default_llm_config
452
457
  self._default_embedding_config = default_embedding_config
453
458
 
@@ -0,0 +1,89 @@
1
+ import inspect
2
+ from textwrap import dedent # remove indentation
3
+ from types import ModuleType
4
+ from typing import Dict, List, Optional
5
+
6
+ from letta.errors import LettaToolCreateError
7
+ from letta.functions.schema_generator import generate_schema
8
+
9
+
10
+ def derive_openai_json_schema(source_code: str, name: Optional[str] = None) -> dict:
11
+ """Derives the OpenAI JSON schema for a given function source code.
12
+
13
+ First, attempts to execute the source code in a custom environment with only the necessary imports.
14
+ Then, it generates the schema from the function's docstring and signature.
15
+ """
16
+ try:
17
+ # Define a custom environment with necessary imports
18
+ env = {
19
+ "Optional": Optional,
20
+ "List": List,
21
+ "Dict": Dict,
22
+ # To support Pydantic models
23
+ # "BaseModel": BaseModel,
24
+ # "Field": Field,
25
+ }
26
+ env.update(globals())
27
+
28
+ # print("About to execute source code...")
29
+ exec(source_code, env)
30
+ # print("Source code executed successfully")
31
+
32
+ functions = [f for f in env if callable(env[f]) and not f.startswith("__")]
33
+ if not functions:
34
+ raise LettaToolCreateError("No callable functions found in source code")
35
+
36
+ # print(f"Found functions: {functions}")
37
+ func = env[functions[-1]]
38
+
39
+ if not hasattr(func, "__doc__") or not func.__doc__:
40
+ raise LettaToolCreateError(f"Function {func.__name__} missing docstring")
41
+
42
+ # print("About to generate schema...")
43
+ try:
44
+ schema = generate_schema(func, name=name)
45
+ # print("Schema generated successfully")
46
+ return schema
47
+ except TypeError as e:
48
+ raise LettaToolCreateError(f"Type error in schema generation: {str(e)}")
49
+ except ValueError as e:
50
+ raise LettaToolCreateError(f"Value error in schema generation: {str(e)}")
51
+ except Exception as e:
52
+ raise LettaToolCreateError(f"Unexpected error in schema generation: {str(e)}")
53
+
54
+ except Exception as e:
55
+ import traceback
56
+
57
+ traceback.print_exc()
58
+ raise LettaToolCreateError(f"Schema generation failed: {str(e)}") from e
59
+
60
+
61
+ def parse_source_code(func) -> str:
62
+ """Parse the source code of a function and remove indendation"""
63
+ source_code = dedent(inspect.getsource(func))
64
+ return source_code
65
+
66
+
67
+ def load_function_set(module: ModuleType) -> dict:
68
+ """Load the functions and generate schema for them, given a module object"""
69
+ function_dict = {}
70
+
71
+ for attr_name in dir(module):
72
+ # Get the attribute
73
+ attr = getattr(module, attr_name)
74
+
75
+ # Check if it's a callable function and not a built-in or special method
76
+ if inspect.isfunction(attr) and attr.__module__ == module.__name__:
77
+ if attr_name in function_dict:
78
+ raise ValueError(f"Found a duplicate of function name '{attr_name}'")
79
+
80
+ generated_schema = generate_schema(attr)
81
+ function_dict[attr_name] = {
82
+ "module": inspect.getsource(module),
83
+ "python_function": attr,
84
+ "json_schema": generated_schema,
85
+ }
86
+
87
+ if len(function_dict) == 0:
88
+ raise ValueError(f"No functions found in module {module}")
89
+ return function_dict