Устранение неполадок с использованием модуля Python в функции AzurePython

Программы на Python
Ответить
Anonymous
 Устранение неполадок с использованием модуля Python в функции Azure

Сообщение Anonymous »

В моем приложении Python (3.12.3) есть следующая структура кода:
**ROOT**
-- .venv
-- azure_functions
---- function_app.py
---- host.json
---- local.settings.json
---- requirements.json
-- src
---- __init__.py
---- main.py
-- tests
---- test_action.py
-- .gitignore
-- requirements.txt
-- setup.py

где:
  • venv — виртуальный каталог env, в котором установлены файлы require.json из корневых папок и azure_functions
  • azure_functions — папка, содержащая файлы, связанные с функцией Azure (триггеры HTTP).
  • function_app.py – проблемный http-триггер, который не может вызвать функцию llm_call из main.py
Для справки: триггер внутри каталога azure_functions может быть успешно развернут и вызван в случае, если внутри него имеется только вывод на печать в виде строки, поэтому конфигурация, связанная с функцией Azure, правильна.
  • azure_functions/requirements.json — состоят из однострочных функций Azure.
  • src/__init__.py (пустой файл) /src/main.py — модуль и его определение, методы (типа llm_call) внутри main.py можно успешно вызывать из тестов code>, но не из каталога azure_functions
  • requirements.txt — параметры, связанные с файлами main.py
  • tests — папка с тестами, test_action.py может успешно вызывать методы из main.py просто при простой настройке:
    from src.main import llm_call
  • setup.py:
    # a simple package/module related configuration
    from setuptools import setup, find_packages

    setup(name="main", version="1.0", packages=find_packages())
Проблема заключается в том, что я использую методы из основного пакет в function_app.py через:
from src.main import llm_call # just with this single new line, no actual usage of this below

Я не вижу проблем в VS Code (нет выделенных строк), но когда я развертываю приложение в Azure, развертывание кажется неудачным (хотя я не вижу в журнале никаких ошибок, кроме этой строка AM appname-func: HTTP-триггеры не найдены. в выходных данных). Я развертываю его из кода VS и вижу, что моя функция сразу после этого исчезает из пользовательского интерфейса Azure Resources (Function App => Функции):
Изображение
и не могу быть видимым в пользовательском интерфейсе Azure.
Как только я удалю эту строку из src.main import llm_call из триггера и разверну ее еще раз, вся логика начнет работать и Я снова вижу развернутая функция на скриншоте выше. Похоже, проблема в том, как я использую методы из модуля main.py в function_app.py, но не знаю, как это устранить.
Буду признателен за любую помощь.
ОБНОВЛЕНИЕ:
main.py:
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
ChatPromptTemplate
)
from typing import Callable
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser
import os

model_to_use="gpt-4o-mini"

class CustomOutputParser(BaseOutputParser):
def parse(self, text: str):
return text

def llm_call(model, system_template, human_template, param_provider: Callable[[], dict], custom_output_parser) -> str:
try:
api_key = os.environ['OPENAI_API_KEY']
temperature=0.7
max_tokens=2048
chat_model = ChatOpenAI(model=model, api_key=api_key, temperature=temperature, max_tokens=max_tokens)
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)

human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

chain = LLMChain(
llm=chat_model,
prompt=chat_prompt,
output_parser=custom_output_parser
)

params = param_provider()
return chain.run(**params)
except Exception as e:
print(f"An error occurred while calling the LLM: {e}")
raise e

Код функции:
import azure.functions as func
import logging
from src.main import llm_call

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)

@app.route(route="llm_httptrigger")
def llmhttptrigger(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request!')

тестовый код:
import unittest
from src.main import llm_call

class TestCallLLMFunction(unittest.TestCase):
def test_call_llm(self):
category = "category1"
..


Подробнее здесь: https://stackoverflow.com/questions/792 ... e-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»