-
Notifications
You must be signed in to change notification settings - Fork 232
Expand file tree
/
Copy pathmetadata.py
More file actions
54 lines (40 loc) · 1.4 KB
/
metadata.py
File metadata and controls
54 lines (40 loc) · 1.4 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
from __future__ import annotations
from enum import Enum
from pydantic import BaseModel
from pydantic.config import JsonDict
SETTINGS_METADATA_KEY = "openhands_settings"
SETTINGS_SECTION_METADATA_KEY = "openhands_settings_section"
class SettingProminence(str, Enum):
CRITICAL = "critical"
MAJOR = "major"
MINOR = "minor"
class SettingsSectionMetadata(BaseModel):
key: str
label: str | None = None
variant: str | None = None
class SettingsFieldMetadata(BaseModel):
label: str | None = None
prominence: SettingProminence = SettingProminence.MINOR
depends_on: tuple[str, ...] = ()
variant: str | None = None
"""When set, the field only applies to the named ``AgentSettings``
variant (``"llm"`` or ``"acp"``). Fields with ``variant=None`` are
shown regardless of the active ``agent_kind``."""
def field_meta(
prominence: SettingProminence = SettingProminence.MINOR,
*,
label: str | None = None,
depends_on: tuple[str, ...] = (),
) -> JsonDict:
"""Build a ``json_schema_extra`` dict for a Pydantic ``Field``.
Example::
model: str = Field(
..., json_schema_extra=field_meta(SettingProminence.CRITICAL)
)
"""
metadata: JsonDict = SettingsFieldMetadata(
label=label,
prominence=prominence,
depends_on=depends_on,
).model_dump(mode="json")
return {SETTINGS_METADATA_KEY: metadata}