letta-nightly 0.7.11.dev20250507230415__py3-none-any.whl → 0.7.12.dev20250508044425__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.
- letta/__init__.py +1 -1
- letta/llm_api/anthropic.py +15 -1
- letta/llm_api/google_ai_client.py +20 -0
- letta/llm_api/google_constants.py +2 -0
- letta/llm_api/google_vertex_client.py +4 -4
- letta/llm_api/openai.py +16 -0
- letta/schemas/enums.py +1 -0
- letta/schemas/providers.py +25 -1
- letta/server/rest_api/routers/v1/providers.py +21 -3
- letta/services/provider_manager.py +16 -1
- {letta_nightly-0.7.11.dev20250507230415.dist-info → letta_nightly-0.7.12.dev20250508044425.dist-info}/METADATA +2 -2
- {letta_nightly-0.7.11.dev20250507230415.dist-info → letta_nightly-0.7.12.dev20250508044425.dist-info}/RECORD +15 -15
- {letta_nightly-0.7.11.dev20250507230415.dist-info → letta_nightly-0.7.12.dev20250508044425.dist-info}/LICENSE +0 -0
- {letta_nightly-0.7.11.dev20250507230415.dist-info → letta_nightly-0.7.12.dev20250508044425.dist-info}/WHEEL +0 -0
- {letta_nightly-0.7.11.dev20250507230415.dist-info → letta_nightly-0.7.12.dev20250508044425.dist-info}/entry_points.txt +0 -0
letta/__init__.py
CHANGED
letta/llm_api/anthropic.py
CHANGED
@@ -19,7 +19,7 @@ from anthropic.types.beta import (
|
|
19
19
|
BetaToolUseBlock,
|
20
20
|
)
|
21
21
|
|
22
|
-
from letta.errors import BedrockError, BedrockPermissionError
|
22
|
+
from letta.errors import BedrockError, BedrockPermissionError, ErrorCode, LLMAuthenticationError, LLMError
|
23
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
|
@@ -119,6 +119,20 @@ DUMMY_FIRST_USER_MESSAGE = "User initializing bootup sequence."
|
|
119
119
|
VALID_EVENT_TYPES = {"content_block_stop", "message_stop"}
|
120
120
|
|
121
121
|
|
122
|
+
def anthropic_check_valid_api_key(api_key: Union[str, None]) -> None:
|
123
|
+
if api_key:
|
124
|
+
anthropic_client = anthropic.Anthropic(api_key=api_key)
|
125
|
+
try:
|
126
|
+
# just use a cheap model to count some tokens - as of 5/7/2025 this is faster than fetching the list of models
|
127
|
+
anthropic_client.messages.count_tokens(model=MODEL_LIST[-1]["name"], messages=[{"role": "user", "content": "a"}])
|
128
|
+
except anthropic.AuthenticationError as e:
|
129
|
+
raise LLMAuthenticationError(message=f"Failed to authenticate with Anthropic: {e}", code=ErrorCode.UNAUTHENTICATED)
|
130
|
+
except Exception as e:
|
131
|
+
raise LLMError(message=f"{e}", code=ErrorCode.INTERNAL_SERVER_ERROR)
|
132
|
+
else:
|
133
|
+
raise ValueError("No API key provided")
|
134
|
+
|
135
|
+
|
122
136
|
def antropic_get_model_context_window(url: str, api_key: Union[str, None], model: str) -> int:
|
123
137
|
for model_dict in anthropic_get_model_list(url=url, api_key=api_key):
|
124
138
|
if model_dict["name"] == model:
|
@@ -3,11 +3,14 @@ import uuid
|
|
3
3
|
from typing import List, Optional, Tuple
|
4
4
|
|
5
5
|
import requests
|
6
|
+
from google import genai
|
6
7
|
from google.genai.types import FunctionCallingConfig, FunctionCallingConfigMode, ToolConfig
|
7
8
|
|
8
9
|
from letta.constants import NON_USER_MSG_PREFIX
|
10
|
+
from letta.errors import ErrorCode, LLMAuthenticationError, LLMError
|
9
11
|
from letta.helpers.datetime_helpers import get_utc_time_int
|
10
12
|
from letta.helpers.json_helpers import json_dumps
|
13
|
+
from letta.llm_api.google_constants import GOOGLE_MODEL_FOR_API_KEY_CHECK
|
11
14
|
from letta.llm_api.helpers import make_post_request
|
12
15
|
from letta.llm_api.llm_client_base import LLMClientBase
|
13
16
|
from letta.local_llm.json_parser import clean_json_string_extra_backslash
|
@@ -443,6 +446,23 @@ def get_gemini_endpoint_and_headers(
|
|
443
446
|
return url, headers
|
444
447
|
|
445
448
|
|
449
|
+
def google_ai_check_valid_api_key(api_key: str):
|
450
|
+
client = genai.Client(api_key=api_key)
|
451
|
+
# use the count token endpoint for a cheap model - as of 5/7/2025 this is slightly faster than fetching the list of models
|
452
|
+
try:
|
453
|
+
client.models.count_tokens(
|
454
|
+
model=GOOGLE_MODEL_FOR_API_KEY_CHECK,
|
455
|
+
contents="",
|
456
|
+
)
|
457
|
+
except genai.errors.ClientError as e:
|
458
|
+
# google api returns 400 invalid argument for invalid api key
|
459
|
+
if e.code == 400:
|
460
|
+
raise LLMAuthenticationError(message=f"Failed to authenticate with Google AI: {e}", code=ErrorCode.UNAUTHENTICATED)
|
461
|
+
raise e
|
462
|
+
except Exception as e:
|
463
|
+
raise LLMError(message=f"{e}", code=ErrorCode.INTERNAL_SERVER_ERROR)
|
464
|
+
|
465
|
+
|
446
466
|
def google_ai_get_model_list(base_url: str, api_key: str, key_in_header: bool = True) -> List[dict]:
|
447
467
|
from letta.utils import printd
|
448
468
|
|
@@ -14,3 +14,5 @@ GOOGLE_MODEL_TO_CONTEXT_LENGTH = {
|
|
14
14
|
GOOGLE_MODEL_TO_OUTPUT_LENGTH = {"gemini-2.0-flash-001": 8192, "gemini-2.5-pro-exp-03-25": 65536}
|
15
15
|
|
16
16
|
GOOGLE_EMBEDING_MODEL_TO_DIM = {"text-embedding-005": 768, "text-multilingual-embedding-002": 768}
|
17
|
+
|
18
|
+
GOOGLE_MODEL_FOR_API_KEY_CHECK = "gemini-2.0-flash-lite"
|
@@ -207,12 +207,12 @@ class GoogleVertexClient(GoogleAIClient):
|
|
207
207
|
|
208
208
|
# NOTE: this also involves stripping the inner monologue out of the function
|
209
209
|
if llm_config.put_inner_thoughts_in_kwargs:
|
210
|
-
from letta.local_llm.constants import
|
210
|
+
from letta.local_llm.constants import INNER_THOUGHTS_KWARG_VERTEX
|
211
211
|
|
212
212
|
assert (
|
213
|
-
|
213
|
+
INNER_THOUGHTS_KWARG_VERTEX in function_args
|
214
214
|
), f"Couldn't find inner thoughts in function args:\n{function_call}"
|
215
|
-
inner_thoughts = function_args.pop(
|
215
|
+
inner_thoughts = function_args.pop(INNER_THOUGHTS_KWARG_VERTEX)
|
216
216
|
assert inner_thoughts is not None, f"Expected non-null inner thoughts function arg:\n{function_call}"
|
217
217
|
else:
|
218
218
|
inner_thoughts = None
|
@@ -233,7 +233,7 @@ class GoogleVertexClient(GoogleAIClient):
|
|
233
233
|
],
|
234
234
|
)
|
235
235
|
|
236
|
-
except:
|
236
|
+
except json.decoder.JSONDecodeError:
|
237
237
|
# Inner thoughts are the content by default
|
238
238
|
inner_thoughts = response_message.text
|
239
239
|
|
letta/llm_api/openai.py
CHANGED
@@ -5,6 +5,7 @@ import requests
|
|
5
5
|
from openai import OpenAI
|
6
6
|
|
7
7
|
from letta.constants import LETTA_MODEL_ENDPOINT
|
8
|
+
from letta.errors import ErrorCode, LLMAuthenticationError, LLMError
|
8
9
|
from letta.helpers.datetime_helpers import timestamp_to_datetime
|
9
10
|
from letta.llm_api.helpers import add_inner_thoughts_to_functions, convert_to_structured_output, make_post_request
|
10
11
|
from letta.llm_api.openai_client import accepts_developer_role, supports_parallel_tool_calling, supports_temperature_param
|
@@ -34,6 +35,21 @@ from letta.utils import get_tool_call_id, smart_urljoin
|
|
34
35
|
logger = get_logger(__name__)
|
35
36
|
|
36
37
|
|
38
|
+
def openai_check_valid_api_key(base_url: str, api_key: Union[str, None]) -> None:
|
39
|
+
if api_key:
|
40
|
+
try:
|
41
|
+
# just get model list to check if the api key is valid until we find a cheaper / quicker endpoint
|
42
|
+
openai_get_model_list(url=base_url, api_key=api_key)
|
43
|
+
except requests.HTTPError as e:
|
44
|
+
if e.response.status_code == 401:
|
45
|
+
raise LLMAuthenticationError(message=f"Failed to authenticate with OpenAI: {e}", code=ErrorCode.UNAUTHENTICATED)
|
46
|
+
raise e
|
47
|
+
except Exception as e:
|
48
|
+
raise LLMError(message=f"{e}", code=ErrorCode.INTERNAL_SERVER_ERROR)
|
49
|
+
else:
|
50
|
+
raise ValueError("No API key provided")
|
51
|
+
|
52
|
+
|
37
53
|
def openai_get_model_list(
|
38
54
|
url: str, api_key: Optional[str] = None, fix_url: Optional[bool] = False, extra_params: Optional[dict] = None
|
39
55
|
) -> dict:
|
letta/schemas/enums.py
CHANGED
letta/schemas/providers.py
CHANGED
@@ -2,7 +2,7 @@ import warnings
|
|
2
2
|
from datetime import datetime
|
3
3
|
from typing import List, Literal, Optional
|
4
4
|
|
5
|
-
from pydantic import Field, model_validator
|
5
|
+
from pydantic import BaseModel, Field, model_validator
|
6
6
|
|
7
7
|
from letta.constants import LETTA_MODEL_ENDPOINT, LLM_MAX_TOKENS, MIN_CONTEXT_WINDOW
|
8
8
|
from letta.llm_api.azure_openai import get_azure_chat_completions_endpoint, get_azure_embeddings_endpoint
|
@@ -40,6 +40,10 @@ class Provider(ProviderBase):
|
|
40
40
|
if not self.id:
|
41
41
|
self.id = ProviderBase.generate_id(prefix=ProviderBase.__id_prefix__)
|
42
42
|
|
43
|
+
def check_api_key(self):
|
44
|
+
"""Check if the API key is valid for the provider"""
|
45
|
+
raise NotImplementedError
|
46
|
+
|
43
47
|
def list_llm_models(self) -> List[LLMConfig]:
|
44
48
|
return []
|
45
49
|
|
@@ -112,6 +116,11 @@ class ProviderUpdate(ProviderBase):
|
|
112
116
|
api_key: str = Field(..., description="API key used for requests to the provider.")
|
113
117
|
|
114
118
|
|
119
|
+
class ProviderCheck(BaseModel):
|
120
|
+
provider_type: ProviderType = Field(..., description="The type of the provider.")
|
121
|
+
api_key: str = Field(..., description="API key used for requests to the provider.")
|
122
|
+
|
123
|
+
|
115
124
|
class LettaProvider(Provider):
|
116
125
|
provider_type: Literal[ProviderType.letta] = Field(ProviderType.letta, description="The type of the provider.")
|
117
126
|
provider_category: ProviderCategory = Field(ProviderCategory.base, description="The category of the provider (base or byok)")
|
@@ -148,6 +157,11 @@ class OpenAIProvider(Provider):
|
|
148
157
|
api_key: str = Field(..., description="API key for the OpenAI API.")
|
149
158
|
base_url: str = Field(..., description="Base URL for the OpenAI API.")
|
150
159
|
|
160
|
+
def check_api_key(self):
|
161
|
+
from letta.llm_api.openai import openai_check_valid_api_key
|
162
|
+
|
163
|
+
openai_check_valid_api_key(self.base_url, self.api_key)
|
164
|
+
|
151
165
|
def list_llm_models(self) -> List[LLMConfig]:
|
152
166
|
from letta.llm_api.openai import openai_get_model_list
|
153
167
|
|
@@ -549,6 +563,11 @@ class AnthropicProvider(Provider):
|
|
549
563
|
api_key: str = Field(..., description="API key for the Anthropic API.")
|
550
564
|
base_url: str = "https://api.anthropic.com/v1"
|
551
565
|
|
566
|
+
def check_api_key(self):
|
567
|
+
from letta.llm_api.anthropic import anthropic_check_valid_api_key
|
568
|
+
|
569
|
+
anthropic_check_valid_api_key(self.api_key)
|
570
|
+
|
552
571
|
def list_llm_models(self) -> List[LLMConfig]:
|
553
572
|
from letta.llm_api.anthropic import MODEL_LIST, anthropic_get_model_list
|
554
573
|
|
@@ -951,6 +970,11 @@ class GoogleAIProvider(Provider):
|
|
951
970
|
api_key: str = Field(..., description="API key for the Google AI API.")
|
952
971
|
base_url: str = "https://generativelanguage.googleapis.com"
|
953
972
|
|
973
|
+
def check_api_key(self):
|
974
|
+
from letta.llm_api.google_ai_client import google_ai_check_valid_api_key
|
975
|
+
|
976
|
+
google_ai_check_valid_api_key(self.api_key)
|
977
|
+
|
954
978
|
def list_llm_models(self):
|
955
979
|
from letta.llm_api.google_ai_client import google_ai_get_model_list
|
956
980
|
|
@@ -3,9 +3,10 @@ from typing import TYPE_CHECKING, List, Optional
|
|
3
3
|
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status
|
4
4
|
from fastapi.responses import JSONResponse
|
5
5
|
|
6
|
+
from letta.errors import LLMAuthenticationError
|
6
7
|
from letta.orm.errors import NoResultFound
|
7
8
|
from letta.schemas.enums import ProviderType
|
8
|
-
from letta.schemas.providers import Provider, ProviderCreate, ProviderUpdate
|
9
|
+
from letta.schemas.providers import Provider, ProviderCheck, ProviderCreate, ProviderUpdate
|
9
10
|
from letta.server.rest_api.utils import get_letta_server
|
10
11
|
|
11
12
|
if TYPE_CHECKING:
|
@@ -47,7 +48,8 @@ def create_provider(
|
|
47
48
|
"""
|
48
49
|
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
49
50
|
|
50
|
-
provider =
|
51
|
+
provider = ProviderCreate(**request.model_dump())
|
52
|
+
|
51
53
|
provider = server.provider_manager.create_provider(provider, actor=actor)
|
52
54
|
return provider
|
53
55
|
|
@@ -63,7 +65,23 @@ def modify_provider(
|
|
63
65
|
Update an existing custom provider
|
64
66
|
"""
|
65
67
|
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
66
|
-
return server.provider_manager.update_provider(provider_id=provider_id,
|
68
|
+
return server.provider_manager.update_provider(provider_id=provider_id, provider_update=request, actor=actor)
|
69
|
+
|
70
|
+
|
71
|
+
@router.get("/check", response_model=None, operation_id="check_provider")
|
72
|
+
def check_provider(
|
73
|
+
provider_type: ProviderType = Query(...),
|
74
|
+
api_key: str = Header(..., alias="x-api-key"),
|
75
|
+
server: "SyncServer" = Depends(get_letta_server),
|
76
|
+
):
|
77
|
+
try:
|
78
|
+
provider_check = ProviderCheck(provider_type=provider_type, api_key=api_key)
|
79
|
+
server.provider_manager.check_provider_api_key(provider_check=provider_check)
|
80
|
+
return JSONResponse(status_code=status.HTTP_200_OK, content={"message": f"Valid api key for provider_type={provider_type.value}"})
|
81
|
+
except LLMAuthenticationError as e:
|
82
|
+
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=f"{e.message}")
|
83
|
+
except Exception as e:
|
84
|
+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"{e}")
|
67
85
|
|
68
86
|
|
69
87
|
@router.delete("/{provider_id}", response_model=None, operation_id="delete_provider")
|
@@ -3,7 +3,7 @@ from typing import List, Optional, Union
|
|
3
3
|
from letta.orm.provider import Provider as ProviderModel
|
4
4
|
from letta.schemas.enums import ProviderCategory, ProviderType
|
5
5
|
from letta.schemas.providers import Provider as PydanticProvider
|
6
|
-
from letta.schemas.providers import ProviderCreate, ProviderUpdate
|
6
|
+
from letta.schemas.providers import ProviderCheck, ProviderCreate, ProviderUpdate
|
7
7
|
from letta.schemas.user import User as PydanticUser
|
8
8
|
from letta.utils import enforce_types
|
9
9
|
|
@@ -99,3 +99,18 @@ class ProviderManager:
|
|
99
99
|
def get_override_key(self, provider_name: Union[str, None], actor: PydanticUser) -> Optional[str]:
|
100
100
|
providers = self.list_providers(name=provider_name, actor=actor)
|
101
101
|
return providers[0].api_key if providers else None
|
102
|
+
|
103
|
+
@enforce_types
|
104
|
+
def check_provider_api_key(self, provider_check: ProviderCheck) -> None:
|
105
|
+
provider = PydanticProvider(
|
106
|
+
name=provider_check.provider_type.value,
|
107
|
+
provider_type=provider_check.provider_type,
|
108
|
+
api_key=provider_check.api_key,
|
109
|
+
provider_category=ProviderCategory.byok,
|
110
|
+
).cast_to_subtype()
|
111
|
+
|
112
|
+
# TODO: add more string sanity checks here before we hit actual endpoints
|
113
|
+
if not provider.api_key:
|
114
|
+
raise ValueError("API key is required")
|
115
|
+
|
116
|
+
provider.check_api_key()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: letta-nightly
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.12.dev20250508044425
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
5
5
|
License: Apache License
|
6
6
|
Author: Letta Team
|
@@ -50,7 +50,7 @@ Requires-Dist: isort (>=5.13.2,<6.0.0) ; extra == "dev" or extra == "all"
|
|
50
50
|
Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
|
51
51
|
Requires-Dist: langchain (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
|
52
52
|
Requires-Dist: langchain-community (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
|
53
|
-
Requires-Dist: letta_client (>=0.1.
|
53
|
+
Requires-Dist: letta_client (>=0.1.141,<0.2.0)
|
54
54
|
Requires-Dist: llama-index (>=0.12.2,<0.13.0)
|
55
55
|
Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
|
56
56
|
Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "desktop" or extra == "all"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
letta/__init__.py,sha256=
|
1
|
+
letta/__init__.py,sha256=qYLzeNN1fIbaKf7rytyM_j256ng0pvDgtT9fPxM2bh4,916
|
2
2
|
letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
|
3
3
|
letta/agent.py,sha256=052xuXY4psY0BGDrtZ8XviOTpKhERSFrzKZnTsuIEvY,72125
|
4
4
|
letta/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -71,22 +71,22 @@ letta/jobs/llm_batch_job_polling.py,sha256=qy1-rkm9ehS_DaSz7pvcUmsueW8gug_kubnz8
|
|
71
71
|
letta/jobs/scheduler.py,sha256=VpRyO2vuETNrarHOIWYctAkrD4WFtV57buUSHaLE89Y,10240
|
72
72
|
letta/jobs/types.py,sha256=K8GKEnqEgAT6Kq4F2hUrBC4ZAFM9OkfOjVMStzxKuXQ,742
|
73
73
|
letta/llm_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
74
|
-
letta/llm_api/anthropic.py,sha256=
|
74
|
+
letta/llm_api/anthropic.py,sha256=bAk0WpQecz343rfQa1AUG3MI8WQPnE5LBueABje0mQM,46182
|
75
75
|
letta/llm_api/anthropic_client.py,sha256=Bk7_MjNpfDVPRBiU3xHsuRVkmGQhQYdhgsavuTjGI4M,24715
|
76
76
|
letta/llm_api/aws_bedrock.py,sha256=kAPpKPRe4ZUa6fkxFbo8xwQgq4fJf3QoZEAP1LOCfaw,4168
|
77
77
|
letta/llm_api/azure_openai.py,sha256=YAkXwKyfnJFNhB45pkJVFsoxUNB_M74rQYchtw_CN6I,5099
|
78
78
|
letta/llm_api/azure_openai_constants.py,sha256=ZaR2IasJThijG0uhLKJThrixdAxLPD2IojfeaJ-KQMQ,294
|
79
79
|
letta/llm_api/cohere.py,sha256=IZ6LXyOFMYjWHTeNG9lvFxCdV_NIl0hY2q9SPFYXNkQ,14849
|
80
80
|
letta/llm_api/deepseek.py,sha256=b1mSW8gnBrpAI8d2GcBpDyLYDnuC-P1UP6xJPalfQS4,12456
|
81
|
-
letta/llm_api/google_ai_client.py,sha256=
|
82
|
-
letta/llm_api/google_constants.py,sha256=
|
83
|
-
letta/llm_api/google_vertex_client.py,sha256=
|
81
|
+
letta/llm_api/google_ai_client.py,sha256=9sKAuu3qGYt7IVGTb7krEUcVeSsPEE6x0V-jRacSgCg,24471
|
82
|
+
letta/llm_api/google_constants.py,sha256=4PKWUNNbBHgHi4K5u9YaHr_8UC3fokfI6Qb6Dfpt4mU,693
|
83
|
+
letta/llm_api/google_vertex_client.py,sha256=fXG-wSrooENdFxI6ahLAEbVrEBzHpNCYPtka7PMJ7_g,16032
|
84
84
|
letta/llm_api/helpers.py,sha256=sLYv30UnKBRVPuhU_KDXfKFdbkUONiDAyVEwGr86l3A,16780
|
85
85
|
letta/llm_api/llm_api_tools.py,sha256=Ytq50foJNiO69rC7KasZWfU1ZU2DP6xiR_Z76MEwVoU,28387
|
86
86
|
letta/llm_api/llm_client.py,sha256=qJ92biZVCXyRESzZX3ODeMd-kcgkYtJGdp6oVjV7PBc,2074
|
87
87
|
letta/llm_api/llm_client_base.py,sha256=eID0J0l4VITZDL5765xEDvV8WLL4WzwQAzFEsC7ea6I,6067
|
88
88
|
letta/llm_api/mistral.py,sha256=fHdfD9ug-rQIk2qn8tRKay1U6w9maF11ryhKi91FfXM,1593
|
89
|
-
letta/llm_api/openai.py,sha256=
|
89
|
+
letta/llm_api/openai.py,sha256=KM70niO7i9hmr9agmhFvdk5D3GXWAmD9y82BqrHgijk,24583
|
90
90
|
letta/llm_api/openai_client.py,sha256=8WpEyfGojIiFkNQVVXV6dVkq1bHWMx3aXIqQA38ovAI,14203
|
91
91
|
letta/local_llm/README.md,sha256=hFJyw5B0TU2jrh9nb0zGZMgdH-Ei1dSRfhvPQG_NSoU,168
|
92
92
|
letta/local_llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -205,7 +205,7 @@ letta/schemas/agent.py,sha256=25AF730sVTSMtf2eslqitH682cn1Faq6apO2dOyRlDw,17868
|
|
205
205
|
letta/schemas/block.py,sha256=rMWflyj982qW86dQK-9saXBHKaLCu3aUG2gQTckG3Ik,4984
|
206
206
|
letta/schemas/embedding_config.py,sha256=ufboqW9ctSBJdhwzJRbrGtTzOTwSKfT0LY0mowpr6fs,3398
|
207
207
|
letta/schemas/embedding_config_overrides.py,sha256=lkTa4y-EQ2RnaEKtKDM0sEAk7EwNa67REw8DGNNtGQY,84
|
208
|
-
letta/schemas/enums.py,sha256=
|
208
|
+
letta/schemas/enums.py,sha256=0xDvvc6wJq2637hjg_DvkSYAgk6hrD8RxCalDoCvROM,1804
|
209
209
|
letta/schemas/environment_variables.py,sha256=VRtzOjdeQdHcSHXisk7oJUQlheruxhSWNS0xqlfGzbs,2429
|
210
210
|
letta/schemas/file.py,sha256=ChN2CWzLI2TT9WLItcfElEH0E8b7kzPylF2OQBr6Beg,1550
|
211
211
|
letta/schemas/group.py,sha256=0qFbCvE5gbdSAk1oXXT8xWQ02R4mS_jttJm0ASh8eCQ,6415
|
@@ -229,7 +229,7 @@ letta/schemas/openai/embedding_response.py,sha256=WKIZpXab1Av7v6sxKG8feW3ZtpQUNo
|
|
229
229
|
letta/schemas/openai/openai.py,sha256=Hilo5BiLAGabzxCwnwfzK5QrWqwYD8epaEKFa4Pwndk,7970
|
230
230
|
letta/schemas/organization.py,sha256=TXrHN4IBQnX-mWvRuCOH57XZSLYCVOY0wWm2_UzDQIA,1279
|
231
231
|
letta/schemas/passage.py,sha256=RG0vkaewEu4a_NAZM-FVyMammHjqpPP0RDYAdu27g6A,3723
|
232
|
-
letta/schemas/providers.py,sha256=
|
232
|
+
letta/schemas/providers.py,sha256=QhOhjBpgf356rTG57ht3hDE6jzJ4hXWAUGHul4kPvBA,53510
|
233
233
|
letta/schemas/response_format.py,sha256=pXNsjbtpA3Tf8HsDyIa40CSmoUbVR_7n2WOfQaX4aFs,2204
|
234
234
|
letta/schemas/run.py,sha256=SRqPRziINIiPunjOhE_NlbnQYgxTvqmbauni_yfBQRA,2085
|
235
235
|
letta/schemas/sandbox_config.py,sha256=Qfkzw422HCQUsE3GKry94oecQGziAzGXIyd6ke8W06M,5985
|
@@ -276,7 +276,7 @@ letta/server/rest_api/routers/v1/jobs.py,sha256=4oeJfI2odNGubU_g7WSORJhn_usFsbRa
|
|
276
276
|
letta/server/rest_api/routers/v1/llms.py,sha256=PZWNHq7QuKj71HzOIzNwLWgATqDQo54K26zzg9dLom0,1683
|
277
277
|
letta/server/rest_api/routers/v1/messages.py,sha256=KSGCpbSwt_Yse5jscTjYbHucDaVdKU1t72vAIH_IP4A,7700
|
278
278
|
letta/server/rest_api/routers/v1/organizations.py,sha256=r7rj-cA3shgAgM0b2JCMqjYsDIFv3ruZjU7SYbPGGqg,2831
|
279
|
-
letta/server/rest_api/routers/v1/providers.py,sha256=
|
279
|
+
letta/server/rest_api/routers/v1/providers.py,sha256=qp6XT20tcZac64XDGF2QUyLhselnShrRcTDQBHExEbQ,4322
|
280
280
|
letta/server/rest_api/routers/v1/runs.py,sha256=9nuJRjBtRgZPq3CiCEUA_3S2xPHFP5DsJxIenH5OO34,8847
|
281
281
|
letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=9hqnnMwJ3wCwO-Bezu3Xl8i3TDSIuInw3gSeHaKUXfE,8526
|
282
282
|
letta/server/rest_api/routers/v1/sources.py,sha256=F20RmcWg9lwFVj0-kF6iKUOm2YIft0j6xoNt0dqjpwc,11173
|
@@ -318,7 +318,7 @@ letta/services/message_manager.py,sha256=-TpbWU_6w1nlc2nfGKfyopyy8b-SSIiHqxIso6m
|
|
318
318
|
letta/services/organization_manager.py,sha256=Ax0KmPSc_YYsYaxeld9gc7ST-J6DemHQ542DD7l7AWA,3989
|
319
319
|
letta/services/passage_manager.py,sha256=YCmb_a80ECH5yq3Glj_Qra_mV6NqTc5oB6RfybHOL00,9992
|
320
320
|
letta/services/per_agent_lock_manager.py,sha256=porM0cKKANQ1FvcGXOO_qM7ARk5Fgi1HVEAhXsAg9-4,546
|
321
|
-
letta/services/provider_manager.py,sha256=
|
321
|
+
letta/services/provider_manager.py,sha256=BkCgTvdTjDq7YthEsyvnpPST4xbxFwrRbYuD50iMBm8,4827
|
322
322
|
letta/services/sandbox_config_manager.py,sha256=ATgZNWNpkdIQDUPy4ABsguHQba2PZf51-c4Ji60MzLE,13361
|
323
323
|
letta/services/source_manager.py,sha256=yW88wAJoeAWtbg0FxifE352jhgOTKNiG7K-IPKXKnvg,7961
|
324
324
|
letta/services/step_manager.py,sha256=B64iYn6Dt9yRKsSJ5vLxWQR2t-apvPLfUZyzrUsJTpI,5335
|
@@ -341,8 +341,8 @@ letta/streaming_utils.py,sha256=jLqFTVhUL76FeOuYk8TaRQHmPTf3HSRc2EoJwxJNK6U,1194
|
|
341
341
|
letta/system.py,sha256=mKxmvvekuP8mdgsebRINGBoFbUdJhxLJ260crPBNVyk,8386
|
342
342
|
letta/tracing.py,sha256=j9uyBbx02erQZ307XmZmZSNyzQt-d7ZDB7vhFhjDlsU,8448
|
343
343
|
letta/utils.py,sha256=IZFvtj9WYcrxUbkoUUYGDxMYQYdn5SgfqsvnARGsAzc,32245
|
344
|
-
letta_nightly-0.7.
|
345
|
-
letta_nightly-0.7.
|
346
|
-
letta_nightly-0.7.
|
347
|
-
letta_nightly-0.7.
|
348
|
-
letta_nightly-0.7.
|
344
|
+
letta_nightly-0.7.12.dev20250508044425.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
|
345
|
+
letta_nightly-0.7.12.dev20250508044425.dist-info/METADATA,sha256=XAu02Ri4r9AqY2yG4CYBafEQUPPoJEFhImTs_1zd3NA,22232
|
346
|
+
letta_nightly-0.7.12.dev20250508044425.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
347
|
+
letta_nightly-0.7.12.dev20250508044425.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
|
348
|
+
letta_nightly-0.7.12.dev20250508044425.dist-info/RECORD,,
|
File without changes
|
File without changes
|