import asyncio from typing import Dict, Any from .submission import process_submission from .rate_limiter import check_submission_limit, record_submission, get_submission_status from .data_loader import load_test_dataset # Sample data - replace with actual data loading SAMPLE_SMILES = ["CCO", "c1ccccc1", "CC(=O)Cl", "C1=CC=CN=C1"] SAMPLE_LABELS = { "CCO": {"NR-AR": 0.1, "NR-AR-LBD": 0.2}, "c1ccccc1": {"NR-AR": 0.3, "NR-AR-LBD": 0.4}, "CC(=O)Cl": {"NR-AR": 0.5, "NR-AR-LBD": 0.6}, "C1=CC=CN=C1": {"NR-AR": 0.7, "NR-AR-LBD": 0.8} } async def submit_model( model_name: str, hf_space_tag: str, model_description: str, organization: str, model_size: int, # Changed from str to int publication_title: str, publication_link: str, pretrained: bool, pretraining_data: str, zero_shot: bool, few_shot: bool, n_shot: str, ) -> Dict[str, Any]: """API endpoint for model submission with rate limiting.""" # Check rate limit if not check_submission_limit(hf_space_tag): status = get_submission_status(hf_space_tag) raise Exception(f"Daily submission limit exceeded. Used {status['submissions_today']}/{status['daily_limit']} submissions today. Try again tomorrow.") # Get test smiles and labels test_smiles, test_labels = load_test_dataset() # Process submission record = await process_submission( model_name=model_name, hf_space_tag=hf_space_tag, model_description=model_description, organization=organization or "", model_size=model_size, # Now numeric publication_title=publication_title or "", publication_link=publication_link or "", pretrained = pretrained or "", pretraining_data = pretraining_data or "", zero_shot = zero_shot or "", few_shot = few_shot or "", n_shot = n_shot or "", smiles_list=test_smiles, true_labels=test_labels ) # Record successful submission for rate limiting record_submission(hf_space_tag) return record def get_submission_status(submission_id: str) -> Dict[str, str]: """Get the status of a submission.""" # Placeholder - implement proper status tracking return {"status": "completed", "message": "Submission processed successfully"}