isa-model 0.4.0__py3-none-any.whl → 0.4.3__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.
Files changed (199) hide show
  1. isa_model/client.py +466 -43
  2. isa_model/core/cache/redis_cache.py +12 -3
  3. isa_model/core/config/config_manager.py +230 -3
  4. isa_model/core/config.py +90 -0
  5. isa_model/core/database/direct_db_client.py +114 -0
  6. isa_model/core/database/migration_manager.py +563 -0
  7. isa_model/core/database/migrations.py +21 -1
  8. isa_model/core/database/supabase_client.py +154 -19
  9. isa_model/core/dependencies.py +316 -0
  10. isa_model/core/discovery/__init__.py +19 -0
  11. isa_model/core/discovery/consul_discovery.py +190 -0
  12. isa_model/core/logging/__init__.py +54 -0
  13. isa_model/core/logging/influx_logger.py +523 -0
  14. isa_model/core/logging/loki_logger.py +160 -0
  15. isa_model/core/models/__init__.py +27 -18
  16. isa_model/core/models/config_models.py +625 -0
  17. isa_model/core/models/deployment_billing_tracker.py +430 -0
  18. isa_model/core/models/model_manager.py +40 -17
  19. isa_model/core/models/model_metadata.py +690 -0
  20. isa_model/core/models/model_repo.py +174 -18
  21. isa_model/core/models/system_models.py +857 -0
  22. isa_model/core/repositories/__init__.py +9 -0
  23. isa_model/core/repositories/config_repository.py +912 -0
  24. isa_model/core/services/intelligent_model_selector.py +399 -21
  25. isa_model/core/storage/hf_storage.py +1 -1
  26. isa_model/core/types.py +1 -0
  27. isa_model/deployment/__init__.py +5 -48
  28. isa_model/deployment/core/__init__.py +2 -31
  29. isa_model/deployment/core/deployment_manager.py +1278 -370
  30. isa_model/deployment/local/__init__.py +31 -0
  31. isa_model/deployment/local/config.py +248 -0
  32. isa_model/deployment/local/gpu_gateway.py +607 -0
  33. isa_model/deployment/local/health_checker.py +428 -0
  34. isa_model/deployment/local/provider.py +586 -0
  35. isa_model/deployment/local/tensorrt_service.py +621 -0
  36. isa_model/deployment/local/transformers_service.py +644 -0
  37. isa_model/deployment/local/vllm_service.py +527 -0
  38. isa_model/deployment/modal/__init__.py +8 -0
  39. isa_model/deployment/modal/config.py +136 -0
  40. isa_model/deployment/{services/auto_hf_modal_deployer.py → modal/deployer.py} +1 -1
  41. isa_model/deployment/modal/services/__init__.py +3 -0
  42. isa_model/deployment/modal/services/audio/__init__.py +1 -0
  43. isa_model/deployment/modal/services/embedding/__init__.py +1 -0
  44. isa_model/deployment/modal/services/llm/__init__.py +1 -0
  45. isa_model/deployment/modal/services/llm/isa_llm_service.py +424 -0
  46. isa_model/deployment/modal/services/video/__init__.py +1 -0
  47. isa_model/deployment/modal/services/vision/__init__.py +1 -0
  48. isa_model/deployment/models/org-org-acme-corp-tenant-a-service-llm-20250825-225822/tenant-a-service_modal_service.py +48 -0
  49. isa_model/deployment/models/org-test-org-123-prefix-test-service-llm-20250825-225822/prefix-test-service_modal_service.py +48 -0
  50. isa_model/deployment/models/test-llm-service-llm-20250825-204442/test-llm-service_modal_service.py +48 -0
  51. isa_model/deployment/models/test-monitoring-gpt2-llm-20250825-212906/test-monitoring-gpt2_modal_service.py +48 -0
  52. isa_model/deployment/models/test-monitoring-gpt2-llm-20250825-213009/test-monitoring-gpt2_modal_service.py +48 -0
  53. isa_model/deployment/storage/__init__.py +5 -0
  54. isa_model/deployment/storage/deployment_repository.py +824 -0
  55. isa_model/deployment/triton/__init__.py +10 -0
  56. isa_model/deployment/triton/config.py +196 -0
  57. isa_model/deployment/triton/configs/__init__.py +1 -0
  58. isa_model/deployment/triton/provider.py +512 -0
  59. isa_model/deployment/triton/scripts/__init__.py +1 -0
  60. isa_model/deployment/triton/templates/__init__.py +1 -0
  61. isa_model/inference/__init__.py +47 -1
  62. isa_model/inference/ai_factory.py +137 -10
  63. isa_model/inference/legacy_services/__init__.py +21 -0
  64. isa_model/inference/legacy_services/model_evaluation.py +637 -0
  65. isa_model/inference/legacy_services/model_service.py +573 -0
  66. isa_model/inference/legacy_services/model_serving.py +717 -0
  67. isa_model/inference/legacy_services/model_training.py +561 -0
  68. isa_model/inference/models/__init__.py +21 -0
  69. isa_model/inference/models/inference_config.py +551 -0
  70. isa_model/inference/models/inference_record.py +675 -0
  71. isa_model/inference/models/performance_models.py +714 -0
  72. isa_model/inference/repositories/__init__.py +9 -0
  73. isa_model/inference/repositories/inference_repository.py +828 -0
  74. isa_model/inference/services/audio/base_stt_service.py +184 -11
  75. isa_model/inference/services/audio/openai_stt_service.py +22 -6
  76. isa_model/inference/services/custom_model_manager.py +277 -0
  77. isa_model/inference/services/embedding/ollama_embed_service.py +15 -3
  78. isa_model/inference/services/embedding/resilient_embed_service.py +285 -0
  79. isa_model/inference/services/llm/__init__.py +10 -2
  80. isa_model/inference/services/llm/base_llm_service.py +335 -24
  81. isa_model/inference/services/llm/cerebras_llm_service.py +628 -0
  82. isa_model/inference/services/llm/helpers/llm_adapter.py +9 -4
  83. isa_model/inference/services/llm/helpers/llm_prompts.py +342 -0
  84. isa_model/inference/services/llm/helpers/llm_utils.py +321 -23
  85. isa_model/inference/services/llm/huggingface_llm_service.py +581 -0
  86. isa_model/inference/services/llm/local_llm_service.py +747 -0
  87. isa_model/inference/services/llm/ollama_llm_service.py +9 -2
  88. isa_model/inference/services/llm/openai_llm_service.py +33 -16
  89. isa_model/inference/services/llm/yyds_llm_service.py +8 -2
  90. isa_model/inference/services/vision/__init__.py +22 -1
  91. isa_model/inference/services/vision/blip_vision_service.py +359 -0
  92. isa_model/inference/services/vision/helpers/image_utils.py +8 -5
  93. isa_model/inference/services/vision/isa_vision_service.py +65 -4
  94. isa_model/inference/services/vision/openai_vision_service.py +19 -10
  95. isa_model/inference/services/vision/vgg16_vision_service.py +257 -0
  96. isa_model/serving/api/cache_manager.py +245 -0
  97. isa_model/serving/api/dependencies/__init__.py +1 -0
  98. isa_model/serving/api/dependencies/auth.py +194 -0
  99. isa_model/serving/api/dependencies/database.py +139 -0
  100. isa_model/serving/api/error_handlers.py +284 -0
  101. isa_model/serving/api/fastapi_server.py +172 -22
  102. isa_model/serving/api/middleware/auth.py +8 -2
  103. isa_model/serving/api/middleware/security.py +23 -33
  104. isa_model/serving/api/middleware/tenant_context.py +414 -0
  105. isa_model/serving/api/routes/analytics.py +4 -1
  106. isa_model/serving/api/routes/config.py +645 -0
  107. isa_model/serving/api/routes/deployment_billing.py +315 -0
  108. isa_model/serving/api/routes/deployments.py +138 -2
  109. isa_model/serving/api/routes/gpu_gateway.py +440 -0
  110. isa_model/serving/api/routes/health.py +32 -12
  111. isa_model/serving/api/routes/inference_monitoring.py +486 -0
  112. isa_model/serving/api/routes/local_deployments.py +448 -0
  113. isa_model/serving/api/routes/tenants.py +575 -0
  114. isa_model/serving/api/routes/unified.py +680 -18
  115. isa_model/serving/api/routes/webhooks.py +479 -0
  116. isa_model/serving/api/startup.py +68 -54
  117. isa_model/utils/gpu_utils.py +311 -0
  118. {isa_model-0.4.0.dist-info → isa_model-0.4.3.dist-info}/METADATA +66 -24
  119. isa_model-0.4.3.dist-info/RECORD +193 -0
  120. isa_model/core/storage/minio_storage.py +0 -0
  121. isa_model/deployment/cloud/__init__.py +0 -9
  122. isa_model/deployment/cloud/modal/__init__.py +0 -10
  123. isa_model/deployment/core/deployment_config.py +0 -356
  124. isa_model/deployment/core/isa_deployment_service.py +0 -401
  125. isa_model/deployment/gpu_int8_ds8/app/server.py +0 -66
  126. isa_model/deployment/gpu_int8_ds8/scripts/test_client.py +0 -43
  127. isa_model/deployment/gpu_int8_ds8/scripts/test_client_os.py +0 -35
  128. isa_model/deployment/runtime/deployed_service.py +0 -338
  129. isa_model/deployment/services/__init__.py +0 -9
  130. isa_model/deployment/services/auto_deploy_vision_service.py +0 -538
  131. isa_model/deployment/services/model_service.py +0 -332
  132. isa_model/deployment/services/service_monitor.py +0 -356
  133. isa_model/deployment/services/service_registry.py +0 -527
  134. isa_model/eval/__init__.py +0 -92
  135. isa_model/eval/benchmarks/__init__.py +0 -27
  136. isa_model/eval/benchmarks/multimodal_datasets.py +0 -460
  137. isa_model/eval/benchmarks.py +0 -701
  138. isa_model/eval/config/__init__.py +0 -10
  139. isa_model/eval/config/evaluation_config.py +0 -108
  140. isa_model/eval/evaluators/__init__.py +0 -24
  141. isa_model/eval/evaluators/audio_evaluator.py +0 -727
  142. isa_model/eval/evaluators/base_evaluator.py +0 -503
  143. isa_model/eval/evaluators/embedding_evaluator.py +0 -742
  144. isa_model/eval/evaluators/llm_evaluator.py +0 -472
  145. isa_model/eval/evaluators/vision_evaluator.py +0 -564
  146. isa_model/eval/example_evaluation.py +0 -395
  147. isa_model/eval/factory.py +0 -798
  148. isa_model/eval/infrastructure/__init__.py +0 -24
  149. isa_model/eval/infrastructure/experiment_tracker.py +0 -466
  150. isa_model/eval/isa_benchmarks.py +0 -700
  151. isa_model/eval/isa_integration.py +0 -582
  152. isa_model/eval/metrics.py +0 -951
  153. isa_model/eval/tests/unit/test_basic.py +0 -396
  154. isa_model/serving/api/routes/evaluations.py +0 -579
  155. isa_model/training/__init__.py +0 -168
  156. isa_model/training/annotation/annotation_schema.py +0 -47
  157. isa_model/training/annotation/processors/annotation_processor.py +0 -126
  158. isa_model/training/annotation/storage/dataset_manager.py +0 -131
  159. isa_model/training/annotation/storage/dataset_schema.py +0 -44
  160. isa_model/training/annotation/tests/test_annotation_flow.py +0 -109
  161. isa_model/training/annotation/tests/test_minio copy.py +0 -113
  162. isa_model/training/annotation/tests/test_minio_upload.py +0 -43
  163. isa_model/training/annotation/views/annotation_controller.py +0 -158
  164. isa_model/training/cloud/__init__.py +0 -22
  165. isa_model/training/cloud/job_orchestrator.py +0 -402
  166. isa_model/training/cloud/runpod_trainer.py +0 -454
  167. isa_model/training/cloud/storage_manager.py +0 -482
  168. isa_model/training/core/__init__.py +0 -26
  169. isa_model/training/core/config.py +0 -181
  170. isa_model/training/core/dataset.py +0 -222
  171. isa_model/training/core/trainer.py +0 -720
  172. isa_model/training/core/utils.py +0 -213
  173. isa_model/training/examples/intelligent_training_example.py +0 -281
  174. isa_model/training/factory.py +0 -424
  175. isa_model/training/intelligent/__init__.py +0 -25
  176. isa_model/training/intelligent/decision_engine.py +0 -643
  177. isa_model/training/intelligent/intelligent_factory.py +0 -888
  178. isa_model/training/intelligent/knowledge_base.py +0 -751
  179. isa_model/training/intelligent/resource_optimizer.py +0 -839
  180. isa_model/training/intelligent/task_classifier.py +0 -576
  181. isa_model/training/storage/__init__.py +0 -24
  182. isa_model/training/storage/core_integration.py +0 -439
  183. isa_model/training/storage/training_repository.py +0 -552
  184. isa_model/training/storage/training_storage.py +0 -628
  185. isa_model-0.4.0.dist-info/RECORD +0 -182
  186. /isa_model/deployment/{cloud/modal → modal/services/audio}/isa_audio_chatTTS_service.py +0 -0
  187. /isa_model/deployment/{cloud/modal → modal/services/audio}/isa_audio_fish_service.py +0 -0
  188. /isa_model/deployment/{cloud/modal → modal/services/audio}/isa_audio_openvoice_service.py +0 -0
  189. /isa_model/deployment/{cloud/modal → modal/services/audio}/isa_audio_service_v2.py +0 -0
  190. /isa_model/deployment/{cloud/modal → modal/services/embedding}/isa_embed_rerank_service.py +0 -0
  191. /isa_model/deployment/{cloud/modal → modal/services/video}/isa_video_hunyuan_service.py +0 -0
  192. /isa_model/deployment/{cloud/modal → modal/services/vision}/isa_vision_ocr_service.py +0 -0
  193. /isa_model/deployment/{cloud/modal → modal/services/vision}/isa_vision_qwen25_service.py +0 -0
  194. /isa_model/deployment/{cloud/modal → modal/services/vision}/isa_vision_table_service.py +0 -0
  195. /isa_model/deployment/{cloud/modal → modal/services/vision}/isa_vision_ui_service.py +0 -0
  196. /isa_model/deployment/{cloud/modal → modal/services/vision}/isa_vision_ui_service_optimized.py +0 -0
  197. /isa_model/deployment/{services → modal/services/vision}/simple_auto_deploy_vision_service.py +0 -0
  198. {isa_model-0.4.0.dist-info → isa_model-0.4.3.dist-info}/WHEEL +0 -0
  199. {isa_model-0.4.0.dist-info → isa_model-0.4.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Consul Service Discovery Client for Model Service
4
+ Provides service discovery capabilities to find other services via Consul
5
+ """
6
+
7
+ import logging
8
+ import os
9
+ from typing import Optional, List, Dict, Any
10
+ import consul
11
+ import random
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class ConsulServiceDiscovery:
17
+ """Consul service discovery client for Model service"""
18
+
19
+ def __init__(self, consul_host: str = None, consul_port: int = None):
20
+ """Initialize Consul client for service discovery"""
21
+ self.consul_host = consul_host or os.getenv("CONSUL_HOST", "localhost")
22
+ self.consul_port = consul_port or int(os.getenv("CONSUL_PORT", "8500"))
23
+
24
+ try:
25
+ self._consul = consul.Consul(host=self.consul_host, port=self.consul_port)
26
+ # Test connection
27
+ self._consul.agent.self()
28
+ logger.info(f"Connected to Consul at {self.consul_host}:{self.consul_port}")
29
+ except Exception as e:
30
+ logger.error(f"Failed to connect to Consul: {e}")
31
+ self._consul = None
32
+
33
+ def get_service_url(self, service_name: str, default_url: Optional[str] = None) -> Optional[str]:
34
+ """
35
+ Get service URL from Consul by service name
36
+
37
+ Args:
38
+ service_name: Name of the service to discover (e.g., 'mcp', 'agent')
39
+ default_url: Fallback URL if service not found or Consul unavailable
40
+
41
+ Returns:
42
+ Service URL (http://host:port) or default_url if not found
43
+ """
44
+ if not self._consul:
45
+ logger.warning(f"Consul not available, using default URL for {service_name}")
46
+ return default_url
47
+
48
+ try:
49
+ # Get healthy service instances
50
+ _, services = self._consul.health.service(service_name, passing=True)
51
+
52
+ if not services:
53
+ logger.warning(f"No healthy instances found for service '{service_name}'")
54
+ return default_url
55
+
56
+ # Use random selection for load balancing
57
+ service = random.choice(services)
58
+ service_info = service['Service']
59
+ address = service_info.get('Address', 'localhost')
60
+ port = service_info.get('Port', 80)
61
+
62
+ # Build service URL
63
+ service_url = f"http://{address}:{port}"
64
+ logger.info(f"Discovered service '{service_name}' at {service_url}")
65
+ return service_url
66
+
67
+ except Exception as e:
68
+ logger.error(f"Failed to discover service '{service_name}': {e}")
69
+ return default_url
70
+
71
+ def discover_all_instances(self, service_name: str) -> List[Dict[str, Any]]:
72
+ """
73
+ Discover all healthy instances of a service
74
+
75
+ Args:
76
+ service_name: Name of the service to discover
77
+
78
+ Returns:
79
+ List of service instances with their details
80
+ """
81
+ if not self._consul:
82
+ return []
83
+
84
+ try:
85
+ _, services = self._consul.health.service(service_name, passing=True)
86
+
87
+ instances = []
88
+ for service in services:
89
+ service_info = service['Service']
90
+ instances.append({
91
+ 'id': service_info.get('ID'),
92
+ 'name': service_info.get('Service'),
93
+ 'address': service_info.get('Address'),
94
+ 'port': service_info.get('Port'),
95
+ 'tags': service_info.get('Tags', []),
96
+ 'url': f"http://{service_info.get('Address')}:{service_info.get('Port')}"
97
+ })
98
+
99
+ return instances
100
+
101
+ except Exception as e:
102
+ logger.error(f"Failed to discover instances for '{service_name}': {e}")
103
+ return []
104
+
105
+ def resolve_service_url(self, url: str) -> str:
106
+ """
107
+ Resolve service URL - supports consul:// URLs for service discovery
108
+
109
+ Args:
110
+ url: URL to resolve (can be consul://service_name/path or regular URL)
111
+
112
+ Returns:
113
+ Resolved URL with actual service address
114
+ """
115
+ if not url or not url.startswith("consul://"):
116
+ return url
117
+
118
+ # Parse consul URL: consul://service_name/path
119
+ parts = url.replace("consul://", "").split("/", 1)
120
+ service_name = parts[0]
121
+ path = "/" + parts[1] if len(parts) > 1 else ""
122
+
123
+ # Default URLs for common services
124
+ defaults = {
125
+ "mcp": os.getenv("MCP_BASE_URL", "http://localhost:8081"),
126
+ "agent": os.getenv("AGENT_URL", "http://localhost:8080"),
127
+ "auth": os.getenv("AUTH_SERVICE_URL", "http://localhost:8202"),
128
+ "storage": os.getenv("STORAGE_SERVICE_URL", "http://localhost:8109"),
129
+ "redis": os.getenv("REDIS_URL", "redis://localhost:6379")
130
+ }
131
+
132
+ # Discover service URL
133
+ discovered_url = self.get_service_url(service_name, defaults.get(service_name))
134
+ if discovered_url:
135
+ return discovered_url + path
136
+
137
+ # Fallback to original URL if discovery fails
138
+ return url
139
+
140
+ def is_available(self) -> bool:
141
+ """Check if Consul connection is available"""
142
+ if not self._consul:
143
+ return False
144
+
145
+ try:
146
+ self._consul.agent.self()
147
+ return True
148
+ except:
149
+ return False
150
+
151
+
152
+ # Global instance for singleton pattern
153
+ _discovery_instance = None
154
+
155
+
156
+ def get_consul_discovery() -> ConsulServiceDiscovery:
157
+ """Get global Consul discovery instance (singleton)"""
158
+ global _discovery_instance
159
+ if _discovery_instance is None:
160
+ _discovery_instance = ConsulServiceDiscovery()
161
+ return _discovery_instance
162
+
163
+
164
+ def discover_service(service_name: str, default_url: Optional[str] = None) -> Optional[str]:
165
+ """
166
+ Convenient function to discover service URL
167
+
168
+ Args:
169
+ service_name: Name of the service to discover
170
+ default_url: Fallback URL if discovery fails
171
+
172
+ Returns:
173
+ Service URL or default_url
174
+ """
175
+ discovery = get_consul_discovery()
176
+ return discovery.get_service_url(service_name, default_url)
177
+
178
+
179
+ def resolve_url(url: str) -> str:
180
+ """
181
+ Resolve URL with Consul service discovery support
182
+
183
+ Args:
184
+ url: URL to resolve (supports consul:// prefix)
185
+
186
+ Returns:
187
+ Resolved URL with actual service address
188
+ """
189
+ discovery = get_consul_discovery()
190
+ return discovery.resolve_service_url(url)
@@ -0,0 +1,54 @@
1
+ """
2
+ Logging module for ISA Model
3
+
4
+ Provides comprehensive logging capabilities including:
5
+ - Loki-based centralized application logging (via loki_logger)
6
+ - InfluxDB-based inference metrics logging (via influx_logger)
7
+ - Real-time monitoring and alerting
8
+
9
+ Architecture:
10
+ - Loki: General application logs (INFO, WARNING, ERROR, DEBUG)
11
+ - InfluxDB: Inference metrics (tokens, costs, performance data)
12
+ """
13
+
14
+ # InfluxDB inference metrics logging
15
+ from .influx_logger import (
16
+ InfluxInferenceLogger,
17
+ InferenceLogEntry,
18
+ get_inference_logger,
19
+ generate_request_id
20
+ )
21
+
22
+ # Loki centralized application logging
23
+ from .loki_logger import (
24
+ setup_logger,
25
+ app_logger,
26
+ api_logger,
27
+ client_logger,
28
+ inference_logger,
29
+ training_logger,
30
+ eval_logger,
31
+ db_logger,
32
+ deployment_logger,
33
+ model_logger,
34
+ )
35
+
36
+ __all__ = [
37
+ # InfluxDB inference logging
38
+ 'InfluxInferenceLogger',
39
+ 'InferenceLogEntry',
40
+ 'get_inference_logger',
41
+ 'generate_request_id',
42
+
43
+ # Loki application logging
44
+ 'setup_logger',
45
+ 'app_logger',
46
+ 'api_logger',
47
+ 'client_logger',
48
+ 'inference_logger',
49
+ 'training_logger',
50
+ 'eval_logger',
51
+ 'db_logger',
52
+ 'deployment_logger',
53
+ 'model_logger',
54
+ ]