@elizaos/python 2.0.0-alpha.27 → 2.0.0-alpha.30
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.
- package/elizaos/advanced_capabilities/actions/add_contact.py +4 -3
- package/elizaos/advanced_capabilities/actions/follow_room.py +2 -2
- package/elizaos/advanced_capabilities/actions/image_generation.py +2 -2
- package/elizaos/advanced_capabilities/actions/mute_room.py +2 -2
- package/elizaos/advanced_capabilities/actions/remove_contact.py +2 -2
- package/elizaos/advanced_capabilities/actions/roles.py +5 -4
- package/elizaos/advanced_capabilities/actions/search_contacts.py +3 -3
- package/elizaos/advanced_capabilities/actions/send_message.py +2 -2
- package/elizaos/advanced_capabilities/actions/settings.py +2 -2
- package/elizaos/advanced_capabilities/actions/unfollow_room.py +2 -2
- package/elizaos/advanced_capabilities/actions/unmute_room.py +2 -2
- package/elizaos/advanced_capabilities/actions/update_contact.py +2 -2
- package/elizaos/advanced_capabilities/actions/update_entity.py +2 -2
- package/elizaos/advanced_capabilities/providers/knowledge.py +8 -9
- package/elizaos/advanced_capabilities/services/rolodex.py +2 -2
- package/elizaos/advanced_memory/actions/reset_session.py +143 -11
- package/elizaos/advanced_memory/memory_service.py +54 -10
- package/elizaos/advanced_memory/plugin.py +2 -1
- package/elizaos/advanced_memory/types.py +2 -2
- package/elizaos/advanced_planning/actions/schedule_follow_up.py +2 -2
- package/elizaos/basic_capabilities/providers/contacts.py +1 -1
- package/elizaos/basic_capabilities/providers/follow_ups.py +1 -1
- package/elizaos/basic_capabilities/providers/knowledge.py +8 -9
- package/elizaos/basic_capabilities/providers/recent_messages.py +5 -0
- package/elizaos/basic_capabilities/providers/relationships.py +19 -13
- package/elizaos/basic_capabilities/services/embedding.py +10 -7
- package/elizaos/basic_capabilities/services/task.py +3 -3
- package/elizaos/bootstrap/actions/__init__.py +3 -0
- package/elizaos/bootstrap/actions/reset_session.py +3 -0
- package/elizaos/bootstrap/actions/roles.py +5 -4
- package/elizaos/bootstrap/providers/knowledge.py +8 -9
- package/elizaos/bootstrap/providers/recent_messages.py +5 -0
- package/elizaos/bootstrap/providers/relationships.py +19 -13
- package/elizaos/bootstrap/services/embedding.py +53 -10
- package/elizaos/bootstrap/services/rolodex.py +2 -2
- package/elizaos/bootstrap/services/task.py +3 -3
- package/elizaos/media/mime.py +2 -2
- package/elizaos/runtime.py +10 -9
- package/elizaos/services/hook_service.py +3 -3
- package/elizaos/types/generated/eliza/v1/agent_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/components_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/database_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/environment_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/events_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/ipc_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/knowledge_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/memory_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/message_service_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/messaging_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/model_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/payment_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/plugin_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/primitives_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/prompts_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/service_interfaces_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/service_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/settings_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/state_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/task_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/tee_pb2.py +4 -4
- package/elizaos/types/generated/eliza/v1/testing_pb2.py +4 -4
- package/elizaos/types/model.py +3 -3
- package/elizaos/types/primitives.py +3 -3
- package/elizaos/types/runtime.py +12 -2
- package/elizaos/types/state.py +2 -2
- package/elizaos/utils/streaming.py +3 -3
- package/package.json +3 -3
- package/pyproject.toml +1 -2
- package/requirements-dev.lock +2 -2
- package/requirements.in +1 -2
- package/requirements.lock +2 -2
- package/tests/test_history_compaction.py +104 -0
- package/tests/test_memory_bounds.py +115 -0
- package/tests/test_validation.py +1 -1
- package/uv.lock +10 -10
package/pyproject.toml
CHANGED
|
@@ -25,7 +25,7 @@ classifiers = [
|
|
|
25
25
|
dependencies = [
|
|
26
26
|
"pydantic>=2.12.5",
|
|
27
27
|
"pydantic-settings>=2.12.0",
|
|
28
|
-
"protobuf>=
|
|
28
|
+
"protobuf>=7.34.0",
|
|
29
29
|
"uuid6>=2024.1.12",
|
|
30
30
|
"aiohttp>=3.13.3",
|
|
31
31
|
"cryptography>=42.0.0",
|
|
@@ -140,4 +140,3 @@ known-first-party = ["elizaos"]
|
|
|
140
140
|
line-length = 100
|
|
141
141
|
target-version = ["py311"]
|
|
142
142
|
exclude = "elizaos/types/generated/"
|
|
143
|
-
|
package/requirements-dev.lock
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This file is autogenerated by pip-compile with Python 3.
|
|
2
|
+
# This file is autogenerated by pip-compile with Python 3.14
|
|
3
3
|
# by the following command:
|
|
4
4
|
#
|
|
5
5
|
# pip-compile --output-file=requirements-dev.lock requirements-dev.in
|
|
@@ -71,7 +71,7 @@ propcache==0.4.1
|
|
|
71
71
|
# via
|
|
72
72
|
# aiohttp
|
|
73
73
|
# yarl
|
|
74
|
-
protobuf==
|
|
74
|
+
protobuf==7.34.0
|
|
75
75
|
# via -r requirements.in
|
|
76
76
|
psutil==7.2.1
|
|
77
77
|
# via pytest-xprocess
|
package/requirements.in
CHANGED
package/requirements.lock
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This file is autogenerated by pip-compile with Python 3.
|
|
2
|
+
# This file is autogenerated by pip-compile with Python 3.14
|
|
3
3
|
# by the following command:
|
|
4
4
|
#
|
|
5
5
|
# pip-compile --output-file=requirements.lock requirements.in
|
|
@@ -32,7 +32,7 @@ propcache==0.4.1
|
|
|
32
32
|
# via
|
|
33
33
|
# aiohttp
|
|
34
34
|
# yarl
|
|
35
|
-
protobuf==
|
|
35
|
+
protobuf==7.34.0
|
|
36
36
|
# via -r requirements.in
|
|
37
37
|
pycparser==2.23
|
|
38
38
|
# via cffi
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from types import SimpleNamespace
|
|
5
|
+
from unittest.mock import AsyncMock
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from elizaos.advanced_memory.actions.reset_session import (
|
|
10
|
+
reset_session_action as advanced_reset_session_action,
|
|
11
|
+
)
|
|
12
|
+
from elizaos.basic_capabilities.providers.recent_messages import (
|
|
13
|
+
recent_messages_provider as basic_recent_messages_provider,
|
|
14
|
+
)
|
|
15
|
+
from elizaos.bootstrap.actions.reset_session import (
|
|
16
|
+
reset_session_action as bootstrap_reset_session_action,
|
|
17
|
+
)
|
|
18
|
+
from elizaos.bootstrap.providers.recent_messages import (
|
|
19
|
+
recent_messages_provider as bootstrap_recent_messages_provider,
|
|
20
|
+
)
|
|
21
|
+
from elizaos.types import Content, Memory, as_uuid
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass
|
|
25
|
+
class FakeRoom:
|
|
26
|
+
id: object
|
|
27
|
+
world_id: object | None
|
|
28
|
+
metadata: dict[str, object]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class FakeRuntime:
|
|
32
|
+
def __init__(self, room: FakeRoom, *, role: str = "OWNER") -> None:
|
|
33
|
+
self.room = room
|
|
34
|
+
self.updated_room: FakeRoom | None = None
|
|
35
|
+
self.get_room = AsyncMock(return_value=room)
|
|
36
|
+
self.update_room = AsyncMock(side_effect=self._update_room)
|
|
37
|
+
self.get_memories = AsyncMock(return_value=[])
|
|
38
|
+
self.get_entity = AsyncMock(return_value=SimpleNamespace(name="User"))
|
|
39
|
+
self.agent_id = as_uuid("91000000-0000-0000-0000-000000000001")
|
|
40
|
+
self.character = SimpleNamespace(name="CompactionAgent")
|
|
41
|
+
self.get_world = AsyncMock(
|
|
42
|
+
return_value=SimpleNamespace(
|
|
43
|
+
metadata={"roles": {"91000000-0000-0000-0000-000000000002": role}}
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
async def _update_room(self, room: FakeRoom) -> None:
|
|
48
|
+
self.updated_room = room
|
|
49
|
+
self.room = room
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _message() -> Memory:
|
|
53
|
+
return Memory(
|
|
54
|
+
id=as_uuid("91000000-0000-0000-0000-000000000010"),
|
|
55
|
+
entity_id=as_uuid("91000000-0000-0000-0000-000000000002"),
|
|
56
|
+
room_id=as_uuid("91000000-0000-0000-0000-000000000003"),
|
|
57
|
+
content=Content(text="start over", source="test"),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@pytest.mark.asyncio
|
|
62
|
+
@pytest.mark.parametrize(
|
|
63
|
+
"action_under_test",
|
|
64
|
+
[bootstrap_reset_session_action, advanced_reset_session_action],
|
|
65
|
+
)
|
|
66
|
+
async def test_reset_session_action_updates_room_metadata(action_under_test: object) -> None:
|
|
67
|
+
room = FakeRoom(
|
|
68
|
+
id=as_uuid("91000000-0000-0000-0000-000000000003"),
|
|
69
|
+
world_id=as_uuid("91000000-0000-0000-0000-000000000004"),
|
|
70
|
+
metadata={
|
|
71
|
+
"lastCompactionAt": 1000,
|
|
72
|
+
"compactionHistory": [{"timestamp": 1000, "triggeredBy": "old", "reason": "manual"}],
|
|
73
|
+
},
|
|
74
|
+
)
|
|
75
|
+
runtime = FakeRuntime(room)
|
|
76
|
+
|
|
77
|
+
result = await action_under_test.handler(runtime, _message(), None, None, None, None)
|
|
78
|
+
|
|
79
|
+
assert result.success is True
|
|
80
|
+
assert runtime.updated_room is not None
|
|
81
|
+
assert runtime.updated_room.metadata["lastCompactionAt"] >= 1000
|
|
82
|
+
assert len(runtime.updated_room.metadata["compactionHistory"]) == 2
|
|
83
|
+
assert result.values["previousCompactionAt"] == 1000
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@pytest.mark.asyncio
|
|
87
|
+
@pytest.mark.parametrize(
|
|
88
|
+
"provider_under_test",
|
|
89
|
+
[bootstrap_recent_messages_provider, basic_recent_messages_provider],
|
|
90
|
+
)
|
|
91
|
+
async def test_recent_messages_provider_uses_last_compaction_boundary(
|
|
92
|
+
provider_under_test: object,
|
|
93
|
+
) -> None:
|
|
94
|
+
room = FakeRoom(
|
|
95
|
+
id=as_uuid("91000000-0000-0000-0000-000000000003"),
|
|
96
|
+
world_id=None,
|
|
97
|
+
metadata={"lastCompactionAt": 4242},
|
|
98
|
+
)
|
|
99
|
+
runtime = FakeRuntime(room)
|
|
100
|
+
|
|
101
|
+
result = await provider_under_test.get(runtime, _message(), None)
|
|
102
|
+
|
|
103
|
+
assert result.values["roomId"] == str(_message().room_id)
|
|
104
|
+
assert runtime.get_memories.await_args.kwargs["start"] == 4242
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import uuid
|
|
4
|
+
from types import SimpleNamespace
|
|
5
|
+
from unittest.mock import AsyncMock, MagicMock
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from elizaos.advanced_memory.memory_service import MemoryService
|
|
10
|
+
from elizaos.advanced_memory.types import LongTermMemoryCategory
|
|
11
|
+
from elizaos.basic_capabilities.services.embedding import (
|
|
12
|
+
EmbeddingService as BasicEmbeddingService,
|
|
13
|
+
)
|
|
14
|
+
from elizaos.bootstrap.services.embedding import (
|
|
15
|
+
EmbeddingService as BootstrapEmbeddingService,
|
|
16
|
+
)
|
|
17
|
+
from elizaos.types import ModelType
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _mock_runtime() -> MagicMock:
|
|
21
|
+
runtime = MagicMock()
|
|
22
|
+
runtime.agent_id = uuid.uuid4()
|
|
23
|
+
runtime.logger = MagicMock()
|
|
24
|
+
|
|
25
|
+
async def use_model(model_type, **_kwargs):
|
|
26
|
+
if model_type == ModelType.TEXT_EMBEDDING:
|
|
27
|
+
return [0.1, 0.2, 0.3]
|
|
28
|
+
return "ok"
|
|
29
|
+
|
|
30
|
+
runtime.use_model = AsyncMock(side_effect=use_model)
|
|
31
|
+
return runtime
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@pytest.mark.asyncio
|
|
35
|
+
async def test_embedding_services_use_lru_eviction() -> None:
|
|
36
|
+
for service_cls in (BasicEmbeddingService, BootstrapEmbeddingService):
|
|
37
|
+
runtime = _mock_runtime()
|
|
38
|
+
service = service_cls()
|
|
39
|
+
service._runtime = runtime
|
|
40
|
+
service.set_max_cache_size(2)
|
|
41
|
+
|
|
42
|
+
await service.embed("a")
|
|
43
|
+
await service.embed("b")
|
|
44
|
+
await service.embed("a")
|
|
45
|
+
await service.embed("c")
|
|
46
|
+
|
|
47
|
+
assert list(service._cache.keys()) == ["a", "c"]
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@pytest.mark.asyncio
|
|
51
|
+
async def test_bootstrap_embedding_queue_deduplicates_and_clears_on_stop() -> None:
|
|
52
|
+
service = BootstrapEmbeddingService()
|
|
53
|
+
service._runtime = _mock_runtime()
|
|
54
|
+
|
|
55
|
+
payload = SimpleNamespace(extra={"memory": {"id": "memory-1"}})
|
|
56
|
+
|
|
57
|
+
await service._handle_embedding_request(payload)
|
|
58
|
+
await service._handle_embedding_request(payload)
|
|
59
|
+
|
|
60
|
+
assert service._queue.qsize() == 1
|
|
61
|
+
assert service._pending_payload_keys == {"memory-1"}
|
|
62
|
+
|
|
63
|
+
await service.stop()
|
|
64
|
+
|
|
65
|
+
assert service._queue.qsize() == 0
|
|
66
|
+
assert service._pending_payload_keys == set()
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@pytest.mark.asyncio
|
|
70
|
+
async def test_advanced_memory_fallback_storage_is_bounded() -> None:
|
|
71
|
+
service = MemoryService(runtime=None)
|
|
72
|
+
agent_id = uuid.uuid4()
|
|
73
|
+
|
|
74
|
+
for index in range(service._MAX_LOCAL_SESSION_SUMMARIES + 25):
|
|
75
|
+
await service.store_session_summary(
|
|
76
|
+
agent_id=agent_id,
|
|
77
|
+
room_id=uuid.uuid4(),
|
|
78
|
+
summary=f"summary-{index}",
|
|
79
|
+
message_count=index,
|
|
80
|
+
last_message_offset=index,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
assert len(service._session_summaries) == service._MAX_LOCAL_SESSION_SUMMARIES
|
|
84
|
+
|
|
85
|
+
for index in range(service._MAX_LOCAL_EXTRACTION_CHECKPOINTS + 25):
|
|
86
|
+
await service.set_last_extraction_checkpoint(uuid.uuid4(), uuid.uuid4(), index)
|
|
87
|
+
|
|
88
|
+
assert len(service._extraction_checkpoints) == service._MAX_LOCAL_EXTRACTION_CHECKPOINTS
|
|
89
|
+
|
|
90
|
+
for _ in range(service._MAX_LOCAL_LONG_TERM_ENTITIES + 25):
|
|
91
|
+
entity_id = uuid.uuid4()
|
|
92
|
+
await service.store_long_term_memory(
|
|
93
|
+
agent_id=agent_id,
|
|
94
|
+
entity_id=entity_id,
|
|
95
|
+
category=LongTermMemoryCategory.SEMANTIC,
|
|
96
|
+
content=f"entity-{entity_id}",
|
|
97
|
+
confidence=0.9,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
assert len(service._long_term) == service._MAX_LOCAL_LONG_TERM_ENTITIES
|
|
101
|
+
|
|
102
|
+
hot_entity_id = uuid.uuid4()
|
|
103
|
+
for index in range(service._MAX_LOCAL_LONG_TERM_PER_ENTITY + 25):
|
|
104
|
+
await service.store_long_term_memory(
|
|
105
|
+
agent_id=agent_id,
|
|
106
|
+
entity_id=hot_entity_id,
|
|
107
|
+
category=LongTermMemoryCategory.SEMANTIC,
|
|
108
|
+
content=f"fact-{index}",
|
|
109
|
+
confidence=float(index),
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
retained = service._long_term[str(hot_entity_id)]
|
|
113
|
+
assert len(retained) == service._MAX_LOCAL_LONG_TERM_PER_ENTITY
|
|
114
|
+
assert retained[0].content == "fact-25"
|
|
115
|
+
assert retained[-1].content == f"fact-{service._MAX_LOCAL_LONG_TERM_PER_ENTITY + 24}"
|
package/tests/test_validation.py
CHANGED
|
@@ -128,7 +128,7 @@ def test_validate_action_regex():
|
|
|
128
128
|
|
|
129
129
|
# Unicode characters
|
|
130
130
|
msg = create_mock_memory("Transfer 100 €")
|
|
131
|
-
assert not validate_action_regex(msg, [], r"transfer \d+ €")
|
|
131
|
+
assert not validate_action_regex(msg, [], r"transfer \d+ €") # case sensitive
|
|
132
132
|
assert validate_action_regex(msg, [], r"(?i)transfer \d+ €")
|
|
133
133
|
|
|
134
134
|
# Special characters
|
package/uv.lock
CHANGED
|
@@ -485,7 +485,7 @@ requires-dist = [
|
|
|
485
485
|
{ name = "isort", marker = "extra == 'dev'", specifier = ">=5.13.0" },
|
|
486
486
|
{ name = "mypy", marker = "extra == 'dev'", specifier = ">=1.19.1" },
|
|
487
487
|
{ name = "pip-tools", marker = "extra == 'dev'", specifier = ">=7.4.1" },
|
|
488
|
-
{ name = "protobuf", specifier = ">=
|
|
488
|
+
{ name = "protobuf", specifier = ">=7.34.0" },
|
|
489
489
|
{ name = "pydantic", specifier = ">=2.12.5" },
|
|
490
490
|
{ name = "pydantic-settings", specifier = ">=2.12.0" },
|
|
491
491
|
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.2" },
|
|
@@ -1022,17 +1022,17 @@ wheels = [
|
|
|
1022
1022
|
|
|
1023
1023
|
[[package]]
|
|
1024
1024
|
name = "protobuf"
|
|
1025
|
-
version = "
|
|
1025
|
+
version = "7.34.0"
|
|
1026
1026
|
source = { registry = "https://pypi.org/simple" }
|
|
1027
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1027
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f2/00/04a2ab36b70a52d0356852979e08b44edde0435f2115dc66e25f2100f3ab/protobuf-7.34.0.tar.gz", hash = "sha256:3871a3df67c710aaf7bb8d214cc997342e63ceebd940c8c7fc65c9b3d697591a", size = 454726, upload-time = "2026-02-27T00:30:25.421Z" }
|
|
1028
1028
|
wheels = [
|
|
1029
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1030
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1031
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1032
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1033
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1034
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1035
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1029
|
+
{ url = "https://files.pythonhosted.org/packages/13/c4/6322ab5c8f279c4c358bc14eb8aefc0550b97222a39f04eb3c1af7a830fa/protobuf-7.34.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e329966799f2c271d5e05e236459fe1cbfdb8755aaa3b0914fa60947ddea408", size = 429248, upload-time = "2026-02-27T00:30:14.924Z" },
|
|
1030
|
+
{ url = "https://files.pythonhosted.org/packages/45/99/b029bbbc61e8937545da5b79aa405ab2d9cf307a728f8c9459ad60d7a481/protobuf-7.34.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:9d7a5005fb96f3c1e64f397f91500b0eb371b28da81296ae73a6b08a5b76cdd6", size = 325753, upload-time = "2026-02-27T00:30:17.247Z" },
|
|
1031
|
+
{ url = "https://files.pythonhosted.org/packages/cc/79/09f02671eb75b251c5550a1c48e7b3d4b0623efd7c95a15a50f6f9fc1e2e/protobuf-7.34.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4a72a8ec94e7a9f7ef7fe818ed26d073305f347f8b3b5ba31e22f81fd85fca02", size = 340200, upload-time = "2026-02-27T00:30:18.672Z" },
|
|
1032
|
+
{ url = "https://files.pythonhosted.org/packages/b5/57/89727baef7578897af5ed166735ceb315819f1c184da8c3441271dbcfde7/protobuf-7.34.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:964cf977e07f479c0697964e83deda72bcbc75c3badab506fb061b352d991b01", size = 324268, upload-time = "2026-02-27T00:30:20.088Z" },
|
|
1033
|
+
{ url = "https://files.pythonhosted.org/packages/1f/3e/38ff2ddee5cc946f575c9d8cc822e34bde205cf61acf8099ad88ef19d7d2/protobuf-7.34.0-cp310-abi3-win32.whl", hash = "sha256:f791ec509707a1d91bd02e07df157e75e4fb9fbdad12a81b7396201ec244e2e3", size = 426628, upload-time = "2026-02-27T00:30:21.555Z" },
|
|
1034
|
+
{ url = "https://files.pythonhosted.org/packages/cb/71/7c32eaf34a61a1bae1b62a2ac4ffe09b8d1bb0cf93ad505f42040023db89/protobuf-7.34.0-cp310-abi3-win_amd64.whl", hash = "sha256:9f9079f1dde4e32342ecbd1c118d76367090d4aaa19da78230c38101c5b3dd40", size = 437901, upload-time = "2026-02-27T00:30:22.836Z" },
|
|
1035
|
+
{ url = "https://files.pythonhosted.org/packages/a4/e7/14dc9366696dcb53a413449881743426ed289d687bcf3d5aee4726c32ebb/protobuf-7.34.0-py3-none-any.whl", hash = "sha256:e3b914dd77fa33fa06ab2baa97937746ab25695f389869afdf03e81f34e45dc7", size = 170716, upload-time = "2026-02-27T00:30:23.994Z" },
|
|
1036
1036
|
]
|
|
1037
1037
|
|
|
1038
1038
|
[[package]]
|