letta-nightly 0.4.1.dev20241012104008__py3-none-any.whl → 0.4.1.dev20241013104006__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of letta-nightly might be problematic. Click here for more details.

@@ -85,9 +85,7 @@ def get_chat_completion(
85
85
  elif wrapper is None:
86
86
  # Warn the user that we're using the fallback
87
87
  if not has_shown_warning:
88
- print(
89
- f"{CLI_WARNING_PREFIX}no wrapper specified for local LLM, using the default wrapper (you can remove this warning by specifying the wrapper with --model-wrapper)"
90
- )
88
+ print(f"{CLI_WARNING_PREFIX}no prompt formatter specified for local LLM, using the default formatter")
91
89
  has_shown_warning = True
92
90
 
93
91
  llm_wrapper = DEFAULT_WRAPPER()
letta/providers.py CHANGED
@@ -140,9 +140,17 @@ class AnthropicProvider(Provider):
140
140
 
141
141
 
142
142
  class OllamaProvider(OpenAIProvider):
143
+ """Ollama provider that uses the native /api/generate endpoint
144
+
145
+ See: https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion
146
+ """
147
+
143
148
  name: str = "ollama"
144
149
  base_url: str = Field(..., description="Base URL for the Ollama API.")
145
150
  api_key: Optional[str] = Field(None, description="API key for the Ollama API (default: `None`).")
151
+ default_prompt_formatter: str = Field(
152
+ ..., description="Default prompt formatter (aka model wrapper) to use on a /completions style API."
153
+ )
146
154
 
147
155
  def list_llm_models(self) -> List[LLMConfig]:
148
156
  # https://github.com/ollama/ollama/blob/main/docs/api.md#list-local-models
@@ -156,11 +164,15 @@ class OllamaProvider(OpenAIProvider):
156
164
  configs = []
157
165
  for model in response_json["models"]:
158
166
  context_window = self.get_model_context_window(model["name"])
167
+ if context_window is None:
168
+ print(f"Ollama model {model['name']} has no context window")
169
+ continue
159
170
  configs.append(
160
171
  LLMConfig(
161
172
  model=model["name"],
162
173
  model_endpoint_type="ollama",
163
174
  model_endpoint=self.base_url,
175
+ model_wrapper=self.default_prompt_formatter,
164
176
  context_window=context_window,
165
177
  )
166
178
  )
@@ -192,6 +204,10 @@ class OllamaProvider(OpenAIProvider):
192
204
  # ]
193
205
  # max_position_embeddings
194
206
  # parse model cards: nous, dolphon, llama
207
+ if "model_info" not in response_json:
208
+ if "error" in response_json:
209
+ print(f"Ollama fetch model info error for {model_name}: {response_json['error']}")
210
+ return None
195
211
  for key, value in response_json["model_info"].items():
196
212
  if "context_length" in key:
197
213
  return value
@@ -202,6 +218,10 @@ class OllamaProvider(OpenAIProvider):
202
218
 
203
219
  response = requests.post(f"{self.base_url}/api/show", json={"name": model_name, "verbose": True})
204
220
  response_json = response.json()
221
+ if "model_info" not in response_json:
222
+ if "error" in response_json:
223
+ print(f"Ollama fetch model info error for {model_name}: {response_json['error']}")
224
+ return None
205
225
  for key, value in response_json["model_info"].items():
206
226
  if "embedding_length" in key:
207
227
  return value
@@ -220,6 +240,7 @@ class OllamaProvider(OpenAIProvider):
220
240
  for model in response_json["models"]:
221
241
  embedding_dim = self.get_model_embedding_dim(model["name"])
222
242
  if not embedding_dim:
243
+ print(f"Ollama model {model['name']} has no embedding dimension")
223
244
  continue
224
245
  configs.append(
225
246
  EmbeddingConfig(
@@ -420,7 +441,7 @@ class VLLMCompletionsProvider(Provider):
420
441
  # NOTE: vLLM only serves one model at a time (so could configure that through env variables)
421
442
  name: str = "vllm"
422
443
  base_url: str = Field(..., description="Base URL for the vLLM API.")
423
- default_prompt_formatter: str = Field(..., description="Default prompt formatter (aka model wrapper)to use on vLLM /completions API.")
444
+ default_prompt_formatter: str = Field(..., description="Default prompt formatter (aka model wrapper) to use on vLLM /completions API.")
424
445
 
425
446
  def list_llm_models(self) -> List[LLMConfig]:
426
447
  # not supported with vLLM
letta/server/server.py CHANGED
@@ -200,7 +200,7 @@ class SyncServer(Server):
200
200
  def __init__(
201
201
  self,
202
202
  chaining: bool = True,
203
- max_chaining_steps: bool = None,
203
+ max_chaining_steps: Optional[bool] = None,
204
204
  default_interface_factory: Callable[[], AgentInterface] = lambda: CLIInterface(),
205
205
  # default_interface: AgentInterface = CLIInterface(),
206
206
  # default_persistence_manager_cls: PersistenceManager = LocalStateManager,
@@ -241,13 +241,32 @@ class SyncServer(Server):
241
241
  # collect providers (always has Letta as a default)
242
242
  self._enabled_providers: List[Provider] = [LettaProvider()]
243
243
  if model_settings.openai_api_key:
244
- self._enabled_providers.append(OpenAIProvider(api_key=model_settings.openai_api_key, base_url=model_settings.openai_api_base))
244
+ self._enabled_providers.append(
245
+ OpenAIProvider(
246
+ api_key=model_settings.openai_api_key,
247
+ base_url=model_settings.openai_api_base,
248
+ )
249
+ )
245
250
  if model_settings.anthropic_api_key:
246
- self._enabled_providers.append(AnthropicProvider(api_key=model_settings.anthropic_api_key))
251
+ self._enabled_providers.append(
252
+ AnthropicProvider(
253
+ api_key=model_settings.anthropic_api_key,
254
+ )
255
+ )
247
256
  if model_settings.ollama_base_url:
248
- self._enabled_providers.append(OllamaProvider(base_url=model_settings.ollama_base_url, api_key=None))
257
+ self._enabled_providers.append(
258
+ OllamaProvider(
259
+ base_url=model_settings.ollama_base_url,
260
+ api_key=None,
261
+ default_prompt_formatter=model_settings.default_prompt_formatter,
262
+ )
263
+ )
249
264
  if model_settings.gemini_api_key:
250
- self._enabled_providers.append(GoogleAIProvider(api_key=model_settings.gemini_api_key))
265
+ self._enabled_providers.append(
266
+ GoogleAIProvider(
267
+ api_key=model_settings.gemini_api_key,
268
+ )
269
+ )
251
270
  if model_settings.azure_api_key and model_settings.azure_base_url:
252
271
  assert model_settings.azure_api_version, "AZURE_API_VERSION is required"
253
272
  self._enabled_providers.append(
@@ -268,7 +287,11 @@ class SyncServer(Server):
268
287
  # NOTE: to use the /chat/completions endpoint, you need to specify extra flags on vLLM startup
269
288
  # see: https://docs.vllm.ai/en/latest/getting_started/examples/openai_chat_completion_client_with_tools.html
270
289
  # e.g. "... --enable-auto-tool-choice --tool-call-parser hermes"
271
- self._enabled_providers.append(VLLMChatCompletionsProvider(base_url=model_settings.vllm_api_base))
290
+ self._enabled_providers.append(
291
+ VLLMChatCompletionsProvider(
292
+ base_url=model_settings.vllm_api_base,
293
+ )
294
+ )
272
295
 
273
296
  def save_agents(self):
274
297
  """Saves all the agents that are in the in-memory object store"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.4.1.dev20241012104008
3
+ Version: 0.4.1.dev20241013104006
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -45,7 +45,7 @@ letta/llm_api/llm_api_tools.py,sha256=Z3eiYUtvZKBVBcmKI2l4qWkKM4hgvLN9Y1aSxXc7y-
45
45
  letta/llm_api/openai.py,sha256=EXpktSI_TYjsCDEXBxdNXsY5uE9Rzb7BPF1F6cz8bkg,21689
46
46
  letta/local_llm/README.md,sha256=hFJyw5B0TU2jrh9nb0zGZMgdH-Ei1dSRfhvPQG_NSoU,168
47
47
  letta/local_llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- letta/local_llm/chat_completion_proxy.py,sha256=PXgNveahts5DbZ7GVcPShxmrDKropL81PY2JHc31yAA,13091
48
+ letta/local_llm/chat_completion_proxy.py,sha256=SiohxsjGTku4vOryOZx7I0t0xoO_sUuhXgoe62fKq3c,12995
49
49
  letta/local_llm/constants.py,sha256=GIu0184EIiOLEqGeupLUYQvkgT_imIjLg3T-KM9TcFM,1125
50
50
  letta/local_llm/function_parser.py,sha256=BlNsGo1VzyfY5KdF_RwjRQNOWIsaudo7o37u1W5eg0s,2626
51
51
  letta/local_llm/grammars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -107,7 +107,7 @@ letta/prompts/system/memgpt_doc.txt,sha256=AsT55NOORoH-K-p0fxklrDRZ3qHs4MIKMuR-M
107
107
  letta/prompts/system/memgpt_gpt35_extralong.txt,sha256=FheNhYoIzNz6qnJKhVquZVSMj3HduC48reFaX7Pf7ig,5046
108
108
  letta/prompts/system/memgpt_intuitive_knowledge.txt,sha256=sA7c3urYqREVnSBI81nTGImXAekqC0Fxc7RojFqud1g,2966
109
109
  letta/prompts/system/memgpt_modified_chat.txt,sha256=HOaPVurEftD8KsuwsclDgE2afIfklMjxhuSO96q1-6I,4656
110
- letta/providers.py,sha256=1vxUxMpLHyZ_XDVTUcpB98HOqszRwnt2sX9xU8zts1U,16949
110
+ letta/providers.py,sha256=e4jWshGMu4UQ9B0yEzcHP1bDxNHEo_mgpO5M0txuOIo,17978
111
111
  letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
112
  letta/schemas/agent.py,sha256=ztnUqdhY9V3g0jsbTjF1ypKPC1tZx4QVFaRuLAOXNSA,6230
113
113
  letta/schemas/api_key.py,sha256=u07yzzMn-hBAHZIIKbWY16KsgiFjSNR8lAghpMUo3_4,682
@@ -167,7 +167,7 @@ letta/server/rest_api/routers/v1/tools.py,sha256=MEhxu-zMS2ff_wwcRpMuQyWA71w_3BJ
167
167
  letta/server/rest_api/routers/v1/users.py,sha256=Y2rDvHOG1B5FLSOjutY3R22vt48IngbZ-9h8CohG5rc,3378
168
168
  letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
169
169
  letta/server/rest_api/utils.py,sha256=Fc2ZGKzLaBa2sEtSTVjJ8D5M0xIwsWC0CVAOIJaD3rY,2176
170
- letta/server/server.py,sha256=XWnXt7ViLwihQVpwykxdr-fcAOGhhyGjKSM4Z-nvxw4,82206
170
+ letta/server/server.py,sha256=txNgf3AIraK-kTV4PLwzROfgfBTIul_Y74hPygFtOHw,82687
171
171
  letta/server/startup.sh,sha256=jeGV7B_PS0hS-tT6o6GpACrUbV9WV1NI2L9aLoUDDtc,311
172
172
  letta/server/static_files/assets/index-3ab03d5b.css,sha256=OrA9W4iKJ5h2Wlr7GwdAT4wow0CM8hVit1yOxEL49Qw,54295
173
173
  letta/server/static_files/assets/index-9a9c449b.js,sha256=qoWUq6_kuLhE9NFkNeCBptgq-oERW46r0tB3JlWe_qc,1818951
@@ -184,8 +184,8 @@ letta/settings.py,sha256=6VWC3vtTa8vqj6dqos4p_xHTMJNJS_8LRGJmqvaU1-o,3219
184
184
  letta/streaming_interface.py,sha256=_FPUWy58j50evHcpXyd7zB1wWqeCc71NCFeWh_TBvnw,15736
185
185
  letta/system.py,sha256=buKYPqG5n2x41hVmWpu6JUpyd7vTWED9Km2_M7dLrvk,6960
186
186
  letta/utils.py,sha256=neUs7mxNfndzRL5XUxerr8Lic6w7qnyyvf8FBwMnyWw,30852
187
- letta_nightly-0.4.1.dev20241012104008.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
188
- letta_nightly-0.4.1.dev20241012104008.dist-info/METADATA,sha256=bzoVG8Kbu7WPOswZWQ4HGRQoNqmrA2EvT8XP1sbuQ6U,6008
189
- letta_nightly-0.4.1.dev20241012104008.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
190
- letta_nightly-0.4.1.dev20241012104008.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
191
- letta_nightly-0.4.1.dev20241012104008.dist-info/RECORD,,
187
+ letta_nightly-0.4.1.dev20241013104006.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
188
+ letta_nightly-0.4.1.dev20241013104006.dist-info/METADATA,sha256=L5hOlFIaGT5BnE945CxaUdQEoKsOLrysrrL_bD9MjVU,6008
189
+ letta_nightly-0.4.1.dev20241013104006.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
190
+ letta_nightly-0.4.1.dev20241013104006.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
191
+ letta_nightly-0.4.1.dev20241013104006.dist-info/RECORD,,