Files
wehub-resource-sync e768098d0e
tools_continuous_delivery / Private PyPI non-main branch release (push) Has been skipped
tools_continuous_delivery / Private PyPI main branch release (push) Failing after 2m42s
Publish Promptflow Doc / Build (push) Has been cancelled
Publish Promptflow Doc / Deploy (push) Has been cancelled
Flake8 Lint / flake8 (push) Has been cancelled
Spell check CI / Spell_Check (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:52 +08:00

80 lines
2.1 KiB
Python

"""
Azure ML managed online endpoint scoring script.
Replaces: Prompt Flow Managed Online Endpoint.
init() is called once when the container starts.
run(raw_data) is called for each request; raw_data is the JSON request body.
Deploy:
bash deploy.sh
Optional: set MAF_WORKFLOW_FILE to your workflow file path
(default: phase-2-rebuild/01_linear_flow.py).
"""
import asyncio
import json
import logging
import os
from pathlib import Path
import sys
logger = logging.getLogger(__name__)
workflow = None
def init():
"""Called once when the endpoint container starts."""
global workflow
guide_root = Path(__file__).resolve().parents[2]
if str(guide_root) not in sys.path:
sys.path.insert(0, str(guide_root))
# Optional tracing — only when the connection string is present.
appinsights_conn = os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")
if appinsights_conn:
from azure.monitor.opentelemetry import configure_azure_monitor
from agent_framework.observability import configure_otel_providers
configure_azure_monitor(connection_string=appinsights_conn)
configure_otel_providers()
from workflow_loader import load_workflow
workflow = load_workflow()
logger.info("Workflow loaded successfully.")
def run(raw_data):
"""Called for each scoring request.
Parameters
----------
raw_data : str
JSON string with the request body, e.g. '{"question": "..."}'
Returns
-------
dict
{"answer": str}
"""
data = json.loads(raw_data)
question = data.get("question", "").strip()
if not question:
raise ValueError("Question must not be empty.")
result = asyncio.get_event_loop().run_until_complete(workflow.run(question))
outputs = result.get_outputs()
if not outputs:
raise RuntimeError("Workflow produced no output.")
output = outputs[0]
# AgentResponse objects are not JSON-serializable; extract the text.
if hasattr(output, "text"):
return {"answer": output.text}
return {"answer": str(output)}