From 0d3f8ba277182f1e9e5e5d79884722ab55230ab1 Mon Sep 17 00:00:00 2001 From: Eric Hasegawa Date: Tue, 4 Mar 2025 18:01:12 -0800 Subject: [PATCH 1/3] chore: lint with ruff --- TEST_get_emission.py | 2 -- docs/stream_tutorial/client.py | 3 -- docs/stream_tutorial/miner.py | 10 +++--- docs/stream_tutorial/protocol.py | 3 +- neurons/miner.py | 3 -- neurons/validator.py | 14 ++++---- omega/__init__.py | 8 ++--- omega/audio_scoring.py | 2 -- omega/base/miner.py | 4 +-- omega/base/neuron.py | 1 - omega/base/validator.py | 6 ++-- omega/diarization_metric.py | 2 +- omega/imagebind_wrapper.py | 6 ++-- omega/miner_utils.py | 1 - omega/unstuff.py | 1 - omega/utils/__init__.py | 6 ++-- omega/utils/misc.py | 2 -- omega/video_utils.py | 2 -- purchase_focus_video.py | 6 ++-- ruff.toml | 2 ++ test_audio_dataset.py | 10 ++---- validator-api/app.py | 36 +++++++------------ validator-api/test_search_and_submit.py | 5 +-- .../validator_api/cron/confirm_purchase.py | 1 - .../validator_api/database/crud/focusvideo.py | 6 ++-- .../database/models/focus_video_record.py | 2 +- .../database/models/miner_bans.py | 1 - .../validator_api/database/models/user.py | 2 +- validator-api/validator_api/dataset_upload.py | 1 - .../validator_api/imagebind_loader.py | 1 - .../validator_api/scoring/deepseek_chat.py | 15 ++++++++ .../validator_api/scoring/query_llm.py | 1 - .../validator_api/scoring/scoring_service.py | 3 +- validator-api/validator_api/utils/__init__.py | 3 +- .../validator_api/utils/marketplace.py | 2 -- 35 files changed, 69 insertions(+), 104 deletions(-) create mode 100644 ruff.toml diff --git a/TEST_get_emission.py b/TEST_get_emission.py index 3c969933..8a35f0c8 100644 --- a/TEST_get_emission.py +++ b/TEST_get_emission.py @@ -1,6 +1,4 @@ import bittensor as bt -from bittensor_wallet import Wallet -from bittensor import Balance, tao import time import random diff --git a/docs/stream_tutorial/client.py b/docs/stream_tutorial/client.py index d6cfa2d6..9480af67 100644 --- a/docs/stream_tutorial/client.py +++ b/docs/stream_tutorial/client.py @@ -48,9 +48,6 @@ async def main(): print() if isinstance(chunk, list): print(chunk[0], end="", flush=True) - else: - # last object yielded is the synapse itself with completion filled - synapse = chunk break # Run the main function with asyncio diff --git a/docs/stream_tutorial/miner.py b/docs/stream_tutorial/miner.py index 36d6297f..c6bdb558 100644 --- a/docs/stream_tutorial/miner.py +++ b/docs/stream_tutorial/miner.py @@ -10,7 +10,7 @@ import bittensor as bt from transformers import GPT2Tokenizer -from typing import List, Dict, Tuple, Union, Callable, Awaitable +from typing import Dict, Tuple from protocol import StreamPrompting from config import get_config, check_config @@ -62,7 +62,7 @@ def __init__(self, config=None, axon=None, wallet=None, subtensor=None): # The axon handles request processing, allowing validators to send this process requests. self.axon = axon or bt.axon(wallet=self.wallet, port=self.config.axon.port) # Attach determiners which functions are called when servicing a request. - bt.logging.info(f"Attaching forward function to axon.") + bt.logging.info("Attaching forward function to axon.") print(f"Attaching forward function to axon. {self._prompt}") self.axon.attach( forward_fn=self._prompt, @@ -166,12 +166,10 @@ def run(self): bt.logging.info(f"Miner starting at block: {self.last_epoch_block}") # This loop maintains the miner's operations until intentionally stopped. - bt.logging.info(f"Starting main loop") + bt.logging.info("Starting main loop") step = 0 try: while not self.should_exit: - start_epoch = time.time() - # --- Wait until next epoch. current_block = self.subtensor.get_current_block() while ( @@ -215,7 +213,7 @@ def run(self): exit() # In case of unforeseen errors, the miner will log the error and continue operations. - except Exception as e: + except Exception: bt.logging.error(traceback.format_exc()) def run_in_background_thread(self): diff --git a/docs/stream_tutorial/protocol.py b/docs/stream_tutorial/protocol.py index 25c4e92b..87cfb6b1 100644 --- a/docs/stream_tutorial/protocol.py +++ b/docs/stream_tutorial/protocol.py @@ -1,8 +1,7 @@ import pydantic import bittensor as bt -from abc import ABC, abstractmethod -from typing import List, Union, Callable, Awaitable +from typing import List from starlette.responses import StreamingResponse diff --git a/neurons/miner.py b/neurons/miner.py index 47c41843..982efb40 100644 --- a/neurons/miner.py +++ b/neurons/miner.py @@ -22,10 +22,7 @@ os.environ["USE_TORCH"] = "1" import time -import json import typing -import requests -import asyncio import bittensor as bt # Bittensor Miner Template: diff --git a/neurons/validator.py b/neurons/validator.py index 1e232f86..4041f519 100644 --- a/neurons/validator.py +++ b/neurons/validator.py @@ -48,10 +48,8 @@ MIN_LENGTH_BOOST_TOKEN_COUNT, MAX_LENGTH_BOOST_TOKEN_COUNT, STUFFED_DESCRIPTION_PUNISHMENT, - FOCUS_MIN_SCORE, MIN_AUDIO_LENGTH_SECONDS, MAX_AUDIO_LENGTH_SECONDS, - MIN_AUDIO_LENGTH_SCORE, SPEECH_CONTENT_SCALING_FACTOR, SPEAKER_DOMINANCE_SCALING_FACTOR, BACKGROUND_NOISE_SCALING_FACTOR, @@ -78,7 +76,7 @@ import traceback import random import datetime as dt -from typing import List, Tuple, Optional, BinaryIO, Dict +from typing import List, Tuple, Optional, Dict import asyncio from aiohttp import ClientSession, BasicAuth import os @@ -918,7 +916,8 @@ async def check_videos_and_calculate_rewards_youtube( score = max(score, MIN_SCORE) # Log all our scores - bt.logging.info(f""" + bt.logging.info( + f""" is_unique: {[not is_sim for is_sim in is_too_similar]}, video cosine sim: {video_description_relevance_scores}, audio cosine sim: {audio_description_relevance_scores}, @@ -926,7 +925,8 @@ async def check_videos_and_calculate_rewards_youtube( query relevance scores: {query_relevance_scores}, length scalers: {length_scalers}, total score: {score} - """) + """ + ) # Upload our final results to API endpoint for index and dataset insertion. Include leaderboard statistics miner_hotkey = videos.axon.hotkey @@ -1031,7 +1031,7 @@ async def upload_video_metadata( json=payload, ) as response: response.raise_for_status() - result = await response.json() + await response.json() return True except Exception as e: bt.logging.debug(f"Error trying upload_video_metadata_endpoint: {e}") @@ -1084,7 +1084,7 @@ async def upload_audio_metadata( json=payload, ) as response: response.raise_for_status() - result = await response.json() + await response.json() return True except Exception as e: bt.logging.debug(f"Error trying upload_audio_metadata_endpoint: {e}") diff --git a/omega/__init__.py b/omega/__init__.py index 0454bd91..dfc5ed60 100644 --- a/omega/__init__.py +++ b/omega/__init__.py @@ -27,7 +27,7 @@ ) # Import all submodules. -from . import protocol -from . import base -from . import validator -from .subnet_links import SUBNET_LINKS +from . import protocol # noqa: E402, F401 +from . import base # noqa: E402, F401 +from . import validator # noqa: E402, F401 +from .subnet_links import SUBNET_LINKS # noqa: E402, F401 diff --git a/omega/audio_scoring.py b/omega/audio_scoring.py index 0629f97f..8cc6ce33 100644 --- a/omega/audio_scoring.py +++ b/omega/audio_scoring.py @@ -5,7 +5,6 @@ np.NAN = np.nan from pyannote.audio import Pipeline import librosa -import os import dotenv import pandas as pd import torch @@ -127,7 +126,6 @@ def total_score(self, audio_arr, sr, timestamps_start, timestamps_end, speakers) if __name__ == "__main__": from datasets import load_dataset - import huggingface_hub repo_id = "diarizers-community/voxconverse" diff --git a/omega/base/miner.py b/omega/base/miner.py index 406f935f..ca04c5ed 100644 --- a/omega/base/miner.py +++ b/omega/base/miner.py @@ -57,7 +57,7 @@ def __init__(self, config=None): self.axon = bt.axon(wallet=self.wallet, config=self.config) # Attach determiners which functions are called when servicing a request. - bt.logging.info(f"Attaching forward function to miner axon.") + bt.logging.info("Attaching forward function to miner axon.") self.axon.attach( forward_fn=self.forward_videos, blacklist_fn=self.blacklist_videos, @@ -137,7 +137,7 @@ def run(self): exit() # In case of unforeseen errors, the miner will log the error and continue operations. - except Exception as e: + except Exception: bt.logging.error(traceback.format_exc()) def run_in_background_thread(self): diff --git a/omega/base/neuron.py b/omega/base/neuron.py index 00b94d8a..52eb8cd2 100644 --- a/omega/base/neuron.py +++ b/omega/base/neuron.py @@ -16,7 +16,6 @@ # DEALINGS IN THE SOFTWARE. import copy -import typing import datetime as dt import bittensor as bt diff --git a/omega/base/validator.py b/omega/base/validator.py index 5981e96e..96664802 100644 --- a/omega/base/validator.py +++ b/omega/base/validator.py @@ -34,7 +34,7 @@ from omega.base.neuron import BaseNeuron from omega.mock import MockDendrite from omega.utils.config import add_validator_args -from omega.constants import FOCUS_REWARDS_PERCENT, AUDIO_REWARDS_PERCENT +from omega.constants import AUDIO_REWARDS_PERCENT class BaseValidatorNeuron(BaseNeuron): @@ -191,7 +191,7 @@ def run(self): break if self.config.neuron.auto_update and self.should_restart(): - bt.logging.info(f"Validator is out of date, quitting to restart.") + bt.logging.info("Validator is out of date, quitting to restart.") raise KeyboardInterrupt # Sync metagraph and potentially set weights. @@ -320,7 +320,7 @@ def set_weights(self): # Check if self.scores contains any NaN values and log a warning if it does. if torch.isnan(self.scores).any(): bt.logging.warning( - f"Scores contain NaN values. This may be due to a lack of responses from miners, or a bug in your reward functions." + "Scores contain NaN values. This may be due to a lack of responses from miners, or a bug in your reward functions." ) self.scores, self.focus_scores, self.audio_score_arr = self.pad_tensors( diff --git a/omega/diarization_metric.py b/omega/diarization_metric.py index 66032596..50c5726d 100644 --- a/omega/diarization_metric.py +++ b/omega/diarization_metric.py @@ -1,4 +1,4 @@ -from pyannote.core import Segment, Timeline, Annotation +from pyannote.core import Segment, Annotation from pyannote.metrics.diarization import DiarizationErrorRate from omega.diarization_pipeline import CustomDiarizationPipeline import numpy as np diff --git a/omega/imagebind_wrapper.py b/omega/imagebind_wrapper.py index 4e51f9c7..4f9d178a 100644 --- a/omega/imagebind_wrapper.py +++ b/omega/imagebind_wrapper.py @@ -7,7 +7,7 @@ from imagebind import data from imagebind.models import imagebind_model from imagebind.models.imagebind_model import ModalityType -from imagebind.models.multimodal_preprocessors import SimpleTokenizer, TextPreprocessor +from imagebind.models.multimodal_preprocessors import SimpleTokenizer from pydantic import BaseModel import torch @@ -135,7 +135,7 @@ def generate_text_embeddings(self, text: str): def get_inputs(self, video_file: BinaryIO) -> dict: audio_file = video_utils.copy_audio(video_file.name) try: - duration = video_utils.get_video_duration(video_file.name) + video_utils.get_video_duration(video_file.name) video_data = data.load_and_transform_video_data( [video_file.name], self.device, @@ -180,7 +180,6 @@ def embed(self, descriptions: List[str], video_files: List[BinaryIO]) -> Embeddi @torch.no_grad() def embed_only_video(self, video_files: List[BinaryIO]) -> Embeddings: video_filepaths = [video_file.name for video_file in video_files] - durations = [video_utils.get_video_duration(f.name) for f in video_files] embeddings = self.imagebind( { ModalityType.VISION: [ @@ -201,7 +200,6 @@ def embed_video_and_text( self, video_files: List[BinaryIO], descriptions: List[str] ) -> Embeddings: video_filepaths = [video_file.name for video_file in video_files] - durations = [video_utils.get_video_duration(f.name) for f in video_files] embeddings = self.imagebind( { ModalityType.VISION: [ diff --git a/omega/miner_utils.py b/omega/miner_utils.py index fc31a2a1..fd9624da 100644 --- a/omega/miner_utils.py +++ b/omega/miner_utils.py @@ -12,7 +12,6 @@ MAX_VIDEO_LENGTH, FIVE_MINUTES, MAX_AUDIO_LENGTH_SECONDS, - MIN_AUDIO_LENGTH_SECONDS, ) from omega import video_utils from omega.diarization_pipeline import CustomDiarizationPipeline diff --git a/omega/unstuff.py b/omega/unstuff.py index a3d67dec..6c2ae9a4 100644 --- a/omega/unstuff.py +++ b/omega/unstuff.py @@ -5,7 +5,6 @@ import random import torch.nn.functional as F from omega.imagebind_wrapper import ( - split_text_by_token_limit, SimpleTokenizer, BPE_PATH, split_text_by_token_limit, diff --git a/omega/utils/__init__.py b/omega/utils/__init__.py index 1e612204..9b2101bb 100644 --- a/omega/utils/__init__.py +++ b/omega/utils/__init__.py @@ -1,3 +1,3 @@ -from . import config -from . import misc -from . import uids +from . import config # noqa: F401 +from . import misc # noqa: F401 +from . import uids # noqa: F401 diff --git a/omega/utils/misc.py b/omega/utils/misc.py index 80b4e614..9cb93fa9 100644 --- a/omega/utils/misc.py +++ b/omega/utils/misc.py @@ -17,8 +17,6 @@ # DEALINGS IN THE SOFTWARE. import time -import math -import hashlib as rpccheckhealth from math import floor from typing import Callable, Any from functools import lru_cache, update_wrapper diff --git a/omega/video_utils.py b/omega/video_utils.py index d17b900a..922bcf53 100644 --- a/omega/video_utils.py +++ b/omega/video_utils.py @@ -8,8 +8,6 @@ import ffmpeg from pydantic import BaseModel from yt_dlp import YoutubeDL -import librosa -import numpy as np from omega.constants import FIVE_MINUTES diff --git a/purchase_focus_video.py b/purchase_focus_video.py index a5993968..94a64761 100644 --- a/purchase_focus_video.py +++ b/purchase_focus_video.py @@ -128,7 +128,7 @@ def display_videos(videos_data): for idx, video in enumerate(videos_data, 1): # Convert created_at to a more readable format created_at = datetime.fromisoformat(video["created_at"].replace("Z", "+00:00")) - formatted_date = created_at.strftime("%Y-%m-%d %H:%M:%S") + created_at.strftime("%Y-%m-%d %H:%M:%S") table_data.append( [ @@ -222,7 +222,7 @@ def get_wallet(wallet_name=None, wallet_hotkey=None, wallet_path=None): wallet = btcli_wallet(name=name, hotkey=hotkey_name, path=path) try: - hotkey = wallet.get_hotkey() + wallet.get_hotkey() except Exception as e: print(f"{RED}Error loading hotkey: {e} {RESET}") return @@ -427,7 +427,7 @@ def select_order_for_verification(): while True: if purchases: print( - f"*** NOTE: A purchase is finalized when the purchase state is 'verified'. ***" + "*** NOTE: A purchase is finalized when the purchase state is 'verified'. ***" ) choice = input( f"{CYAN}Enter the number of the order to verify, 'm' for manual input, or 'n' to cancel: {RESET}" diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 00000000..f333db8e --- /dev/null +++ b/ruff.toml @@ -0,0 +1,2 @@ +[lint] +ignore=["E722"] \ No newline at end of file diff --git a/test_audio_dataset.py b/test_audio_dataset.py index 9918e1de..ef340dff 100644 --- a/test_audio_dataset.py +++ b/test_audio_dataset.py @@ -1,8 +1,9 @@ import os from datasets import load_dataset -from huggingface_hub import login from io import BytesIO import soundfile as sf +import numpy as np +import pandas as pd # Set HF_TOKEN environment variable or pass directly HF_TOKEN = os.getenv("HF_TOKEN") @@ -26,10 +27,6 @@ else: print(f"{key}: {first_row[key]}") - -import librosa -import numpy as np - breakpoint() audio_bytes = first_row["audio_bytes"] audio_arr, sr = sf.read(BytesIO(audio_bytes)) @@ -81,9 +78,6 @@ } ) -# Convert to pandas DataFrame and save as CSV -import pandas as pd - df = pd.DataFrame(diarization_data) os.makedirs("Dataset_audios/Metadata", exist_ok=True) df.to_csv(f"Dataset_audios/Metadata/{youtube_id}_diarization.csv", index=False) diff --git a/validator-api/app.py b/validator-api/app.py index 358022ad..97ef6b7b 100644 --- a/validator-api/app.py +++ b/validator-api/app.py @@ -70,7 +70,6 @@ check_availability, get_video_owner_coldkey, mark_video_rejected, - mark_video_submitted, set_focus_video_score, ) from validator_api.database.models.focus_video_record import ( @@ -94,7 +93,7 @@ ) from validator_api.database.models.miner_bans import miner_banned_until -from omega.protocol import AudioMetadata, VideoMetadata +from omega.protocol import VideoMetadata from sqlalchemy import select, update print("IMPORT_SCORE:", IMPORT_SCORE) @@ -316,8 +315,8 @@ async def run_focus_scoring( print(f"Score for focus video <{video_id}>: {score_details.final_score}") MIN_FINAL_SCORE = 0.1 # todo: measure and tune these - MIN_TASK_UNIQUENESS_SCORE = 0 - MIN_VIDEO_UNIQUENESS_SCORE = 0 + # MIN_TASK_UNIQUENESS_SCORE = 0 + # MIN_VIDEO_UNIQUENESS_SCORE = 0 # get the db after scoring the video so it's not open for too long async with get_db_context() as db: if score_details.final_score < MIN_FINAL_SCORE: @@ -406,7 +405,7 @@ async def resync_metagraph(): # Sync latest commune keys if ENABLE_COMMUNE: - commune_keys = update_commune_keys(commune_client, commune_keys) + update_commune_keys(commune_client, commune_keys) print("commune keys synced") # In case of unforeseen errors, the api will log the error and continue operations. @@ -444,10 +443,6 @@ async def detect_blocking_middleware(request: Request, call_next): return response - @app.get("/sentry-debug") - async def trigger_error(): - division_by_zero = 1 / 0 - @app.post("/api/get_pinecone_novelty") async def get_pinecone_novelty( metadata: List[VideoMetadata], @@ -460,7 +455,7 @@ async def get_pinecone_novelty( ) and not authenticate_with_commune(hotkey, commune_keys): raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, - detail=f"Valid hotkey required.", + detail="Valid hotkey required.", ) uid = None @@ -495,7 +490,7 @@ async def upload_video_metadata( ) and not authenticate_with_commune(hotkey, commune_keys): raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, - detail=f"Valid hotkey required.", + detail="Valid hotkey required.", ) uid = None @@ -616,27 +611,20 @@ async def upload_audio_metadata( ) and not authenticate_with_commune(hotkey, commune_keys): raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, - detail=f"Valid hotkey required.", + detail="Valid hotkey required.", ) uid = None - is_bittensor = 0 - is_commune = 0 if ENABLE_COMMUNE and hotkey in commune_keys.values(): # get uid of commune validator for key_uid, key_hotkey in commune_keys.items(): if key_hotkey == hotkey: uid = key_uid break - validator_chain = "commune" - is_commune = 1 elif uid is None and hotkey in metagraph.hotkeys: # get uid of bittensor validator uid = metagraph.hotkeys.index(hotkey) - validator_chain = "bittensor" - is_bittensor = 1 - start_time = time.time() # Note: by passing in the request object, we can choose to load the body of the request when # we are ready to process it, which is important because the request body here can be huge audio_ids, upload_data = await score.upload_audio_metadata(request) @@ -717,7 +705,7 @@ async def get_proxy(hotkey: Annotated[str, Depends(get_hotkey)]) -> str: ) and not authenticate_with_commune(hotkey, commune_keys): raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, - detail=f"Valid hotkey required.", + detail="Valid hotkey required.", ) return random.choice(PROXY_LIST) @@ -855,7 +843,7 @@ async def run_stake(video_id): } @app.get("/api/focus/miner_purchase_scores/{miner_hotkeys}") - async def miner_purchase_scores( + async def miner_purchase_scores_hotkeys( miner_hotkeys: str, ) -> Dict[str, MinerPurchaseStats]: return focus_video_cache.miner_purchase_stats() @@ -897,7 +885,7 @@ async def cache_max_focus_alpha(): while attempt < max_attempts: try: - max_focus_alpha = await get_max_focus_alpha_per_day() + await get_max_focus_alpha_per_day() break # Exit the loop if the function succeeds # In case of unforeseen errors, the api will log the error and continue operations. @@ -929,7 +917,7 @@ async def healthcheck( async def get_mm_topics(api_key: str = Security(get_api_key)): try: connection = connect_to_db() - query = f"SELECT DISTINCT query FROM omega_multimodal" + query = "SELECT DISTINCT query FROM omega_multimodal" cursor = connection.cursor() cursor.execute(query) data = [row[0] for row in cursor.fetchall()] @@ -947,7 +935,7 @@ async def get_mm_topics(api_key: str = Security(get_api_key)): async def get_mm_topic_video_count(api_key: str = Security(get_api_key)): try: connection = connect_to_db() - query = f"SELECT query, COUNT(*) AS num_videos FROM omega_multimodal GROUP BY query" + query = "SELECT query, COUNT(*) AS num_videos FROM omega_multimodal GROUP BY query" cursor = connection.cursor(dictionary=True) cursor.execute(query) data = cursor.fetchall() diff --git a/validator-api/test_search_and_submit.py b/validator-api/test_search_and_submit.py index 6b8980d2..57e30f72 100644 --- a/validator-api/test_search_and_submit.py +++ b/validator-api/test_search_and_submit.py @@ -1,8 +1,5 @@ -from omega.miner_utils import search_and_embed_youtube_videos, ImageBind, video_utils +from omega.miner_utils import search_and_embed_youtube_videos, ImageBind from omega.protocol import Videos -from validator_api.dataset_upload import dataset_uploader -from validator_api.score import score_and_upload_videos -import asyncio import time imagebind = ImageBind() diff --git a/validator-api/validator_api/cron/confirm_purchase.py b/validator-api/validator_api/cron/confirm_purchase.py index 6632bff4..12e77287 100644 --- a/validator-api/validator_api/cron/confirm_purchase.py +++ b/validator-api/validator_api/cron/confirm_purchase.py @@ -1,5 +1,4 @@ import asyncio -import time from datetime import datetime import bittensor as bt diff --git a/validator-api/validator_api/database/crud/focusvideo.py b/validator-api/validator_api/database/crud/focusvideo.py index 1710b3e0..e0cbb099 100644 --- a/validator-api/validator_api/database/crud/focusvideo.py +++ b/validator-api/validator_api/database/crud/focusvideo.py @@ -1,8 +1,8 @@ from datetime import datetime, timedelta from fastapi import HTTPException from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy import func, Float -from typing import List, Optional, Dict +from sqlalchemy import func +from typing import Optional, Dict import json import traceback import asyncio @@ -19,9 +19,7 @@ ) from validator_api.database.models.user import UserRecord from validator_api.utils.marketplace import ( - get_max_focus_alpha_per_day, get_variable_reward_pool_alpha, - get_max_focus_points_available_today, ) from pydantic import BaseModel from validator_api.scoring.scoring_service import VideoScore, FocusVideoEmbeddings diff --git a/validator-api/validator_api/database/models/focus_video_record.py b/validator-api/validator_api/database/models/focus_video_record.py index 57f31a87..ebc797a5 100644 --- a/validator-api/validator_api/database/models/focus_video_record.py +++ b/validator-api/validator_api/database/models/focus_video_record.py @@ -3,7 +3,7 @@ from typing import Optional from pydantic import BaseModel, ConfigDict -from sqlalchemy import Column, String, DateTime, Float, Enum, Integer +from sqlalchemy import Column, String, DateTime, Float, Enum from validator_api.database import Base from sqlalchemy.dialects.postgresql import JSONB diff --git a/validator-api/validator_api/database/models/miner_bans.py b/validator-api/validator_api/database/models/miner_bans.py index 3d9fbc0b..99ca602f 100644 --- a/validator-api/validator_api/database/models/miner_bans.py +++ b/validator-api/validator_api/database/models/miner_bans.py @@ -2,7 +2,6 @@ from typing import Optional from sqlalchemy import Column, String, DateTime, Integer, select -from pydantic import BaseModel, ConfigDict from validator_api.database import Base from validator_api.config import DB_STRING_LENGTH diff --git a/validator-api/validator_api/database/models/user.py b/validator-api/validator_api/database/models/user.py index 3f9cca11..ebe66e71 100644 --- a/validator-api/validator_api/database/models/user.py +++ b/validator-api/validator_api/database/models/user.py @@ -3,7 +3,7 @@ from sqlalchemy import Column, String, Float, DateTime from pydantic import BaseModel -from validator_api.config import DB_STRING_LENGTH, DB_STRING_LENGTH_LONG +from validator_api.config import DB_STRING_LENGTH from validator_api.database import Base diff --git a/validator-api/validator_api/dataset_upload.py b/validator-api/validator_api/dataset_upload.py index 2bafb2b1..79a3399b 100644 --- a/validator-api/validator_api/dataset_upload.py +++ b/validator-api/validator_api/dataset_upload.py @@ -1,4 +1,3 @@ -import asyncio from io import BytesIO from typing import List from datetime import datetime diff --git a/validator-api/validator_api/imagebind_loader.py b/validator-api/validator_api/imagebind_loader.py index 5d1deded..5039e1be 100644 --- a/validator-api/validator_api/imagebind_loader.py +++ b/validator-api/validator_api/imagebind_loader.py @@ -1,7 +1,6 @@ from typing import Optional from fastapi import HTTPException import asyncio -import threading from concurrent.futures import ThreadPoolExecutor from omega.imagebind_wrapper import ImageBind diff --git a/validator-api/validator_api/scoring/deepseek_chat.py b/validator-api/validator_api/scoring/deepseek_chat.py index 06c700e2..5e6d1933 100644 --- a/validator-api/validator_api/scoring/deepseek_chat.py +++ b/validator-api/validator_api/scoring/deepseek_chat.py @@ -1,3 +1,18 @@ +from typing import Iterable, Optional, Type, Union +from pydantic import BaseModel +from openai.resources.beta.chat.completions import ChatCompletionMessageParam +from openai import AsyncOpenAI +from validator_api.scoring.query_deepseek import query_deepseek +import os +import json +import asyncio + +OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") +openai_client = AsyncOpenAI( + api_key=OPENAI_API_KEY, +) + + async def query_openai( messages: Iterable[ChatCompletionMessageParam], output_model: Optional[Type[BaseModel]] = None, diff --git a/validator-api/validator_api/scoring/query_llm.py b/validator-api/validator_api/scoring/query_llm.py index 0ebc22ad..fa06f9e9 100644 --- a/validator-api/validator_api/scoring/query_llm.py +++ b/validator-api/validator_api/scoring/query_llm.py @@ -4,7 +4,6 @@ import httpx import json -import traceback import os import asyncio from typing import Iterable, Type, Optional, Union diff --git a/validator-api/validator_api/scoring/scoring_service.py b/validator-api/validator_api/scoring/scoring_service.py index 8f5e4387..0a5faec9 100644 --- a/validator-api/validator_api/scoring/scoring_service.py +++ b/validator-api/validator_api/scoring/scoring_service.py @@ -398,7 +398,7 @@ async def _internal_async(): # print(f" - ID: {match.get('id', 'N/A')}") # print(f" - Metadata: {match.get('metadata', {})}") else: - print(f"No pinecone matches, returning 0") + print("No pinecone matches, returning 0") similarity_score = 0 similarity_score = max(0.0, min(similarity_score, 1.0)) return 1.0 - similarity_score @@ -618,7 +618,6 @@ async def score_video( def main(): service = FocusScoringService() import asyncio - import time async def main(): video_id = "29f91a6f-1393-4765-ba00-263b4cff28b6" diff --git a/validator-api/validator_api/utils/__init__.py b/validator-api/validator_api/utils/__init__.py index f5853e53..8ac4859b 100644 --- a/validator-api/validator_api/utils/__init__.py +++ b/validator-api/validator_api/utils/__init__.py @@ -1,4 +1,5 @@ -import asyncio, functools +import asyncio +import functools RETRIES = 3 DELAY_SECS = 2 diff --git a/validator-api/validator_api/utils/marketplace.py b/validator-api/validator_api/utils/marketplace.py index 5db47c16..feeb0fb3 100644 --- a/validator-api/validator_api/utils/marketplace.py +++ b/validator-api/validator_api/utils/marketplace.py @@ -1,10 +1,8 @@ import time -from typing import Tuple, Dict import requests import bittensor as bt from validator_api.config import ( NETWORK, - BT_TESTNET, NETUID, FOCUS_REWARDS_PERCENT, FIXED_ALPHA_USD_ESTIMATE, From 4d67f30ff96f381791d7bdca1ae112ef9d336319 Mon Sep 17 00:00:00 2001 From: Eric Hasegawa Date: Tue, 4 Mar 2025 18:01:40 -0800 Subject: [PATCH 2/3] fix 1 --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index feebf4d7..bf5f85ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,3 +32,7 @@ jobs: run: | source env/bin/activate ruff format --check + - name: Run Ruff linting + run: | + source env/bin/activate + ruff check From 7ae07057cf67f51ef51252eb058bcf04c258417a Mon Sep 17 00:00:00 2001 From: Eric Hasegawa Date: Tue, 4 Mar 2025 18:04:13 -0800 Subject: [PATCH 3/3] fix 2 --- ruff.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruff.toml b/ruff.toml index f333db8e..972ca7d0 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,2 +1,2 @@ [lint] -ignore=["E722"] \ No newline at end of file +ignore=["E722"]