isa-model 0.3.91__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.
- isa_model/client.py +1166 -584
- isa_model/core/cache/redis_cache.py +410 -0
- isa_model/core/config/config_manager.py +282 -12
- isa_model/core/config.py +91 -1
- isa_model/core/database/__init__.py +1 -0
- isa_model/core/database/direct_db_client.py +114 -0
- isa_model/core/database/migration_manager.py +563 -0
- isa_model/core/database/migrations.py +297 -0
- isa_model/core/database/supabase_client.py +258 -0
- isa_model/core/dependencies.py +316 -0
- isa_model/core/discovery/__init__.py +19 -0
- isa_model/core/discovery/consul_discovery.py +190 -0
- isa_model/core/logging/__init__.py +54 -0
- isa_model/core/logging/influx_logger.py +523 -0
- isa_model/core/logging/loki_logger.py +160 -0
- isa_model/core/models/__init__.py +46 -0
- isa_model/core/models/config_models.py +625 -0
- isa_model/core/models/deployment_billing_tracker.py +430 -0
- isa_model/core/models/model_billing_tracker.py +60 -88
- isa_model/core/models/model_manager.py +66 -25
- isa_model/core/models/model_metadata.py +690 -0
- isa_model/core/models/model_repo.py +217 -55
- isa_model/core/models/model_statistics_tracker.py +234 -0
- isa_model/core/models/model_storage.py +0 -1
- isa_model/core/models/model_version_manager.py +959 -0
- isa_model/core/models/system_models.py +857 -0
- isa_model/core/pricing_manager.py +2 -249
- isa_model/core/repositories/__init__.py +9 -0
- isa_model/core/repositories/config_repository.py +912 -0
- isa_model/core/resilience/circuit_breaker.py +366 -0
- isa_model/core/security/secrets.py +358 -0
- isa_model/core/services/__init__.py +2 -4
- isa_model/core/services/intelligent_model_selector.py +479 -370
- isa_model/core/storage/hf_storage.py +2 -2
- isa_model/core/types.py +8 -0
- isa_model/deployment/__init__.py +5 -48
- isa_model/deployment/core/__init__.py +2 -31
- isa_model/deployment/core/deployment_manager.py +1278 -368
- isa_model/deployment/local/__init__.py +31 -0
- isa_model/deployment/local/config.py +248 -0
- isa_model/deployment/local/gpu_gateway.py +607 -0
- isa_model/deployment/local/health_checker.py +428 -0
- isa_model/deployment/local/provider.py +586 -0
- isa_model/deployment/local/tensorrt_service.py +621 -0
- isa_model/deployment/local/transformers_service.py +644 -0
- isa_model/deployment/local/vllm_service.py +527 -0
- isa_model/deployment/modal/__init__.py +8 -0
- isa_model/deployment/modal/config.py +136 -0
- isa_model/deployment/modal/deployer.py +894 -0
- isa_model/deployment/modal/services/__init__.py +3 -0
- isa_model/deployment/modal/services/audio/__init__.py +1 -0
- isa_model/deployment/modal/services/audio/isa_audio_chatTTS_service.py +520 -0
- isa_model/deployment/modal/services/audio/isa_audio_openvoice_service.py +758 -0
- isa_model/deployment/modal/services/audio/isa_audio_service_v2.py +1044 -0
- isa_model/deployment/modal/services/embedding/__init__.py +1 -0
- isa_model/deployment/modal/services/embedding/isa_embed_rerank_service.py +296 -0
- isa_model/deployment/modal/services/llm/__init__.py +1 -0
- isa_model/deployment/modal/services/llm/isa_llm_service.py +424 -0
- isa_model/deployment/modal/services/video/__init__.py +1 -0
- isa_model/deployment/modal/services/video/isa_video_hunyuan_service.py +423 -0
- isa_model/deployment/modal/services/vision/__init__.py +1 -0
- isa_model/deployment/modal/services/vision/isa_vision_ocr_service.py +519 -0
- isa_model/deployment/modal/services/vision/isa_vision_qwen25_service.py +709 -0
- isa_model/deployment/modal/services/vision/isa_vision_table_service.py +676 -0
- isa_model/deployment/modal/services/vision/isa_vision_ui_service.py +833 -0
- isa_model/deployment/modal/services/vision/isa_vision_ui_service_optimized.py +660 -0
- isa_model/deployment/models/org-org-acme-corp-tenant-a-service-llm-20250825-225822/tenant-a-service_modal_service.py +48 -0
- isa_model/deployment/models/org-test-org-123-prefix-test-service-llm-20250825-225822/prefix-test-service_modal_service.py +48 -0
- isa_model/deployment/models/test-llm-service-llm-20250825-204442/test-llm-service_modal_service.py +48 -0
- isa_model/deployment/models/test-monitoring-gpt2-llm-20250825-212906/test-monitoring-gpt2_modal_service.py +48 -0
- isa_model/deployment/models/test-monitoring-gpt2-llm-20250825-213009/test-monitoring-gpt2_modal_service.py +48 -0
- isa_model/deployment/storage/__init__.py +5 -0
- isa_model/deployment/storage/deployment_repository.py +824 -0
- isa_model/deployment/triton/__init__.py +10 -0
- isa_model/deployment/triton/config.py +196 -0
- isa_model/deployment/triton/configs/__init__.py +1 -0
- isa_model/deployment/triton/provider.py +512 -0
- isa_model/deployment/triton/scripts/__init__.py +1 -0
- isa_model/deployment/triton/templates/__init__.py +1 -0
- isa_model/inference/__init__.py +47 -1
- isa_model/inference/ai_factory.py +179 -16
- isa_model/inference/legacy_services/__init__.py +21 -0
- isa_model/inference/legacy_services/model_evaluation.py +637 -0
- isa_model/inference/legacy_services/model_service.py +573 -0
- isa_model/inference/legacy_services/model_serving.py +717 -0
- isa_model/inference/legacy_services/model_training.py +561 -0
- isa_model/inference/models/__init__.py +21 -0
- isa_model/inference/models/inference_config.py +551 -0
- isa_model/inference/models/inference_record.py +675 -0
- isa_model/inference/models/performance_models.py +714 -0
- isa_model/inference/repositories/__init__.py +9 -0
- isa_model/inference/repositories/inference_repository.py +828 -0
- isa_model/inference/services/audio/__init__.py +21 -0
- isa_model/inference/services/audio/base_realtime_service.py +225 -0
- isa_model/inference/services/audio/base_stt_service.py +184 -11
- isa_model/inference/services/audio/isa_tts_service.py +0 -0
- isa_model/inference/services/audio/openai_realtime_service.py +320 -124
- isa_model/inference/services/audio/openai_stt_service.py +53 -11
- isa_model/inference/services/base_service.py +17 -1
- isa_model/inference/services/custom_model_manager.py +277 -0
- isa_model/inference/services/embedding/__init__.py +13 -0
- isa_model/inference/services/embedding/base_embed_service.py +111 -8
- isa_model/inference/services/embedding/isa_embed_service.py +305 -0
- isa_model/inference/services/embedding/ollama_embed_service.py +15 -3
- isa_model/inference/services/embedding/openai_embed_service.py +2 -4
- isa_model/inference/services/embedding/resilient_embed_service.py +285 -0
- isa_model/inference/services/embedding/tests/test_embedding.py +222 -0
- isa_model/inference/services/img/__init__.py +2 -2
- isa_model/inference/services/img/base_image_gen_service.py +24 -7
- isa_model/inference/services/img/replicate_image_gen_service.py +84 -422
- isa_model/inference/services/img/services/replicate_face_swap.py +193 -0
- isa_model/inference/services/img/services/replicate_flux.py +226 -0
- isa_model/inference/services/img/services/replicate_flux_kontext.py +219 -0
- isa_model/inference/services/img/services/replicate_sticker_maker.py +249 -0
- isa_model/inference/services/img/tests/test_img_client.py +297 -0
- isa_model/inference/services/llm/__init__.py +10 -2
- isa_model/inference/services/llm/base_llm_service.py +361 -26
- isa_model/inference/services/llm/cerebras_llm_service.py +628 -0
- isa_model/inference/services/llm/helpers/llm_adapter.py +71 -12
- isa_model/inference/services/llm/helpers/llm_prompts.py +342 -0
- isa_model/inference/services/llm/helpers/llm_utils.py +321 -23
- isa_model/inference/services/llm/huggingface_llm_service.py +581 -0
- isa_model/inference/services/llm/local_llm_service.py +747 -0
- isa_model/inference/services/llm/ollama_llm_service.py +11 -3
- isa_model/inference/services/llm/openai_llm_service.py +670 -56
- isa_model/inference/services/llm/yyds_llm_service.py +10 -3
- isa_model/inference/services/vision/__init__.py +27 -6
- isa_model/inference/services/vision/base_vision_service.py +118 -185
- isa_model/inference/services/vision/blip_vision_service.py +359 -0
- isa_model/inference/services/vision/helpers/image_utils.py +19 -10
- isa_model/inference/services/vision/isa_vision_service.py +634 -0
- isa_model/inference/services/vision/openai_vision_service.py +19 -10
- isa_model/inference/services/vision/tests/test_ocr_client.py +284 -0
- isa_model/inference/services/vision/vgg16_vision_service.py +257 -0
- isa_model/serving/api/cache_manager.py +245 -0
- isa_model/serving/api/dependencies/__init__.py +1 -0
- isa_model/serving/api/dependencies/auth.py +194 -0
- isa_model/serving/api/dependencies/database.py +139 -0
- isa_model/serving/api/error_handlers.py +284 -0
- isa_model/serving/api/fastapi_server.py +240 -18
- isa_model/serving/api/middleware/auth.py +317 -0
- isa_model/serving/api/middleware/security.py +268 -0
- isa_model/serving/api/middleware/tenant_context.py +414 -0
- isa_model/serving/api/routes/analytics.py +489 -0
- isa_model/serving/api/routes/config.py +645 -0
- isa_model/serving/api/routes/deployment_billing.py +315 -0
- isa_model/serving/api/routes/deployments.py +475 -0
- isa_model/serving/api/routes/gpu_gateway.py +440 -0
- isa_model/serving/api/routes/health.py +32 -12
- isa_model/serving/api/routes/inference_monitoring.py +486 -0
- isa_model/serving/api/routes/local_deployments.py +448 -0
- isa_model/serving/api/routes/logs.py +430 -0
- isa_model/serving/api/routes/settings.py +582 -0
- isa_model/serving/api/routes/tenants.py +575 -0
- isa_model/serving/api/routes/unified.py +992 -171
- isa_model/serving/api/routes/webhooks.py +479 -0
- isa_model/serving/api/startup.py +318 -0
- isa_model/serving/modal_proxy_server.py +249 -0
- isa_model/utils/gpu_utils.py +311 -0
- {isa_model-0.3.91.dist-info → isa_model-0.4.3.dist-info}/METADATA +76 -22
- isa_model-0.4.3.dist-info/RECORD +193 -0
- isa_model/deployment/cloud/__init__.py +0 -9
- isa_model/deployment/cloud/modal/__init__.py +0 -10
- isa_model/deployment/cloud/modal/isa_vision_doc_service.py +0 -766
- isa_model/deployment/cloud/modal/isa_vision_table_service.py +0 -532
- isa_model/deployment/cloud/modal/isa_vision_ui_service.py +0 -406
- isa_model/deployment/cloud/modal/register_models.py +0 -321
- isa_model/deployment/core/deployment_config.py +0 -356
- isa_model/deployment/core/isa_deployment_service.py +0 -401
- isa_model/deployment/gpu_int8_ds8/app/server.py +0 -66
- isa_model/deployment/gpu_int8_ds8/scripts/test_client.py +0 -43
- isa_model/deployment/gpu_int8_ds8/scripts/test_client_os.py +0 -35
- isa_model/deployment/runtime/deployed_service.py +0 -338
- isa_model/deployment/services/__init__.py +0 -9
- isa_model/deployment/services/auto_deploy_vision_service.py +0 -538
- isa_model/deployment/services/model_service.py +0 -332
- isa_model/deployment/services/service_monitor.py +0 -356
- isa_model/deployment/services/service_registry.py +0 -527
- isa_model/eval/__init__.py +0 -92
- isa_model/eval/benchmarks.py +0 -469
- isa_model/eval/config/__init__.py +0 -10
- isa_model/eval/config/evaluation_config.py +0 -108
- isa_model/eval/evaluators/__init__.py +0 -18
- isa_model/eval/evaluators/base_evaluator.py +0 -503
- isa_model/eval/evaluators/llm_evaluator.py +0 -472
- isa_model/eval/factory.py +0 -531
- isa_model/eval/infrastructure/__init__.py +0 -24
- isa_model/eval/infrastructure/experiment_tracker.py +0 -466
- isa_model/eval/metrics.py +0 -798
- isa_model/inference/adapter/unified_api.py +0 -248
- isa_model/inference/services/helpers/stacked_config.py +0 -148
- isa_model/inference/services/img/flux_professional_service.py +0 -603
- isa_model/inference/services/img/helpers/base_stacked_service.py +0 -274
- isa_model/inference/services/others/table_transformer_service.py +0 -61
- isa_model/inference/services/vision/doc_analysis_service.py +0 -640
- isa_model/inference/services/vision/helpers/base_stacked_service.py +0 -274
- isa_model/inference/services/vision/ui_analysis_service.py +0 -823
- isa_model/scripts/inference_tracker.py +0 -283
- isa_model/scripts/mlflow_manager.py +0 -379
- isa_model/scripts/model_registry.py +0 -465
- isa_model/scripts/register_models.py +0 -370
- isa_model/scripts/register_models_with_embeddings.py +0 -510
- isa_model/scripts/start_mlflow.py +0 -95
- isa_model/scripts/training_tracker.py +0 -257
- isa_model/training/__init__.py +0 -74
- isa_model/training/annotation/annotation_schema.py +0 -47
- isa_model/training/annotation/processors/annotation_processor.py +0 -126
- isa_model/training/annotation/storage/dataset_manager.py +0 -131
- isa_model/training/annotation/storage/dataset_schema.py +0 -44
- isa_model/training/annotation/tests/test_annotation_flow.py +0 -109
- isa_model/training/annotation/tests/test_minio copy.py +0 -113
- isa_model/training/annotation/tests/test_minio_upload.py +0 -43
- isa_model/training/annotation/views/annotation_controller.py +0 -158
- isa_model/training/cloud/__init__.py +0 -22
- isa_model/training/cloud/job_orchestrator.py +0 -402
- isa_model/training/cloud/runpod_trainer.py +0 -454
- isa_model/training/cloud/storage_manager.py +0 -482
- isa_model/training/core/__init__.py +0 -23
- isa_model/training/core/config.py +0 -181
- isa_model/training/core/dataset.py +0 -222
- isa_model/training/core/trainer.py +0 -720
- isa_model/training/core/utils.py +0 -213
- isa_model/training/factory.py +0 -424
- isa_model-0.3.91.dist-info/RECORD +0 -138
- /isa_model/{core/storage/minio_storage.py → deployment/modal/services/audio/isa_audio_fish_service.py} +0 -0
- /isa_model/deployment/{services → modal/services/vision}/simple_auto_deploy_vision_service.py +0 -0
- {isa_model-0.3.91.dist-info → isa_model-0.4.3.dist-info}/WHEEL +0 -0
- {isa_model-0.3.91.dist-info → isa_model-0.4.3.dist-info}/top_level.txt +0 -0
@@ -1,109 +0,0 @@
|
|
1
|
-
# test_annotation_flow.py
|
2
|
-
import os
|
3
|
-
os.environ["ENV"] = "local"
|
4
|
-
|
5
|
-
import asyncio
|
6
|
-
from datetime import datetime
|
7
|
-
from bson import ObjectId
|
8
|
-
from app.services.llm_model.annotation.views.annotation_controller import AnnotationController
|
9
|
-
from app.services.llm_model.annotation.processors.annotation_processor import AnnotationProcessor
|
10
|
-
from app.services.llm_model.annotation.annotation_schema import (
|
11
|
-
AnnotationFeedback,
|
12
|
-
RatingScale,
|
13
|
-
AnnotationType,
|
14
|
-
AnnotationAspects,
|
15
|
-
BetterResponse
|
16
|
-
)
|
17
|
-
from app.config.config_manager import config_manager
|
18
|
-
|
19
|
-
async def setup_test_data():
|
20
|
-
"""Setup initial test data in MongoDB"""
|
21
|
-
db = await config_manager.get_db('mongodb')
|
22
|
-
|
23
|
-
# Create a test annotation
|
24
|
-
test_annotation = {
|
25
|
-
"_id": ObjectId(),
|
26
|
-
"project_name": "test_project",
|
27
|
-
"items": [{
|
28
|
-
"item_id": "test_item_1",
|
29
|
-
"input": {
|
30
|
-
"messages": [{
|
31
|
-
"role": "user",
|
32
|
-
"content": "What is the capital of France?"
|
33
|
-
}]
|
34
|
-
},
|
35
|
-
"output": {
|
36
|
-
"content": "The capital of France is Paris."
|
37
|
-
},
|
38
|
-
"status": "pending"
|
39
|
-
}],
|
40
|
-
"created_at": datetime.utcnow().isoformat()
|
41
|
-
}
|
42
|
-
|
43
|
-
await db['annotations'].insert_one(test_annotation)
|
44
|
-
return test_annotation
|
45
|
-
|
46
|
-
async def test_annotation_flow():
|
47
|
-
"""Test the complete annotation flow"""
|
48
|
-
try:
|
49
|
-
# Initialize controllers
|
50
|
-
annotation_controller = AnnotationController()
|
51
|
-
annotation_processor = AnnotationProcessor()
|
52
|
-
|
53
|
-
# Setup test data
|
54
|
-
test_data = await setup_test_data()
|
55
|
-
annotation_id = str(test_data["_id"])
|
56
|
-
item_id = test_data["items"][0]["item_id"]
|
57
|
-
|
58
|
-
print("1. Created test annotation")
|
59
|
-
|
60
|
-
# Create test feedback
|
61
|
-
feedback = AnnotationFeedback(
|
62
|
-
rating=RatingScale.EXCELLENT,
|
63
|
-
category=AnnotationType.ACCURACY,
|
64
|
-
aspects=AnnotationAspects(
|
65
|
-
factually_correct=True,
|
66
|
-
relevant=True,
|
67
|
-
harmful=False,
|
68
|
-
biased=False,
|
69
|
-
complete=True,
|
70
|
-
efficient=True
|
71
|
-
),
|
72
|
-
better_response=BetterResponse(
|
73
|
-
content="Paris is the capital city of France, known for its iconic Eiffel Tower.",
|
74
|
-
reason="Added more context and detail"
|
75
|
-
),
|
76
|
-
comment="Good response, but could be more detailed"
|
77
|
-
)
|
78
|
-
|
79
|
-
# Submit annotation
|
80
|
-
result = await annotation_controller.submit_annotation(
|
81
|
-
annotation_id=annotation_id,
|
82
|
-
item_id=item_id,
|
83
|
-
feedback=feedback,
|
84
|
-
annotator_id="test_annotator"
|
85
|
-
)
|
86
|
-
|
87
|
-
print("2. Submitted annotation:", result)
|
88
|
-
|
89
|
-
# Process annotation queue
|
90
|
-
await annotation_processor.process_queue()
|
91
|
-
print("3. Processed annotation queue")
|
92
|
-
|
93
|
-
# Verify dataset creation
|
94
|
-
db = await config_manager.get_db('mongodb')
|
95
|
-
datasets = await db['training_datasets'].find().to_list(length=10)
|
96
|
-
|
97
|
-
print("\nCreated Datasets:")
|
98
|
-
for dataset in datasets:
|
99
|
-
print(f"- {dataset['name']} ({dataset['type']})")
|
100
|
-
print(f" Status: {dataset['status']}")
|
101
|
-
print(f" Examples: {dataset['stats']['total_examples']}")
|
102
|
-
|
103
|
-
except Exception as e:
|
104
|
-
print(f"Error during test: {e}")
|
105
|
-
|
106
|
-
if __name__ == "__main__":
|
107
|
-
# Run the test
|
108
|
-
print("Starting annotation flow test...")
|
109
|
-
asyncio.run(test_annotation_flow())
|
@@ -1,113 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
|
3
|
-
import os
|
4
|
-
from minio import Minio
|
5
|
-
import json
|
6
|
-
import logging
|
7
|
-
from io import BytesIO
|
8
|
-
|
9
|
-
# Configure logging
|
10
|
-
logging.basicConfig(level=logging.INFO)
|
11
|
-
logger = logging.getLogger(__name__)
|
12
|
-
|
13
|
-
def test_minio():
|
14
|
-
try:
|
15
|
-
# Get MinIO host from environment variable or use default
|
16
|
-
minio_host = os.getenv("MINIO_HOST", "localhost:9000")
|
17
|
-
logger.info(f"Using MinIO host: {minio_host}")
|
18
|
-
|
19
|
-
# 1. Create MinIO client
|
20
|
-
logger.info("Creating MinIO client...")
|
21
|
-
client = Minio(
|
22
|
-
minio_host,
|
23
|
-
access_key="minioadmin",
|
24
|
-
secret_key="minioadmin",
|
25
|
-
secure=False
|
26
|
-
)
|
27
|
-
|
28
|
-
# 2. Test bucket operations
|
29
|
-
bucket_name = "knowledge-files" # Changed to match the actual bucket name
|
30
|
-
logger.info(f"Testing bucket operations with {bucket_name}...")
|
31
|
-
|
32
|
-
# Create bucket if it doesn't exist
|
33
|
-
if not client.bucket_exists(bucket_name):
|
34
|
-
client.make_bucket(bucket_name)
|
35
|
-
logger.info(f"Created new bucket: {bucket_name}")
|
36
|
-
else:
|
37
|
-
logger.info(f"Using existing bucket: {bucket_name}")
|
38
|
-
|
39
|
-
# Set bucket policy - allow all operations
|
40
|
-
policy = {
|
41
|
-
"Version": "2012-10-17",
|
42
|
-
"Statement": [
|
43
|
-
{
|
44
|
-
"Effect": "Allow",
|
45
|
-
"Principal": {"AWS": ["*"]},
|
46
|
-
"Action": [
|
47
|
-
"s3:GetBucketLocation",
|
48
|
-
"s3:ListBucket",
|
49
|
-
"s3:ListBucketMultipartUploads"
|
50
|
-
],
|
51
|
-
"Resource": [f"arn:aws:s3:::{bucket_name}"]
|
52
|
-
},
|
53
|
-
{
|
54
|
-
"Effect": "Allow",
|
55
|
-
"Principal": {"AWS": ["*"]},
|
56
|
-
"Action": [
|
57
|
-
"s3:AbortMultipartUpload",
|
58
|
-
"s3:DeleteObject",
|
59
|
-
"s3:GetObject",
|
60
|
-
"s3:ListMultipartUploadParts",
|
61
|
-
"s3:PutObject"
|
62
|
-
],
|
63
|
-
"Resource": [f"arn:aws:s3:::{bucket_name}/*"]
|
64
|
-
}
|
65
|
-
]
|
66
|
-
}
|
67
|
-
|
68
|
-
try:
|
69
|
-
client.set_bucket_policy(bucket_name, json.dumps(policy))
|
70
|
-
logger.info("Set bucket policy successfully")
|
71
|
-
except Exception as e:
|
72
|
-
logger.warning(f"Failed to set bucket policy: {e}")
|
73
|
-
|
74
|
-
# 3. Test file upload
|
75
|
-
source_file = "init-scripts/files/haley_system.txt"
|
76
|
-
object_name = "haley_system.txt"
|
77
|
-
|
78
|
-
if os.path.exists(source_file):
|
79
|
-
# Get file size
|
80
|
-
file_size = os.path.getsize(source_file)
|
81
|
-
logger.info(f"Found source file: {source_file} (size: {file_size} bytes)")
|
82
|
-
|
83
|
-
# Upload file
|
84
|
-
with open(source_file, 'rb') as file_data:
|
85
|
-
client.put_object(
|
86
|
-
bucket_name,
|
87
|
-
object_name,
|
88
|
-
file_data,
|
89
|
-
file_size,
|
90
|
-
content_type="text/plain"
|
91
|
-
)
|
92
|
-
logger.info(f"Uploaded file: {object_name}")
|
93
|
-
|
94
|
-
# 4. Test file download
|
95
|
-
data = client.get_object(bucket_name, object_name)
|
96
|
-
content = data.read().decode('utf-8')
|
97
|
-
logger.info(f"Successfully downloaded file. First 100 chars: {content[:100]}...")
|
98
|
-
|
99
|
-
# 5. Verify file exists
|
100
|
-
stat = client.stat_object(bucket_name, object_name)
|
101
|
-
logger.info(f"File stats: {stat}")
|
102
|
-
|
103
|
-
logger.info("Test completed successfully!")
|
104
|
-
else:
|
105
|
-
logger.error(f"Source file not found: {source_file}")
|
106
|
-
raise FileNotFoundError(f"Source file not found: {source_file}")
|
107
|
-
|
108
|
-
except Exception as e:
|
109
|
-
logger.error(f"Test failed: {str(e)}")
|
110
|
-
raise
|
111
|
-
|
112
|
-
if __name__ == "__main__":
|
113
|
-
test_minio()
|
@@ -1,43 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
import os
|
3
|
-
from minio import Minio
|
4
|
-
import io
|
5
|
-
|
6
|
-
# MinIO client setup
|
7
|
-
client = Minio(
|
8
|
-
"localhost:9000",
|
9
|
-
access_key="minioadmin",
|
10
|
-
secret_key="minioadmin",
|
11
|
-
secure=False
|
12
|
-
)
|
13
|
-
|
14
|
-
# Test bucket name
|
15
|
-
bucket_name = "test-bucket"
|
16
|
-
|
17
|
-
# Create bucket if not exists
|
18
|
-
if not client.bucket_exists(bucket_name):
|
19
|
-
client.make_bucket(bucket_name)
|
20
|
-
print(f"Created bucket: {bucket_name}")
|
21
|
-
else:
|
22
|
-
print(f"Bucket already exists: {bucket_name}")
|
23
|
-
|
24
|
-
# Upload test file
|
25
|
-
source_file = "init-scripts/files/haley_system.txt"
|
26
|
-
if os.path.exists(source_file):
|
27
|
-
with open(source_file, 'rb') as file_data:
|
28
|
-
content = file_data.read()
|
29
|
-
# Upload file
|
30
|
-
client.put_object(
|
31
|
-
bucket_name,
|
32
|
-
"haley_system.txt",
|
33
|
-
io.BytesIO(content),
|
34
|
-
len(content),
|
35
|
-
content_type="text/plain"
|
36
|
-
)
|
37
|
-
print(f"Successfully uploaded {source_file}")
|
38
|
-
|
39
|
-
# Verify upload
|
40
|
-
stat = client.stat_object(bucket_name, "haley_system.txt")
|
41
|
-
print(f"File stats: {stat}")
|
42
|
-
else:
|
43
|
-
print(f"Source file not found: {source_file}")
|
@@ -1,158 +0,0 @@
|
|
1
|
-
# app/services/llm_model/tracing/annotation/annotation_controller.py
|
2
|
-
from typing import Dict, Any, List, Optional
|
3
|
-
from datetime import datetime
|
4
|
-
from bson import ObjectId
|
5
|
-
from app.config.config_manager import config_manager
|
6
|
-
from app.services.training.llm_model.annotation.annotation_schema import AnnotationFeedback, RatingScale
|
7
|
-
from app.services.training.llm_model.annotation.storage.dataset_manager import DatasetManager
|
8
|
-
|
9
|
-
|
10
|
-
class AnnotationController:
|
11
|
-
def __init__(self):
|
12
|
-
self.logger = config_manager.get_logger(__name__)
|
13
|
-
|
14
|
-
async def get_pending_annotations(
|
15
|
-
self,
|
16
|
-
project_name: str,
|
17
|
-
category: Optional[str] = None,
|
18
|
-
min_rating: Optional[int] = None,
|
19
|
-
page: int = 1,
|
20
|
-
limit: int = 10
|
21
|
-
) -> Dict[str, Any]:
|
22
|
-
"""Get filtered list of pending annotations"""
|
23
|
-
db = await config_manager.get_db('mongodb')
|
24
|
-
collection = db['annotations']
|
25
|
-
|
26
|
-
# Build query with filters
|
27
|
-
query = {"status": "pending", "project_name": project_name}
|
28
|
-
if category:
|
29
|
-
query["annotation_type"] = category
|
30
|
-
if min_rating:
|
31
|
-
query["items.feedback.rating"] = {"$gte": min_rating}
|
32
|
-
|
33
|
-
annotations = await collection.find(query)\
|
34
|
-
.sort("created_at", -1)\
|
35
|
-
.skip((page - 1) * limit)\
|
36
|
-
.limit(limit)\
|
37
|
-
.to_list(length=limit)
|
38
|
-
|
39
|
-
return {
|
40
|
-
"annotations": annotations,
|
41
|
-
"pagination": {
|
42
|
-
"page": page,
|
43
|
-
"limit": limit,
|
44
|
-
"total": await collection.count_documents(query)
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
async def submit_annotation(
|
49
|
-
self,
|
50
|
-
annotation_id: str,
|
51
|
-
item_id: str,
|
52
|
-
feedback: AnnotationFeedback,
|
53
|
-
annotator_id: str
|
54
|
-
) -> Dict[str, Any]:
|
55
|
-
"""Submit and process annotation feedback"""
|
56
|
-
db = await config_manager.get_db('mongodb')
|
57
|
-
collection = db['annotations']
|
58
|
-
|
59
|
-
# Determine if annotation should be selected for training
|
60
|
-
is_selected = self._evaluate_for_training(feedback)
|
61
|
-
feedback_dict = feedback.dict()
|
62
|
-
feedback_dict["is_selected_for_training"] = is_selected
|
63
|
-
|
64
|
-
# Update annotation
|
65
|
-
result = await collection.update_one(
|
66
|
-
{
|
67
|
-
"_id": ObjectId(annotation_id),
|
68
|
-
"items.item_id": item_id
|
69
|
-
},
|
70
|
-
{
|
71
|
-
"$set": {
|
72
|
-
"items.$.feedback": feedback_dict,
|
73
|
-
"items.$.status": "completed",
|
74
|
-
"items.$.annotated_at": datetime.utcnow().isoformat(),
|
75
|
-
"items.$.annotator_id": annotator_id,
|
76
|
-
"items.$.training_status": "pending" if is_selected else "none"
|
77
|
-
}
|
78
|
-
}
|
79
|
-
)
|
80
|
-
|
81
|
-
# Process for training if selected
|
82
|
-
if is_selected:
|
83
|
-
await self._queue_for_training(annotation_id, item_id, feedback)
|
84
|
-
|
85
|
-
return {
|
86
|
-
"status": "success",
|
87
|
-
"selected_for_training": is_selected,
|
88
|
-
"message": "Annotation submitted successfully"
|
89
|
-
}
|
90
|
-
|
91
|
-
def _evaluate_for_training(self, feedback: AnnotationFeedback) -> bool:
|
92
|
-
"""Evaluate if annotation should be used for training"""
|
93
|
-
# Select for SFT if rating is excellent and aspects are positive
|
94
|
-
if feedback.rating == RatingScale.EXCELLENT:
|
95
|
-
aspects = feedback.aspects
|
96
|
-
if all([
|
97
|
-
aspects.factually_correct,
|
98
|
-
aspects.relevant,
|
99
|
-
not aspects.harmful,
|
100
|
-
not aspects.biased
|
101
|
-
]):
|
102
|
-
return True
|
103
|
-
|
104
|
-
# Select for RLHF if better response is provided
|
105
|
-
if feedback.better_response:
|
106
|
-
return True
|
107
|
-
|
108
|
-
return False
|
109
|
-
|
110
|
-
async def _queue_for_training(
|
111
|
-
self,
|
112
|
-
annotation_id: str,
|
113
|
-
item_id: str,
|
114
|
-
feedback: AnnotationFeedback
|
115
|
-
):
|
116
|
-
"""Queue selected annotations for training data generation"""
|
117
|
-
db = await config_manager.get_db('mongodb')
|
118
|
-
training_queue = db['training_queue']
|
119
|
-
|
120
|
-
await training_queue.insert_one({
|
121
|
-
"annotation_id": annotation_id,
|
122
|
-
"item_id": item_id,
|
123
|
-
"type": "sft" if feedback.rating == RatingScale.EXCELLENT else "rlhf",
|
124
|
-
"feedback": feedback.dict(),
|
125
|
-
"status": "pending",
|
126
|
-
"created_at": datetime.utcnow().isoformat()
|
127
|
-
})
|
128
|
-
|
129
|
-
class DatasetPreparationProcessor:
|
130
|
-
def __init__(self):
|
131
|
-
self.logger = config_manager.get_logger(__name__)
|
132
|
-
self.dataset_manager = DatasetManager()
|
133
|
-
self.batch_size = 1000 # Configure as needed
|
134
|
-
|
135
|
-
async def process_annotation_queue(self) -> None:
|
136
|
-
"""Process pending annotations and prepare datasets"""
|
137
|
-
db = await config_manager.get_db('mongodb')
|
138
|
-
annotation_queue = db['dataset_preparation_queue']
|
139
|
-
|
140
|
-
# Process items for SFT dataset
|
141
|
-
sft_items = await self._get_pending_annotations("sft")
|
142
|
-
if len(sft_items) >= self.batch_size:
|
143
|
-
await self._create_sft_dataset(sft_items)
|
144
|
-
|
145
|
-
# Process items for RLHF dataset
|
146
|
-
rlhf_items = await self._get_pending_annotations("rlhf")
|
147
|
-
if len(rlhf_items) >= self.batch_size:
|
148
|
-
await self._create_rlhf_dataset(rlhf_items)
|
149
|
-
|
150
|
-
async def _get_pending_annotations(self, dataset_type: str) -> List[Dict[str, Any]]:
|
151
|
-
"""Get pending annotations for dataset preparation"""
|
152
|
-
db = await config_manager.get_db('mongodb')
|
153
|
-
queue = db['dataset_preparation_queue']
|
154
|
-
|
155
|
-
return await queue.find({
|
156
|
-
"status": "pending",
|
157
|
-
"dataset_type": dataset_type
|
158
|
-
}).to_list(length=self.batch_size)
|
@@ -1,22 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Cloud Training Module for ISA Model Framework
|
3
|
-
|
4
|
-
This module provides cloud training capabilities including:
|
5
|
-
- RunPod integration for on-demand GPU training
|
6
|
-
- Remote storage management (S3, GCS, etc.)
|
7
|
-
- Training job orchestration and monitoring
|
8
|
-
- Automatic resource scaling and management
|
9
|
-
"""
|
10
|
-
|
11
|
-
from .runpod_trainer import RunPodTrainer
|
12
|
-
from .storage_manager import CloudStorageManager
|
13
|
-
from .job_orchestrator import TrainingJobOrchestrator
|
14
|
-
|
15
|
-
# Import config classes - these are defined in each module that needs them
|
16
|
-
# from ..core.config import RunPodConfig, StorageConfig, JobConfig
|
17
|
-
|
18
|
-
__all__ = [
|
19
|
-
"RunPodTrainer",
|
20
|
-
"CloudStorageManager",
|
21
|
-
"TrainingJobOrchestrator"
|
22
|
-
]
|