85742ab165
Deploy Documentation / deploy (push) Has been cancelled
CPU Test / Test (Utilities, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (LLM proxy, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Others, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Store, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Utilities, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Weave, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (AgentOps, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (LLM proxy, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Others, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Weave, latest, Python 3.13) (push) Has been cancelled
Dashboard / Chromatic (push) Has been cancelled
CPU Test / Lint - fast (push) Has been cancelled
CPU Test / Lint - next (push) Has been cancelled
CPU Test / Lint - slow (push) Has been cancelled
CPU Test / Lint - JavaScript (push) Has been cancelled
CPU Test / Build documentation (push) Has been cancelled
CPU Test / Test (AgentOps, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (LLM proxy, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (Others, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (Store, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (Weave, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (AgentOps, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Store, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Utilities, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Weave, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (AgentOps, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (LLM proxy, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (Others, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (Store, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (Utilities, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (JavaScript) (push) Has been cancelled
70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
"""This sample code demonstrates how to use an existing APO algorithm to tune the prompts."""
|
|
|
|
import logging
|
|
from typing import Tuple, cast
|
|
|
|
from openai import AsyncOpenAI
|
|
from room_selector import RoomSelectionTask, load_room_tasks, prompt_template_baseline, room_selector
|
|
|
|
from agentlightning import Trainer, setup_logging
|
|
from agentlightning.adapter import TraceToMessages
|
|
from agentlightning.algorithm.apo import APO
|
|
from agentlightning.types import Dataset
|
|
|
|
|
|
def load_train_val_dataset() -> Tuple[Dataset[RoomSelectionTask], Dataset[RoomSelectionTask]]:
|
|
dataset_full = load_room_tasks()
|
|
train_split = len(dataset_full) // 2
|
|
dataset_train = [dataset_full[i] for i in range(train_split)]
|
|
dataset_val = [dataset_full[i] for i in range(train_split, len(dataset_full))]
|
|
return cast(Dataset[RoomSelectionTask], dataset_train), cast(Dataset[RoomSelectionTask], dataset_val)
|
|
|
|
|
|
def setup_apo_logger(file_path: str = "apo.log") -> None:
|
|
"""Dump a copy of all the logs produced by APO algorithm to a file."""
|
|
|
|
file_handler = logging.FileHandler(file_path)
|
|
file_handler.setLevel(logging.INFO)
|
|
formatter = logging.Formatter("%(asctime)s [%(levelname)s] (Process-%(process)d %(name)s) %(message)s")
|
|
file_handler.setFormatter(formatter)
|
|
logging.getLogger("agentlightning.algorithm.apo").addHandler(file_handler)
|
|
|
|
|
|
def main() -> None:
|
|
setup_logging()
|
|
setup_apo_logger()
|
|
|
|
openai_client = AsyncOpenAI()
|
|
|
|
algo = APO[RoomSelectionTask](
|
|
openai_client,
|
|
val_batch_size=10,
|
|
gradient_batch_size=4,
|
|
beam_width=2,
|
|
branch_factor=2,
|
|
beam_rounds=2,
|
|
_poml_trace=True,
|
|
)
|
|
trainer = Trainer(
|
|
algorithm=algo,
|
|
# Increase the number of runners to run more rollouts in parallel
|
|
n_runners=8,
|
|
# APO algorithm needs a baseline
|
|
# Set it either here or in the algo
|
|
initial_resources={
|
|
# The resource key can be arbitrary
|
|
"prompt_template": prompt_template_baseline()
|
|
},
|
|
# APO algorithm needs an adapter to process the traces produced by rollouts
|
|
# Use this adapter to convert spans to messages
|
|
adapter=TraceToMessages(),
|
|
)
|
|
dataset_train, dataset_val = load_train_val_dataset()
|
|
trainer.fit(agent=room_selector, train_dataset=dataset_train, val_dataset=dataset_val)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|