Spaces:
Running
Running
Format some parameters as <textarea>.
Browse files- server/llm_ops.py +2 -2
- server/ops.py +12 -3
- web/src/NodeParameter.svelte +6 -1
server/llm_ops.py
CHANGED
@@ -15,11 +15,11 @@ def chat(*args, **kwargs):
|
|
15 |
return CACHE[key]
|
16 |
|
17 |
@ops.op("Input")
|
18 |
-
def input(*, filename:
|
19 |
return pd.read_csv(filename).rename(columns={key: 'text'})
|
20 |
|
21 |
@ops.op("Create prompt")
|
22 |
-
def create_prompt(input, *, template:
|
23 |
assert template, 'Please specify the template. Refer to columns using their names in uppercase.'
|
24 |
df = input.copy()
|
25 |
prompts = []
|
|
|
15 |
return CACHE[key]
|
16 |
|
17 |
@ops.op("Input")
|
18 |
+
def input(*, filename: ops.PathStr, key: str):
|
19 |
return pd.read_csv(filename).rename(columns={key: 'text'})
|
20 |
|
21 |
@ops.op("Create prompt")
|
22 |
+
def create_prompt(input, *, template: ops.LongStr):
|
23 |
assert template, 'Please specify the template. Refer to columns using their names in uppercase.'
|
24 |
df = input.copy()
|
25 |
prompts = []
|
server/ops.py
CHANGED
@@ -15,12 +15,21 @@ typeof = type # We have some arguments called "type".
|
|
15 |
def type_to_json(t):
|
16 |
if isinstance(t, type) and issubclass(t, enum.Enum):
|
17 |
return {'enum': list(t.__members__.keys())}
|
18 |
-
if
|
19 |
-
return
|
20 |
return {'type': str(t)}
|
21 |
Type = Annotated[
|
22 |
typing.Any, pydantic.PlainSerializer(type_to_json, return_type=dict)
|
23 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
class BaseConfig(pydantic.BaseModel):
|
25 |
model_config = pydantic.ConfigDict(
|
26 |
arbitrary_types_allowed=True,
|
@@ -40,7 +49,7 @@ class Parameter(BaseConfig):
|
|
40 |
|
41 |
@staticmethod
|
42 |
def collapsed(name, default, type=None):
|
43 |
-
return Parameter.basic(name, default,
|
44 |
|
45 |
@staticmethod
|
46 |
def basic(name, default=None, type=None):
|
|
|
15 |
def type_to_json(t):
|
16 |
if isinstance(t, type) and issubclass(t, enum.Enum):
|
17 |
return {'enum': list(t.__members__.keys())}
|
18 |
+
if getattr(t, '__metadata__', None):
|
19 |
+
return t.__metadata__[0]
|
20 |
return {'type': str(t)}
|
21 |
Type = Annotated[
|
22 |
typing.Any, pydantic.PlainSerializer(type_to_json, return_type=dict)
|
23 |
]
|
24 |
+
LongStr = Annotated[
|
25 |
+
str, {'format': 'textarea'}
|
26 |
+
]
|
27 |
+
PathStr = Annotated[
|
28 |
+
str, {'format': 'path'}
|
29 |
+
]
|
30 |
+
CollapsedStr = Annotated[
|
31 |
+
str, {'format': 'collapsed'}
|
32 |
+
]
|
33 |
class BaseConfig(pydantic.BaseModel):
|
34 |
model_config = pydantic.ConfigDict(
|
35 |
arbitrary_types_allowed=True,
|
|
|
49 |
|
50 |
@staticmethod
|
51 |
def collapsed(name, default, type=None):
|
52 |
+
return Parameter.basic(name, default, CollapsedStr)
|
53 |
|
54 |
@staticmethod
|
55 |
def basic(name, default=None, type=None):
|
web/src/NodeParameter.svelte
CHANGED
@@ -7,10 +7,15 @@
|
|
7 |
|
8 |
<label class="param">
|
9 |
<span class="param-name">{name.replace(/_/g, ' ')}</span>
|
10 |
-
{#if meta?.type?.collapsed}
|
11 |
<button class="collapsed-param form-control form-control-sm">
|
12 |
⋯
|
13 |
</button>
|
|
|
|
|
|
|
|
|
|
|
14 |
{:else if meta?.type?.enum}
|
15 |
<select class="form-select form-select-sm"
|
16 |
value={value || meta.type.enum[0]}
|
|
|
7 |
|
8 |
<label class="param">
|
9 |
<span class="param-name">{name.replace(/_/g, ' ')}</span>
|
10 |
+
{#if meta?.type?.format === 'collapsed'}
|
11 |
<button class="collapsed-param form-control form-control-sm">
|
12 |
⋯
|
13 |
</button>
|
14 |
+
{:else if meta?.type?.format === 'textarea'}
|
15 |
+
<textarea class="form-control form-control-sm"
|
16 |
+
value={value}
|
17 |
+
on:change={(evt) => onChange(evt.currentTarget.value)}
|
18 |
+
/>
|
19 |
{:else if meta?.type?.enum}
|
20 |
<select class="form-select form-select-sm"
|
21 |
value={value || meta.type.enum[0]}
|