@GRIMSHOT

Как вызвать функции из другого файла без импорта переменных в которых вызывается модель ИИ?

у меня есть 3 файла: ai.py, main.py, main1.py

в ai.py запускается модель ИИ и хранится в переменной, так же там прописана функция вызова ИИ и обработки сообщения.
main.py и main1.py идентичны, main.py - главная программа, main1.py - программа для тестов новых функций

Мне нужно сделать так, чтобы файл ai.py работал отдельно и был запущен, а main.py и main1.py вызывали эту функцию, и получали значение return

я получаю доступ к функции из ai.py путем импорта from ai import translate
и получается так, что модель ИИ все равно загружается в оперативную память программы main.py

Модель ИИ занимает много оперативной памяти на сервере, и я не могу одновременно запустить две модели. Мне нужно чтобы основная программа и программа для тестов работали на одной модели ИИ.

как сделать так, чтобы ai.py работал отдельно, а main.py и main1.py вызывали функцию transalte без импорта самой модели в свой файл.

код ai.py (пример)
# Библиотеки для ИИ
import ctranslate2
import transformers

# Подключение ИИ
translator = ctranslate2.Translator("ctranslate2")
tokenizer = transformers.AutoTokenizer.from_pretrained(".....")
tgt_lang="zu"

async def translate(text, num_beams=4, num_return_sequences=4):
    num_return_sequences = min(num_return_sequences, num_beams)

    source = tokenizer.convert_ids_to_tokens(tokenizer.encode(text))
    target_prefix = [tokenizer.lang_code_to_token[tgt_lang]]
    results = translator.translate_batch(
        [source],
        target_prefix=[target_prefix],
        beam_size=num_beams,
        num_hypotheses=num_return_sequences
    )

    translations = []
    for hypothesis in results[0].hypotheses:
        target = hypothesis[1:]
        decoded_sentence = tokenizer.decode(tokenizer.convert_tokens_to_ids(target))
        translations.append(decoded_sentence)
    
    return translations


код main.py (пример)
from ai import translate

while True:
    text=input("Введите текст>>> ")
    print(f'перевод {translate(text)}')
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Что значит "работал отдельно и был запущен"? В приведённом коде нет ничего, что требовало бы постоянной работы ai.py. Если в реальном коде есть что-то ещё, т.е. файл не завершается немедленно, а крутится в рабочем цикле, то так и пиши.

Если ты импортируешь ai.py из другого файла, он выполнится, но только один раз, при первом импорте.
Различить две ситуации (выполнение при запуске и выполнение при импорте) можно по встроенной переменной __name__.
if __name__ == '__main__':
    print('Этот файл выполняется непосредственно.')
else:
    print('Этот файл импортируется.')

Соотвественно, ты можешь выполнять разный набор действий в разных случаях.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы