-
Notifications
You must be signed in to change notification settings - Fork 169
Expand file tree
/
Copy pathform_request_agent.py
More file actions
90 lines (80 loc) · 2.6 KB
/
form_request_agent.py
File metadata and controls
90 lines (80 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Copyright 2025 © BeeAI a Series of LF Projects, LLC
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations
import os
from typing import Annotated
from a2a.types import Message
from pydantic import BaseModel
from agentstack_sdk.a2a.extensions import (
CheckboxField,
DateField,
FileField,
FileInfo,
FormRender,
MultiSelectField,
OptionItem,
SingleSelectField,
TextField,
FormRequestExtensionServer,
FormRequestExtensionSpec,
)
from agentstack_sdk.server import Server
server = Server()
class KitchenSink(BaseModel):
text_field: str | None
date_field: str | None
file_field: list[FileInfo] | None
singleselect_field: str | None
multiselect_field: list[str] | None
checkbox_field: bool | None
@server.agent()
async def form_request_agent(
_message: Message,
form_request: Annotated[
FormRequestExtensionServer,
FormRequestExtensionSpec(),
],
):
"""Request form agent"""
user_info = await form_request.request_form(
form=FormRender(
title="Kitchen Sink Form",
columns=2,
fields=[
TextField(id="text_field", label="Text Field", col_span=1),
DateField(id="date_field", label="Date Field", col_span=1),
FileField(id="file_field", label="File Field", accept=["*/*"], col_span=2),
SingleSelectField(
id="singleselect_field",
label="Single-Select Field",
options=[
OptionItem(id="option1", label="Option 1"),
OptionItem(id="option2", label="Option 2"),
],
col_span=2,
),
MultiSelectField(
id="multiselect_field",
label="Multi-Select Field",
options=[
OptionItem(id="option1", label="Option 1"),
OptionItem(id="option2", label="Option 2"),
],
col_span=2,
),
CheckboxField(
id="checkbox_field",
label="Checkbox Field",
content="I agree to the terms and conditions.",
col_span=2,
),
],
),
model=KitchenSink,
)
if user_info is None:
yield "No user info received."
else:
yield user_info.model_dump_json()
if __name__ == "__main__":
server.run(host=os.getenv("HOST", "127.0.0.1"), port=int(os.getenv("PORT", 8000)))