swiftpy-framework 0.1.0__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.
- swiftpy/.gitignore +0 -0
- swiftpy/__init__.py +572 -0
- swiftpy/admin/__init__.py +50 -0
- swiftpy/admin/auth.py +522 -0
- swiftpy/admin/registry.py +567 -0
- swiftpy/admin/views.py +1583 -0
- swiftpy/ai/__init__.py +199 -0
- swiftpy/ai/_deterministic.py +40 -0
- swiftpy/ai/_fake.py +604 -0
- swiftpy/ai/agents/__init__.py +30 -0
- swiftpy/ai/agents/base_agent.py +506 -0
- swiftpy/ai/agents/memory.py +864 -0
- swiftpy/ai/client.py +1011 -0
- swiftpy/ai/conversation.py +171 -0
- swiftpy/ai/embeddings.py +321 -0
- swiftpy/ai/exceptions.py +75 -0
- swiftpy/ai/history_strategies.py +157 -0
- swiftpy/ai/middleware.py +918 -0
- swiftpy/ai/observability/__init__.py +28 -0
- swiftpy/ai/observability/drivers.py +763 -0
- swiftpy/ai/observability/observer.py +364 -0
- swiftpy/ai/pool.py +102 -0
- swiftpy/ai/pricing.py +101 -0
- swiftpy/ai/prompts/__init__.py +6 -0
- swiftpy/ai/prompts/loader.py +343 -0
- swiftpy/ai/providers/__init__.py +22 -0
- swiftpy/ai/providers/anthropic_provider.py +353 -0
- swiftpy/ai/providers/base.py +273 -0
- swiftpy/ai/providers/openai_provider.py +275 -0
- swiftpy/ai/rag/__init__.py +53 -0
- swiftpy/ai/rag/context_formatter.py +263 -0
- swiftpy/ai/rag/pipeline_builder.py +544 -0
- swiftpy/ai/rag/reranker.py +484 -0
- swiftpy/ai/rag/result.py +78 -0
- swiftpy/ai/rag/retriever.py +315 -0
- swiftpy/ai/redis_store.py +227 -0
- swiftpy/ai/streaming.py +115 -0
- swiftpy/ai/tools/__init__.py +22 -0
- swiftpy/ai/tools/base_tool.py +489 -0
- swiftpy/ai/tools/first_party.py +384 -0
- swiftpy/ai/tools/tool_loop.py +417 -0
- swiftpy/ai/vectorstore/__init__.py +46 -0
- swiftpy/ai/vectorstore/base.py +542 -0
- swiftpy/ai/vectorstore/chroma_adapter.py +435 -0
- swiftpy/ai/vectorstore/in_memory_adapter.py +321 -0
- swiftpy/ai/vectorstore/lancedb_adapter.py +370 -0
- swiftpy/ai/vectorstore/pgvector_adapter.py +496 -0
- swiftpy/ai/vectorstore/pinecone_adapter.py +445 -0
- swiftpy/ai/vectorstore/qdrant_adapter.py +418 -0
- swiftpy/auth/__init__.py +50 -0
- swiftpy/auth/api_key_guard.py +544 -0
- swiftpy/auth/auth_manager.py +259 -0
- swiftpy/auth/exceptions.py +71 -0
- swiftpy/auth/jwt_guard.py +230 -0
- swiftpy/auth/jwt_issuer.py +658 -0
- swiftpy/auth/token_blacklist.py +300 -0
- swiftpy/cache/__init__.py +14 -0
- swiftpy/cache/cache.py +251 -0
- swiftpy/cache/driver.py +216 -0
- swiftpy/cache/drivers/memory.py +199 -0
- swiftpy/cache/drivers/redis.py +421 -0
- swiftpy/console/__init__.py +0 -0
- swiftpy/console/cli.py +68 -0
- swiftpy/console/commands/__init__.py +0 -0
- swiftpy/console/commands/cache.py +164 -0
- swiftpy/console/commands/make.py +935 -0
- swiftpy/console/commands/migrate.py +280 -0
- swiftpy/console/commands/new.py +1806 -0
- swiftpy/console/commands/queue.py +306 -0
- swiftpy/console/commands/seed.py +252 -0
- swiftpy/console/commands/start.py +171 -0
- swiftpy/console/commands/storage.py +104 -0
- swiftpy/console/loader.py +21 -0
- swiftpy/console/stubs/__init__.py +26 -0
- swiftpy/console/stubs/controller.stub +14 -0
- swiftpy/console/stubs/event.stub +14 -0
- swiftpy/console/stubs/job.stub +22 -0
- swiftpy/console/stubs/listener.stub +14 -0
- swiftpy/console/stubs/mail.stub +20 -0
- swiftpy/console/stubs/middleware.stub +16 -0
- swiftpy/console/stubs/migration.alter.stub +17 -0
- swiftpy/console/stubs/migration.api_keys.stub +22 -0
- swiftpy/console/stubs/migration.blank.stub +11 -0
- swiftpy/console/stubs/migration.create.stub +15 -0
- swiftpy/console/stubs/migration.stub +11 -0
- swiftpy/console/stubs/migration.update.stub +17 -0
- swiftpy/console/stubs/model.stub +17 -0
- swiftpy/console/stubs/provider.stub +18 -0
- swiftpy/console/stubs/repository.stub +10 -0
- swiftpy/console/stubs/request.stub +16 -0
- swiftpy/console/stubs/resource.stub +21 -0
- swiftpy/console/stubs/schema.stub +12 -0
- swiftpy/console/stubs/seeder.stub +14 -0
- swiftpy/console/stubs/service.stub +10 -0
- swiftpy/core/__init__.py +0 -0
- swiftpy/core/application.py +1306 -0
- swiftpy/core/bootstrap.py +30 -0
- swiftpy/core/config.py +432 -0
- swiftpy/core/container.py +596 -0
- swiftpy/core/container_exceptions.py +18 -0
- swiftpy/core/context.py +148 -0
- swiftpy/core/exceptions.py +352 -0
- swiftpy/core/providers/base.py +35 -0
- swiftpy/database/__init__.py +41 -0
- swiftpy/database/exceptions.py +42 -0
- swiftpy/database/identifiers.py +105 -0
- swiftpy/database/migrations/__init__.py +36 -0
- swiftpy/database/migrations/blueprint.py +431 -0
- swiftpy/database/migrations/lock.py +104 -0
- swiftpy/database/migrations/migration.py +22 -0
- swiftpy/database/migrations/migrator.py +507 -0
- swiftpy/database/migrations/schema.py +435 -0
- swiftpy/database/orm/__init__.py +33 -0
- swiftpy/database/orm/fields.py +92 -0
- swiftpy/database/orm/model.py +2034 -0
- swiftpy/database/orm/registry.py +33 -0
- swiftpy/database/orm/relationships.py +836 -0
- swiftpy/database/pagination/__init__.py +16 -0
- swiftpy/database/pagination/contracts.py +60 -0
- swiftpy/database/pagination/paginator.py +112 -0
- swiftpy/database/pagination/simple_paginator.py +97 -0
- swiftpy/database/pool.py +218 -0
- swiftpy/database/query_builder.py +1803 -0
- swiftpy/database/seeder.py +39 -0
- swiftpy/database/transaction.py +276 -0
- swiftpy/events/__init__.py +10 -0
- swiftpy/events/dispatcher.py +308 -0
- swiftpy/events/redis_bus.py +552 -0
- swiftpy/filesystem/__init__.py +227 -0
- swiftpy/filesystem/disk.py +378 -0
- swiftpy/filesystem/drivers/__init__.py +11 -0
- swiftpy/filesystem/drivers/base.py +156 -0
- swiftpy/filesystem/drivers/local.py +559 -0
- swiftpy/filesystem/drivers/s3.py +655 -0
- swiftpy/filesystem/events.py +37 -0
- swiftpy/filesystem/exceptions.py +127 -0
- swiftpy/filesystem/manager.py +138 -0
- swiftpy/filesystem/metadata.py +22 -0
- swiftpy/filesystem/paths.py +99 -0
- swiftpy/filesystem/service_provider.py +17 -0
- swiftpy/filesystem/uploads/__init__.py +13 -0
- swiftpy/filesystem/uploads/handlers.py +362 -0
- swiftpy/filesystem/uploads/uploaded_file.py +222 -0
- swiftpy/filesystem/uploads/validators.py +186 -0
- swiftpy/filesystem/visibility.py +22 -0
- swiftpy/helpers/__init__.py +42 -0
- swiftpy/helpers/helper.py +180 -0
- swiftpy/http/exceptions.py +41 -0
- swiftpy/http/middleware.py +307 -0
- swiftpy/http/request.py +375 -0
- swiftpy/http/response.py +442 -0
- swiftpy/http/router.py +1050 -0
- swiftpy/mail/__init__.py +58 -0
- swiftpy/mail/attachments.py +255 -0
- swiftpy/mail/config.py +71 -0
- swiftpy/mail/envelope.py +183 -0
- swiftpy/mail/exceptions.py +90 -0
- swiftpy/mail/facade.py +312 -0
- swiftpy/mail/mailable.py +53 -0
- swiftpy/mail/manager.py +240 -0
- swiftpy/mail/message.py +186 -0
- swiftpy/mail/models.py +19 -0
- swiftpy/mail/queue/__init__.py +5 -0
- swiftpy/mail/queue/job.py +279 -0
- swiftpy/mail/service_provider.py +19 -0
- swiftpy/mail/templates/__init__.py +5 -0
- swiftpy/mail/templates/renderer.py +173 -0
- swiftpy/mail/transports/__init__.py +21 -0
- swiftpy/mail/transports/api/__init__.py +13 -0
- swiftpy/mail/transports/api/base.py +194 -0
- swiftpy/mail/transports/api/mailgun.py +158 -0
- swiftpy/mail/transports/api/resend.py +156 -0
- swiftpy/mail/transports/api/sendgrid.py +172 -0
- swiftpy/mail/transports/base.py +24 -0
- swiftpy/mail/transports/console.py +91 -0
- swiftpy/mail/transports/sendmail.py +128 -0
- swiftpy/mail/transports/smtp.py +466 -0
- swiftpy/queue/__init__.py +13 -0
- swiftpy/queue/dispatcher.py +813 -0
- swiftpy/queue/job.py +541 -0
- swiftpy/queue/worker.py +556 -0
- swiftpy/support/__init__.py +12 -0
- swiftpy/support/keys.py +108 -0
- swiftpy/support/redis_config.py +223 -0
- swiftpy/support/strings.py +114 -0
- swiftpy/testing/__init__.py +20 -0
- swiftpy/testing/fakes/__init__.py +11 -0
- swiftpy/testing/fakes/ai_fake.py +21 -0
- swiftpy/testing/fakes/vectorstore_fake.py +194 -0
- swiftpy/testing/fixtures.py +124 -0
- swiftpy/testing/http_client.py +730 -0
- swiftpy/testing/test_case.py +126 -0
- swiftpy/validation/__init__.py +97 -0
- swiftpy/validation/exceptions.py +26 -0
- swiftpy/validation/form_request.py +302 -0
- swiftpy/validation/protocols.py +33 -0
- swiftpy/validation/rules/__init__.py +89 -0
- swiftpy/validation/rules/builtin.py +391 -0
- swiftpy/validation/rules/exists.py +86 -0
- swiftpy/validation/rules/registry.py +290 -0
- swiftpy/validation/rules/required.py +55 -0
- swiftpy/validation/rules/unique.py +138 -0
- swiftpy/validation/validator.py +612 -0
- swiftpy/websockets/__init__.py +19 -0
- swiftpy/websockets/connection.py +317 -0
- swiftpy/websockets/manager.py +271 -0
- swiftpy_framework-0.1.0.dist-info/METADATA +603 -0
- swiftpy_framework-0.1.0.dist-info/RECORD +211 -0
- swiftpy_framework-0.1.0.dist-info/WHEEL +4 -0
- swiftpy_framework-0.1.0.dist-info/entry_points.txt +2 -0
- swiftpy_framework-0.1.0.dist-info/licenses/LICENSE +21 -0
swiftpy/ai/__init__.py
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from swiftpy.ai.agents import (
|
|
4
|
+
Agent,
|
|
5
|
+
AgentMemory,
|
|
6
|
+
AgentResponse,
|
|
7
|
+
AgentTask,
|
|
8
|
+
BaseAgent,
|
|
9
|
+
BaseMemoryBackend,
|
|
10
|
+
DatabaseMemoryBackend,
|
|
11
|
+
InMemoryMemoryBackend,
|
|
12
|
+
RedisMemoryBackend,
|
|
13
|
+
)
|
|
14
|
+
from swiftpy.ai.client import AI, AIClient, ai
|
|
15
|
+
from swiftpy.ai.conversation import Conversation
|
|
16
|
+
from swiftpy.ai.embeddings import (
|
|
17
|
+
EmbeddingsClient,
|
|
18
|
+
generate_deterministic_embedding,
|
|
19
|
+
)
|
|
20
|
+
from swiftpy.ai.exceptions import (
|
|
21
|
+
AgentLoopError,
|
|
22
|
+
AIAuthenticationError,
|
|
23
|
+
AIBudgetExceededError,
|
|
24
|
+
AIConfigurationError,
|
|
25
|
+
AIConnectionError,
|
|
26
|
+
AIContentModerationError,
|
|
27
|
+
AIError,
|
|
28
|
+
AIModuleDisabledError,
|
|
29
|
+
AIProviderError,
|
|
30
|
+
AIRateLimitError,
|
|
31
|
+
)
|
|
32
|
+
from swiftpy.ai.history_strategies import (
|
|
33
|
+
HistoryStrategy,
|
|
34
|
+
SlidingWindowStrategy,
|
|
35
|
+
TokenBudgetStrategy,
|
|
36
|
+
)
|
|
37
|
+
from swiftpy.ai.middleware import (
|
|
38
|
+
AIMiddleware,
|
|
39
|
+
AIMiddlewarePipeline,
|
|
40
|
+
AIRateLimitMiddleware,
|
|
41
|
+
ContentModerationMiddleware,
|
|
42
|
+
TokenBudgetMiddleware,
|
|
43
|
+
)
|
|
44
|
+
from swiftpy.ai.observability import (
|
|
45
|
+
AIObservabilityManager,
|
|
46
|
+
AIObservation,
|
|
47
|
+
BaseObservabilityDriver,
|
|
48
|
+
DatabaseObservabilityDriver,
|
|
49
|
+
FileObservabilityDriver,
|
|
50
|
+
InMemoryObservabilityDriver,
|
|
51
|
+
ObservationContext,
|
|
52
|
+
compute_prompt_hash,
|
|
53
|
+
get_observability,
|
|
54
|
+
)
|
|
55
|
+
from swiftpy.ai.pool import AIHttpPool
|
|
56
|
+
from swiftpy.ai.pricing import (
|
|
57
|
+
calculate_token_cost,
|
|
58
|
+
register_model_pricing,
|
|
59
|
+
)
|
|
60
|
+
from swiftpy.ai.prompts import (
|
|
61
|
+
PromptLoader,
|
|
62
|
+
load_prompt,
|
|
63
|
+
)
|
|
64
|
+
from swiftpy.ai.providers.base import (
|
|
65
|
+
LLMRequest,
|
|
66
|
+
LLMResponse,
|
|
67
|
+
Message,
|
|
68
|
+
ProviderInterface,
|
|
69
|
+
TokenUsage,
|
|
70
|
+
ToolCall,
|
|
71
|
+
ToolResult,
|
|
72
|
+
)
|
|
73
|
+
from swiftpy.ai.rag import (
|
|
74
|
+
BaseReranker,
|
|
75
|
+
CohereReranker,
|
|
76
|
+
ContextFormatter,
|
|
77
|
+
CrossEncoderReranker,
|
|
78
|
+
NumberedListFormatter,
|
|
79
|
+
PlainConcatenationFormatter,
|
|
80
|
+
RAGPipelineBuilder,
|
|
81
|
+
RAGResult,
|
|
82
|
+
Retriever,
|
|
83
|
+
XMLBlocksFormatter,
|
|
84
|
+
rag,
|
|
85
|
+
)
|
|
86
|
+
from swiftpy.ai.redis_store import (
|
|
87
|
+
ConversationStore,
|
|
88
|
+
InMemoryConversationStore,
|
|
89
|
+
RedisConversationStore,
|
|
90
|
+
)
|
|
91
|
+
from swiftpy.ai.streaming import parse_sse_events
|
|
92
|
+
from swiftpy.ai.tools import (
|
|
93
|
+
BaseTool,
|
|
94
|
+
CalculatorTool,
|
|
95
|
+
DateTimeTool,
|
|
96
|
+
FunctionTool,
|
|
97
|
+
ToolLoop,
|
|
98
|
+
WebSearchTool,
|
|
99
|
+
tool,
|
|
100
|
+
)
|
|
101
|
+
from swiftpy.ai.vectorstore import (
|
|
102
|
+
ChromaAdapter,
|
|
103
|
+
InMemoryVectorStore,
|
|
104
|
+
LanceDbAdapter,
|
|
105
|
+
PgVectorAdapter,
|
|
106
|
+
PineconeAdapter,
|
|
107
|
+
QdrantAdapter,
|
|
108
|
+
SearchResult,
|
|
109
|
+
VectorRecord,
|
|
110
|
+
VectorStore,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
__all__ = [
|
|
114
|
+
"AI",
|
|
115
|
+
"AIAuthenticationError",
|
|
116
|
+
"AIBudgetExceededError",
|
|
117
|
+
"AIClient",
|
|
118
|
+
"AIConfigurationError",
|
|
119
|
+
"AIConnectionError",
|
|
120
|
+
"AIContentModerationError",
|
|
121
|
+
"AIError",
|
|
122
|
+
"AIHttpPool",
|
|
123
|
+
"AIMiddleware",
|
|
124
|
+
"AIMiddlewarePipeline",
|
|
125
|
+
"AIModuleDisabledError",
|
|
126
|
+
"AIObservabilityManager",
|
|
127
|
+
"AIObservation",
|
|
128
|
+
"AIProviderError",
|
|
129
|
+
"AIRateLimitError",
|
|
130
|
+
"AIRateLimitMiddleware",
|
|
131
|
+
"Agent",
|
|
132
|
+
"AgentLoopError",
|
|
133
|
+
"AgentMemory",
|
|
134
|
+
"AgentResponse",
|
|
135
|
+
"AgentTask",
|
|
136
|
+
"BaseAgent",
|
|
137
|
+
"BaseMemoryBackend",
|
|
138
|
+
"BaseObservabilityDriver",
|
|
139
|
+
"BaseReranker",
|
|
140
|
+
"BaseTool",
|
|
141
|
+
"CalculatorTool",
|
|
142
|
+
"ChromaAdapter",
|
|
143
|
+
"CohereReranker",
|
|
144
|
+
"ContentModerationMiddleware",
|
|
145
|
+
"ContextFormatter",
|
|
146
|
+
"Conversation",
|
|
147
|
+
"ConversationStore",
|
|
148
|
+
"CrossEncoderReranker",
|
|
149
|
+
"DatabaseMemoryBackend",
|
|
150
|
+
"DatabaseObservabilityDriver",
|
|
151
|
+
"DateTimeTool",
|
|
152
|
+
"EmbeddingsClient",
|
|
153
|
+
"FileObservabilityDriver",
|
|
154
|
+
"FunctionTool",
|
|
155
|
+
"HistoryStrategy",
|
|
156
|
+
"InMemoryConversationStore",
|
|
157
|
+
"InMemoryMemoryBackend",
|
|
158
|
+
"InMemoryObservabilityDriver",
|
|
159
|
+
"InMemoryVectorStore",
|
|
160
|
+
"LLMRequest",
|
|
161
|
+
"LLMResponse",
|
|
162
|
+
"LanceDbAdapter",
|
|
163
|
+
"Message",
|
|
164
|
+
"NumberedListFormatter",
|
|
165
|
+
"ObservationContext",
|
|
166
|
+
"PgVectorAdapter",
|
|
167
|
+
"PineconeAdapter",
|
|
168
|
+
"PlainConcatenationFormatter",
|
|
169
|
+
"PromptLoader",
|
|
170
|
+
"ProviderInterface",
|
|
171
|
+
"QdrantAdapter",
|
|
172
|
+
"RAGPipelineBuilder",
|
|
173
|
+
"RAGResult",
|
|
174
|
+
"RedisConversationStore",
|
|
175
|
+
"RedisMemoryBackend",
|
|
176
|
+
"Retriever",
|
|
177
|
+
"SearchResult",
|
|
178
|
+
"SlidingWindowStrategy",
|
|
179
|
+
"TokenBudgetMiddleware",
|
|
180
|
+
"TokenBudgetStrategy",
|
|
181
|
+
"TokenUsage",
|
|
182
|
+
"ToolCall",
|
|
183
|
+
"ToolLoop",
|
|
184
|
+
"ToolResult",
|
|
185
|
+
"VectorRecord",
|
|
186
|
+
"VectorStore",
|
|
187
|
+
"WebSearchTool",
|
|
188
|
+
"XMLBlocksFormatter",
|
|
189
|
+
"ai",
|
|
190
|
+
"calculate_token_cost",
|
|
191
|
+
"compute_prompt_hash",
|
|
192
|
+
"generate_deterministic_embedding",
|
|
193
|
+
"get_observability",
|
|
194
|
+
"load_prompt",
|
|
195
|
+
"parse_sse_events",
|
|
196
|
+
"rag",
|
|
197
|
+
"register_model_pricing",
|
|
198
|
+
"tool",
|
|
199
|
+
]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
import math
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def generate_deterministic_embedding(text: str, dimensions: int = 1536) -> list[float]:
|
|
8
|
+
"""
|
|
9
|
+
Generate deterministic, normalized test embeddings using character n-grams and SHA-256 feature hashing.
|
|
10
|
+
|
|
11
|
+
This provides dependency-free embeddings for development and functional testing;
|
|
12
|
+
it is not a substitute for trained semantic embedding models.
|
|
13
|
+
"""
|
|
14
|
+
if not text or not text.strip():
|
|
15
|
+
return [0.0] * dimensions
|
|
16
|
+
|
|
17
|
+
vec = [0.0] * dimensions
|
|
18
|
+
raw_words = [w.strip(".,;:!?\"'()[]{}").lower() for w in text.split() if w.strip()]
|
|
19
|
+
|
|
20
|
+
for word in raw_words:
|
|
21
|
+
tokens = [f"<{word}>"]
|
|
22
|
+
word_len = len(word)
|
|
23
|
+
for n in (3, 4, 5):
|
|
24
|
+
if word_len >= n:
|
|
25
|
+
for i in range(word_len - n + 1):
|
|
26
|
+
tokens.append(word[i : i + n])
|
|
27
|
+
|
|
28
|
+
for tok in tokens:
|
|
29
|
+
digest = hashlib.sha256(tok.encode("utf-8")).digest()
|
|
30
|
+
for i in range(2):
|
|
31
|
+
idx = int.from_bytes(digest[i * 4 : (i + 1) * 4], "big") % dimensions
|
|
32
|
+
sign = 1.0 if digest[i] % 2 == 0 else -1.0
|
|
33
|
+
vec[idx] += sign
|
|
34
|
+
|
|
35
|
+
# Normalize vector to unit length (L2 norm)
|
|
36
|
+
norm = math.sqrt(sum(x * x for x in vec))
|
|
37
|
+
if norm > 0.0:
|
|
38
|
+
vec = [x / norm for x in vec]
|
|
39
|
+
|
|
40
|
+
return vec
|