@swiss-ai-hub/web 0.320.0 → 0.321.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/components/FormKit/AgentSelector.vue +20 -7
  2. package/components/FormKit/Repeater.vue +1 -4
  3. package/components/FormKit/VectorStoreInput.vue +43 -6
  4. package/components/Knowledge/Database/CreateModal.vue +315 -0
  5. package/components/Knowledge/Database/EmptyCard.vue +34 -0
  6. package/components/Knowledge/DeleteConfirmModal.vue +87 -0
  7. package/components/Knowledge/Namespace/Card.vue +18 -0
  8. package/components/Knowledge/Namespace/CreateModal.vue +11 -3
  9. package/components/Role/AccessCapabilities.vue +4 -4
  10. package/components/Role/AccessCapabilityGroup.vue +22 -6
  11. package/components/Role/AccessRulesEditor.vue +15 -12
  12. package/composables/app/useAppVersion.ts +31 -33
  13. package/composables/auth/useAuth.ts +3 -11
  14. package/composables/document/useCreateDatabase.ts +21 -0
  15. package/composables/document/useDeleteDatabase.ts +29 -0
  16. package/composables/document/useDeleteDocument.ts +1 -1
  17. package/composables/document/useDeleteDocuments.ts +1 -1
  18. package/composables/document/useDeleteNamespace.ts +30 -0
  19. package/composables/document/useIngestors.ts +23 -0
  20. package/composables/form/useCreateInstanceForm.ts +2 -2
  21. package/composables/form/useFormKitTransform.ts +44 -15
  22. package/formkit.config.ts +24 -1
  23. package/i18n/locales/de.yaml +60 -5
  24. package/i18n/locales/en.yaml +57 -3
  25. package/i18n/locales/fr.yaml +58 -3
  26. package/i18n/locales/it.yaml +60 -3
  27. package/middleware/agent-admin.ts +31 -0
  28. package/package.json +1 -1
  29. package/pages/[tenant]/service/agents.vue +3 -0
  30. package/pages/[tenant]/service/knowledge/[db]/[namespace]/[document_id].vue +12 -5
  31. package/pages/[tenant]/service/knowledge.vue +138 -0
  32. package/plugins/0.runtime-config.client.ts +5 -0
  33. package/plugins/oidc-client.ts +1 -1
  34. package/sdk/client/index.ts +29 -2
  35. package/sdk/client/schemas.gen.ts +641 -77
  36. package/sdk/client/sdk.gen.ts +159 -1
  37. package/sdk/client/types.gen.ts +543 -75
  38. package/plugins/keycloak-client.ts +0 -41
@@ -495,7 +495,7 @@ export const AgentClassDTOSchema = {
495
495
  "FormKit elements defining the agent configuration form. Default values are embedded in the elements themselves.",
496
496
  },
497
497
  agent_config_specs: {
498
- $ref: "#/components/schemas/AgentConfigSpecs",
498
+ $ref: "#/components/schemas/ConfigSpecs",
499
499
  description:
500
500
  "Validation specification including the JSON schema for form submissions. Used by ModelCreationService to create Pydantic models for validation.",
501
501
  },
@@ -737,29 +737,6 @@ export const AgentConfigDTOSchema = {
737
737
  "Encapsulates the data transfer object for an agent INSTANCE's configuration.\n\nContains instance-level data (agent_id, name, description, icon) and the\nconfiguration form. Values come from both:\n- AgentClassEntity: class-level form schema\n- AgentConfigEntityDocument: instance-specific name, description, icon, agent_id\n\nNOTE: This represents config for an INSTANCE (with agent_id), not an agent CLASS.",
738
738
  } as const;
739
739
 
740
- export const AgentConfigSpecsSchema = {
741
- properties: {
742
- agent_class: {
743
- type: "string",
744
- title: "Agent Class",
745
- description: "The class name of the agent.",
746
- },
747
- agent_config_schema: {
748
- additionalProperties: true,
749
- type: "object",
750
- title: "Agent Config Schema",
751
- description:
752
- "JSON schema for validating form submissions. Generated from the agent's configurable fields via to_configurable_submission_model().",
753
- default: {},
754
- },
755
- },
756
- type: "object",
757
- required: ["agent_class"],
758
- title: "AgentConfigSpecs",
759
- description:
760
- "Validation specification for agent configuration form submissions.\n\nContains ONLY the agent class identifier and JSON schema for validation.\nInstance-level fields (name, description, icon, agent_id) are stored\nseparately in AgentConfigEntityDocument and provided by the Agent class.\n\nThe JSON schema is generated from the agent's configurable fields via\nto_configurable_submission_model() and is used to validate form submissions.",
761
- } as const;
762
-
763
740
  export const AgentEventSchema = {
764
741
  properties: {
765
742
  event_id: {
@@ -1015,6 +992,12 @@ export const AgentInTheLoopExceptionEventSchema = {
1015
992
  description:
1016
993
  "The exception event from the delegated agent containing error details and failure context.",
1017
994
  },
995
+ request_event_id: {
996
+ type: "string",
997
+ title: "Request Event Id",
998
+ description:
999
+ "`event_id` of the `AgentInTheLoopRequestEvent` that failed. Carried here for the same reason the response carries it — a fan-out caller that cannot attribute a failure cannot complete its batch.",
1000
+ },
1018
1001
  _event_name: {
1019
1002
  type: "string",
1020
1003
  title: "Event Name",
@@ -1035,7 +1018,12 @@ export const AgentInTheLoopExceptionEventSchema = {
1035
1018
  },
1036
1019
  additionalProperties: true,
1037
1020
  type: "object",
1038
- required: ["exception_event", "_event_name", "_parent_event_names"],
1021
+ required: [
1022
+ "exception_event",
1023
+ "request_event_id",
1024
+ "_event_name",
1025
+ "_parent_event_names",
1026
+ ],
1039
1027
  title: "AgentInTheLoopExceptionEvent",
1040
1028
  description:
1041
1029
  "An error response from an agent when a delegated task fails.\n\n### Why AgentInTheLoopExceptionEvent?\nWhen an agent encounters an error during a delegated task, this event:\n- Signals workflow disruption (since it's a `ControlEvent`), allowing error handling in the original agent\n- Is visible to the UI (since it's also a `DisplayEvent`), enabling monitoring and debugging of agent failures\n- Provides a dedicated error channel separate from successful responses",
@@ -1119,9 +1107,22 @@ export const AgentInTheLoopRequestEventSchema = {
1119
1107
  type: "boolean",
1120
1108
  title: "Share Run Id",
1121
1109
  description:
1122
- "Whether to share the run context with the other agent. Warning: In almost all cases, you will not want to share the run!",
1110
+ "Whether to share the run context with the other agent. Warning: In almost all cases, you will not want to share the run! The response subscription is scoped to the delegated run id, so sharing it makes every subscriber of a fan-out fire on every delegate.",
1123
1111
  default: false,
1124
1112
  },
1113
+ timeout_seconds: {
1114
+ anyOf: [
1115
+ {
1116
+ type: "number",
1117
+ },
1118
+ {
1119
+ type: "null",
1120
+ },
1121
+ ],
1122
+ title: "Timeout Seconds",
1123
+ description:
1124
+ "How long to wait for the delegated agent before synthesizing a failure. `None` (the default) waits forever, which is what a delegate that never starts — an offline agent, a mistyped agent_id — costs the caller: no stop event is ever published, so the caller's run never resumes. Set it when the caller cannot tolerate that, and note it only covers a delegate that does not answer: the timer lives in the caller's dispatcher process, so it dies with the response subscription it guards.",
1125
+ },
1125
1126
  _event_name: {
1126
1127
  type: "string",
1127
1128
  title: "Event Name",
@@ -1192,6 +1193,12 @@ export const AgentInTheLoopResponseEventSchema = {
1192
1193
  description:
1193
1194
  "The stop event from the delegated agent containing the task results and marks the completion.",
1194
1195
  },
1196
+ request_event_id: {
1197
+ type: "string",
1198
+ title: "Request Event Id",
1199
+ description:
1200
+ "`event_id` of the `AgentInTheLoopRequestEvent` this answer belongs to. The only thing that tells a caller which delegated answer is which: a run that delegates once can infer it, but a fan-out receives N of these on one topic and nothing else on the payload distinguishes them.",
1201
+ },
1195
1202
  _event_name: {
1196
1203
  type: "string",
1197
1204
  title: "Event Name",
@@ -1212,7 +1219,12 @@ export const AgentInTheLoopResponseEventSchema = {
1212
1219
  },
1213
1220
  additionalProperties: true,
1214
1221
  type: "object",
1215
- required: ["stop_event", "_event_name", "_parent_event_names"],
1222
+ required: [
1223
+ "stop_event",
1224
+ "request_event_id",
1225
+ "_event_name",
1226
+ "_parent_event_names",
1227
+ ],
1216
1228
  title: "AgentInTheLoopResponseEvent",
1217
1229
  description:
1218
1230
  "A response from an agent after completing a delegated task.\n\n### Why AgentInTheLoopResponseEvent?\nWhen an agent completes a task delegated through an `AgentInTheLoopRequestEvent`, the response:\n- Influences the workflow (since it's a `ControlEvent`), allowing the original agent to resume based on the result\n- Is visible to the UI (since it's also a `DisplayEvent`), enabling monitoring of agent interactions",
@@ -1499,6 +1511,19 @@ export const AgentSelectorSchema = {
1499
1511
  description:
1500
1512
  "Optional filter: only show agent classes that accept this start event type. Matches against event_name or event_parents in the agent's start_events.",
1501
1513
  },
1514
+ agentClass: {
1515
+ anyOf: [
1516
+ {
1517
+ type: "string",
1518
+ },
1519
+ {
1520
+ type: "null",
1521
+ },
1522
+ ],
1523
+ title: "Agentclass",
1524
+ description:
1525
+ "Pin the selection to one agent class. The class dropdown is not rendered and the profile dropdown lists only that class's profiles. Use it when the config already knows which blueprint answers — a dropdown offering one choice asks the admin to make a decision that was never theirs.",
1526
+ },
1502
1527
  classPlaceholder: {
1503
1528
  anyOf: [
1504
1529
  {
@@ -1538,6 +1563,8 @@ export const AgentSelectorSchema = {
1538
1563
  validation: {
1539
1564
  type: "string",
1540
1565
  title: "Validation",
1566
+ description:
1567
+ "Emits `agentRefRequired` where other elements emit FormKit's `required`.\n\nFormKit's `required` rule only asks whether a value is present, and this element's value is\nalways an `{agent_class, agent_id}` object. Picking a class alone emits a non-empty object with\na blank `agent_id`, which passes `required` and then delegates to a NATS wildcard at runtime.\n`agentRefRequired` (registered in the frontend FormKit config) looks at both halves.",
1541
1568
  readOnly: true,
1542
1569
  },
1543
1570
  },
@@ -1546,7 +1573,7 @@ export const AgentSelectorSchema = {
1546
1573
  required: ["label", "validation"],
1547
1574
  title: "AgentSelector",
1548
1575
  description:
1549
- 'A FormKit element for selecting an agent class and instance ID.\n\nThis element renders as a cascading selection:\n1. Agent class dropdown (loads from /api/v1/agents/classes)\n2. Agent ID dropdown (populated based on selected class from /api/v1/agents/classes/{class}/instances)\n\nThe output is a structured object containing both the class name and the instance ID:\n{"agent_class": str, "agent_id": str}\n\n### Optional Filtering by Start Event\n\nWhen `start_event` is specified, only agent classes that accept the given event type\nare shown. For example, `start_event="AskExpertStartEvent"` filters to only show agents\nwhose `start_events` contain an event with matching `event_name` or `event_parents`.\n\nThis is similar to ModelSelect\'s `mode` parameter for filtering by model type.\n\n### Form Duality\n\nWhen used with AgentRef, the form submission is validated directly into AgentRef:\n\n```python\nfrom swiss_ai_hub.core.form.elements.agent_selector import AgentSelector\nfrom swiss_ai_hub.core.form.forms.AgentRef import AgentRef\n\nclass MyConfig(Form):\n target_agent: Annotated[\n AgentRef | AgentSelector,\n Field(description="The target agent to invoke"),\n ]\n\n @classmethod\n def as_form(cls) -> "MyConfig":\n return cls(\n target_agent=AgentSelector(\n label=LocaleString(en="Target Agent", de="Ziel-Agent"),\n start_event="SomeStartEvent", # Optional filter\n ),\n )\n\n # Data mode - from submission:\n config = MyConfig(\n target_agent=AgentRef(\n agent_class="my_agent_class",\n agent_id="my_agent_id",\n ),\n )\n```',
1576
+ 'A FormKit element for selecting an agent class and instance ID.\n\nThis element renders as a cascading selection:\n1. Agent class dropdown (loads from /api/v1/agents/classes)\n2. Agent ID dropdown (populated based on selected class from /api/v1/agents/classes/{class}/instances)\n\nThe output is a structured object containing both the class name and the instance ID:\n{"agent_class": str, "agent_id": str}\n\n### Optional Filtering by Start Event\n\nWhen `start_event` is specified, only agent classes that accept the given event type\nare shown. For example, `start_event="AskExpertStartEvent"` filters to only show agents\nwhose `start_events` contain an event with matching `event_name` or `event_parents`.\n\nThis is similar to ModelSelect\'s `mode` parameter for filtering by model type.\n\n### Pinning to One Agent Class\n\nWhen `agent_class` is specified, the class dropdown is not rendered at all and the profile dropdown lists only\nthat class\'s profiles. `start_event` is redundant then — the class is already decided — so set one or the other.\n\n### Form Duality\n\nWhen used with AgentRef, the form submission is validated directly into AgentRef:\n\n```python\nfrom swiss_ai_hub.core.form.elements.agent_selector import AgentSelector\nfrom swiss_ai_hub.core.form.forms.AgentRef import AgentRef\n\nclass MyConfig(Form):\n target_agent: Annotated[\n AgentRef | AgentSelector,\n Field(description="The target agent to invoke"),\n ]\n\n @classmethod\n def as_form(cls) -> "MyConfig":\n return cls(\n target_agent=AgentSelector(\n label=LocaleString(en="Target Agent", de="Ziel-Agent"),\n start_event="SomeStartEvent", # Optional filter\n ),\n )\n\n # Data mode - from submission:\n config = MyConfig(\n target_agent=AgentRef(\n agent_class="my_agent_class",\n agent_id="my_agent_id",\n ),\n )\n```',
1550
1577
  } as const;
1551
1578
 
1552
1579
  export const AgentSuitabilityAcceptEventSchema = {
@@ -2266,6 +2293,19 @@ export const BaseStoreMemoryEventSchema = {
2266
2293
  title: "Deleted Relations",
2267
2294
  description: "Deleted relations",
2268
2295
  },
2296
+ llm_model_name: {
2297
+ anyOf: [
2298
+ {
2299
+ type: "string",
2300
+ },
2301
+ {
2302
+ type: "null",
2303
+ },
2304
+ ],
2305
+ title: "Llm Model Name",
2306
+ description:
2307
+ "Model that extracted these memories (issue #1590), or None when the write stored verbatim text. Carried on this event only, for observability — it is not stored in mem0's metadata, so it cannot be recovered from the memory record itself once this event is gone.",
2308
+ },
2269
2309
  _event_name: {
2270
2310
  type: "string",
2271
2311
  title: "Event Name",
@@ -2555,10 +2595,31 @@ export const CapabilitySchema = {
2555
2595
  description:
2556
2596
  "Exact access rule that grants this capability, or null for read-only capabilities.",
2557
2597
  },
2598
+ companion_rules: {
2599
+ items: {
2600
+ type: "string",
2601
+ },
2602
+ type: "array",
2603
+ title: "Companion Rules",
2604
+ description:
2605
+ "Rules written *and* removed together with `rule`. A knowledge database's row carries `<rule>.>` here: its namespaces belong to it, and a `.>` rule never matches its own root, so the row needs both forms to mean 'this whole database'.",
2606
+ default: [],
2607
+ },
2608
+ revoked_rules: {
2609
+ items: {
2610
+ type: "string",
2611
+ },
2612
+ type: "array",
2613
+ title: "Revoked Rules",
2614
+ description:
2615
+ "Rules removed with `rule`, never written with it. An agent class's row carries `<rule>.>` here: granting it would hand over every profile of the class in the deployment, other tenants' included, but a ceiling written before that was understood still holds it.",
2616
+ default: [],
2617
+ },
2558
2618
  granted: {
2559
2619
  type: "boolean",
2560
2620
  title: "Granted",
2561
- description: "Whether the draft rules grant this capability.",
2621
+ description:
2622
+ "Whether the draft rules grant `rule` and every `companion_rules` entry.",
2562
2623
  },
2563
2624
  locked: {
2564
2625
  type: "boolean",
@@ -5342,6 +5403,29 @@ export const CompletionUsageSchema = {
5342
5403
  description: "Usage statistics for the completion request.",
5343
5404
  } as const;
5344
5405
 
5406
+ export const ConfigSpecsSchema = {
5407
+ properties: {
5408
+ config_class: {
5409
+ type: "string",
5410
+ title: "Config Class",
5411
+ description: "The class name of the configuration this schema describes.",
5412
+ default: "",
5413
+ },
5414
+ config_schema: {
5415
+ additionalProperties: true,
5416
+ type: "object",
5417
+ title: "Config Schema",
5418
+ description:
5419
+ "JSON schema for validating form submissions. Generated from the configuration's configurable fields via to_configurable_submission_model().",
5420
+ default: {},
5421
+ },
5422
+ },
5423
+ type: "object",
5424
+ title: "ConfigSpecs",
5425
+ description:
5426
+ "Validation specification for a form-duality configuration, as announced by the service that owns it.\n\nCarries only the JSON schema the API validates submissions against, so a configuration class defined in\nan agent, process or pipeline container can be enforced by the API without that class being installed there.",
5427
+ } as const;
5428
+
5345
5429
  export const ContextInsufficientRejectEventSchema = {
5346
5430
  properties: {
5347
5431
  event_id: {
@@ -5878,6 +5962,28 @@ export const CreateAgentInstanceRequestSchema = {
5878
5962
  "Request body for creating a new agent instance.\nThe agent_class is provided in the URL path, not in the request body.",
5879
5963
  } as const;
5880
5964
 
5965
+ export const CreateDatabaseRequestSchema = {
5966
+ properties: {
5967
+ ingestor: {
5968
+ type: "string",
5969
+ title: "Ingestor",
5970
+ description:
5971
+ "The deployed ingestion pipeline that processes this database's documents. Valid values are served by GET /knowledge/ingestors.",
5972
+ default: "document_ingestion",
5973
+ },
5974
+ configuration: {
5975
+ additionalProperties: true,
5976
+ type: "object",
5977
+ title: "Configuration",
5978
+ description:
5979
+ "The database's configuration as submitted through the ingestor's announced form: its multilingual name and description plus every knob the pipeline declares. Validated against the ingestor's schema.",
5980
+ default: {},
5981
+ },
5982
+ },
5983
+ type: "object",
5984
+ title: "CreateDatabaseRequest",
5985
+ } as const;
5986
+
5881
5987
  export const CreateNamespaceRequestSchema = {
5882
5988
  properties: {
5883
5989
  folder_name: {
@@ -6521,6 +6627,18 @@ export const DatabaseDTOSchema = {
6521
6627
  title: "Auto Sync",
6522
6628
  description: "Whether this database auto-syncs namespaces",
6523
6629
  },
6630
+ deletable: {
6631
+ type: "boolean",
6632
+ title: "Deletable",
6633
+ description:
6634
+ "Whether the database itself may be deleted; false for auto-synced databases, whose content is owned by a source, and for the legacy default_rag/shared_rag databases, which are re-provisioned from deployment configuration. Namespaces and individual documents are governed separately and stay deletable.",
6635
+ },
6636
+ ingestor: {
6637
+ type: "string",
6638
+ title: "Ingestor",
6639
+ description:
6640
+ "Identifier of the ingestion pipeline that processes this database, as served by GET /knowledge/ingestors. Visible to anyone who can see the database, so a database-level rule holder learns how it is configured without seeing its namespaces.",
6641
+ },
6524
6642
  namespaces: {
6525
6643
  items: {
6526
6644
  $ref: "#/components/schemas/NamespaceDTO",
@@ -6531,10 +6649,73 @@ export const DatabaseDTOSchema = {
6531
6649
  },
6532
6650
  },
6533
6651
  type: "object",
6534
- required: ["name", "display_name", "auto_sync", "namespaces"],
6652
+ required: [
6653
+ "name",
6654
+ "display_name",
6655
+ "auto_sync",
6656
+ "deletable",
6657
+ "ingestor",
6658
+ "namespaces",
6659
+ ],
6535
6660
  title: "DatabaseDTO",
6536
6661
  } as const;
6537
6662
 
6663
+ export const DatabaseResponseSchema = {
6664
+ properties: {
6665
+ name: {
6666
+ type: "string",
6667
+ title: "Name",
6668
+ description:
6669
+ "The database name (also the Milvus collection and Mongo store name).",
6670
+ },
6671
+ bucket_name: {
6672
+ type: "string",
6673
+ title: "Bucket Name",
6674
+ description: "The S3 bucket / data lake container name.",
6675
+ },
6676
+ ingestor: {
6677
+ type: "string",
6678
+ title: "Ingestor",
6679
+ description: "The deployed ingestion pipeline that owns this database.",
6680
+ },
6681
+ configuration: {
6682
+ additionalProperties: true,
6683
+ type: "object",
6684
+ title: "Configuration",
6685
+ description:
6686
+ "The ingestor's settings for this database, as validated against its announced schema.",
6687
+ default: {},
6688
+ },
6689
+ display_name: {
6690
+ anyOf: [
6691
+ {
6692
+ type: "string",
6693
+ },
6694
+ {
6695
+ type: "null",
6696
+ },
6697
+ ],
6698
+ title: "Display Name",
6699
+ description: "A user-friendly display name for the database.",
6700
+ },
6701
+ description: {
6702
+ anyOf: [
6703
+ {
6704
+ type: "string",
6705
+ },
6706
+ {
6707
+ type: "null",
6708
+ },
6709
+ ],
6710
+ title: "Description",
6711
+ description: "A brief description of the database's contents.",
6712
+ },
6713
+ },
6714
+ type: "object",
6715
+ required: ["name", "bucket_name", "ingestor"],
6716
+ title: "DatabaseResponse",
6717
+ } as const;
6718
+
6538
6719
  export const DatasetSchema = {
6539
6720
  properties: {
6540
6721
  id: {
@@ -8505,7 +8686,7 @@ export const FullProcessInstanceDTOSchema = {
8505
8686
  "List of agent work events that the process can receive. Agent work events are used to trigger the execution of an agent.",
8506
8687
  },
8507
8688
  process_config_specs: {
8508
- $ref: "#/components/schemas/ProcessConfigSpecs",
8689
+ $ref: "#/components/schemas/ConfigSpecs",
8509
8690
  description:
8510
8691
  "Configuration specifications of the process class, including schema and parameters.",
8511
8692
  },
@@ -11395,6 +11576,151 @@ export const IngestedNodeSchema = {
11395
11576
  "A node represents a chunk of a document, like a paragraph, produced by a document parser and text splitter.\nThe attributes defined here are the minimal number of attributes that a node must have to ensure the\nUI can properly display it. Note that all attributes that are specific to text documents, like start_char_idx etc.\nmust be strictly optional, as we don't really know whether the node is indeed a text node. However, all attributes\nthat are purely technical, like the document_id to keep the back-ref to the ref_doc from which the node originates,\nare strictly necessary.",
11396
11577
  } as const;
11397
11578
 
11579
+ export const IngestorDTOSchema = {
11580
+ properties: {
11581
+ name: {
11582
+ type: "string",
11583
+ title: "Name",
11584
+ description:
11585
+ "Ingestor identifier, as served by GET /knowledge/ingestors.",
11586
+ },
11587
+ display_name: {
11588
+ anyOf: [
11589
+ {
11590
+ type: "string",
11591
+ },
11592
+ {
11593
+ type: "null",
11594
+ },
11595
+ ],
11596
+ title: "Display Name",
11597
+ description: "Localized name of the ingestion pipeline.",
11598
+ },
11599
+ description: {
11600
+ anyOf: [
11601
+ {
11602
+ type: "string",
11603
+ },
11604
+ {
11605
+ type: "null",
11606
+ },
11607
+ ],
11608
+ title: "Description",
11609
+ description: "Localized description of what the pipeline does.",
11610
+ },
11611
+ form: {
11612
+ items: {
11613
+ oneOf: [
11614
+ {
11615
+ $ref: "#/components/schemas/HtmlElement",
11616
+ },
11617
+ {
11618
+ $ref: "#/components/schemas/AgentSelector",
11619
+ },
11620
+ {
11621
+ $ref: "#/components/schemas/CascadeSelect",
11622
+ },
11623
+ {
11624
+ $ref: "#/components/schemas/Checkbox",
11625
+ },
11626
+ {
11627
+ $ref: "#/components/schemas/ChipsInput",
11628
+ },
11629
+ {
11630
+ $ref: "#/components/schemas/ColorPicker",
11631
+ },
11632
+ {
11633
+ $ref: "#/components/schemas/CronInput",
11634
+ },
11635
+ {
11636
+ $ref: "#/components/schemas/DatePicker",
11637
+ },
11638
+ {
11639
+ $ref: "#/components/schemas/Group",
11640
+ },
11641
+ {
11642
+ $ref: "#/components/schemas/IconSelector",
11643
+ },
11644
+ {
11645
+ $ref: "#/components/schemas/InputMask",
11646
+ },
11647
+ {
11648
+ $ref: "#/components/schemas/InputNumber",
11649
+ },
11650
+ {
11651
+ $ref: "#/components/schemas/InputOtp",
11652
+ },
11653
+ {
11654
+ $ref: "#/components/schemas/InputText",
11655
+ },
11656
+ {
11657
+ $ref: "#/components/schemas/KnowledgeDatabaseSelector",
11658
+ },
11659
+ {
11660
+ $ref: "#/components/schemas/Knob",
11661
+ },
11662
+ {
11663
+ $ref: "#/components/schemas/Listbox",
11664
+ },
11665
+ {
11666
+ $ref: "#/components/schemas/LocaleInput",
11667
+ },
11668
+ {
11669
+ $ref: "#/components/schemas/ModelSelect",
11670
+ },
11671
+ {
11672
+ $ref: "#/components/schemas/MultiSelect",
11673
+ },
11674
+ {
11675
+ $ref: "#/components/schemas/Password",
11676
+ },
11677
+ {
11678
+ $ref: "#/components/schemas/RadioButton",
11679
+ },
11680
+ {
11681
+ $ref: "#/components/schemas/Rating",
11682
+ },
11683
+ {
11684
+ $ref: "#/components/schemas/Repeater",
11685
+ },
11686
+ {
11687
+ $ref: "#/components/schemas/Select",
11688
+ },
11689
+ {
11690
+ $ref: "#/components/schemas/SelectButton",
11691
+ },
11692
+ {
11693
+ $ref: "#/components/schemas/Slider",
11694
+ },
11695
+ {
11696
+ $ref: "#/components/schemas/TenantSelect",
11697
+ },
11698
+ {
11699
+ $ref: "#/components/schemas/Textarea",
11700
+ },
11701
+ {
11702
+ $ref: "#/components/schemas/ToggleButton",
11703
+ },
11704
+ {
11705
+ $ref: "#/components/schemas/ToggleSwitch",
11706
+ },
11707
+ {
11708
+ $ref: "#/components/schemas/VectorStoreInput",
11709
+ },
11710
+ ],
11711
+ },
11712
+ type: "array",
11713
+ title: "Form",
11714
+ description:
11715
+ "FormKit elements a database of this ingestor is configured through, localized.",
11716
+ default: [],
11717
+ },
11718
+ },
11719
+ type: "object",
11720
+ required: ["name", "display_name", "description"],
11721
+ title: "IngestorDTO",
11722
+ } as const;
11723
+
11398
11724
  export const InputAudioSchema = {
11399
11725
  properties: {
11400
11726
  data: {
@@ -17741,7 +18067,7 @@ export const ProcessClassDTOSchema = {
17741
18067
  description: "FormKit elements defining the configuration form.",
17742
18068
  },
17743
18069
  process_config_specs: {
17744
- $ref: "#/components/schemas/ProcessConfigSpecs",
18070
+ $ref: "#/components/schemas/ConfigSpecs",
17745
18071
  description:
17746
18072
  "Configuration specifications of the process class, including schema and parameters.",
17747
18073
  },
@@ -17839,29 +18165,6 @@ export const ProcessConfigDTOSchema = {
17839
18165
  title: "ProcessConfigDTO",
17840
18166
  } as const;
17841
18167
 
17842
- export const ProcessConfigSpecsSchema = {
17843
- properties: {
17844
- process_class: {
17845
- type: "string",
17846
- title: "Process Class",
17847
- description: "The class name of the process.",
17848
- default: "",
17849
- },
17850
- process_config_schema: {
17851
- additionalProperties: true,
17852
- type: "object",
17853
- title: "Process Config Schema",
17854
- description:
17855
- "JSON schema for validating form submissions. Generated from the process's configurable fields via to_configurable_submission_model().",
17856
- default: {},
17857
- },
17858
- },
17859
- type: "object",
17860
- title: "ProcessConfigSpecs",
17861
- description:
17862
- "Validation specification for process configuration form submissions.\n\nContains the process class identifier and JSON schema for validation.\nInstance-level fields (name, description, icon, process_id) are stored\nseparately in ProcessConfigEntityDocument and provided by the Process class.\n\nThe JSON schema is generated from the process's configurable fields via\nto_configurable_submission_model() and is used to validate form submissions.",
17863
- } as const;
17864
-
17865
18168
  export const ProcessHealthChecksSchema = {
17866
18169
  properties: {
17867
18170
  running: {
@@ -18276,10 +18579,12 @@ export const PromptTokensDetailsSchema = {
18276
18579
  export const RAGFailureReasonSchema = {
18277
18580
  type: "string",
18278
18581
  enum: [
18582
+ "condensation_empty",
18279
18583
  "context_insufficient",
18280
18584
  "expert_declined",
18281
18585
  "expert_errored",
18282
18586
  "few_shot_rejected",
18587
+ "input_too_large",
18283
18588
  ],
18284
18589
  title: "RAGFailureReason",
18285
18590
  description: "Why a RAG run failed to produce a useful answer.",
@@ -18404,8 +18709,16 @@ export const RAGStartEventSchema = {
18404
18709
  default: "de",
18405
18710
  },
18406
18711
  user: {
18407
- $ref: "#/components/schemas/UserIdentity",
18408
- description: "User on whose behalf the RAG run is executed.",
18712
+ anyOf: [
18713
+ {
18714
+ $ref: "#/components/schemas/UserIdentity",
18715
+ },
18716
+ {
18717
+ type: "null",
18718
+ },
18719
+ ],
18720
+ description:
18721
+ "User on whose behalf the RAG run is executed, when there is one. Optional because a delegating agent forwards whatever identity its own start event carries, and a scheduled run carries none — there is no service account to substitute. The RAG agent's user-memory steps are what read it, and they are skipped without it rather than attributing one caller's memories to a shared identity.",
18409
18722
  },
18410
18723
  messages: {
18411
18724
  items: {
@@ -18486,12 +18799,7 @@ export const RAGStartEventSchema = {
18486
18799
  },
18487
18800
  additionalProperties: true,
18488
18801
  type: "object",
18489
- required: [
18490
- "user",
18491
- "selected_namespaces",
18492
- "_event_name",
18493
- "_parent_event_names",
18494
- ],
18802
+ required: ["selected_namespaces", "_event_name", "_parent_event_names"],
18495
18803
  title: "RAGStartEvent",
18496
18804
  description:
18497
18805
  "Namespace-aware start event for the RAG agent.\n\n`RAGStartEvent` is intended for non-chat publishers: custom domain front-ends that run their own namespace\nselection UI, or other agents delegating to RAG via `AgentInTheLoop`.",
@@ -21214,7 +21522,7 @@ export const StandaloneQuestionCondenserEventSchema = {
21214
21522
  required: ["condensed_chat_message", "_event_name", "_parent_event_names"],
21215
21523
  title: "StandaloneQuestionCondenserEvent",
21216
21524
  description:
21217
- "Event to condense chat messages into a single standalone question as a chat message.",
21525
+ "Event to condense chat messages into a single standalone question as a chat message.\n\nA blank condensation is refused by `condense_standalone_question`, before an event of this type can be\nbuilt. The invariant is deliberately *not* also a `field_validator` here: a validator on an event is not\nonly a publish-time contract, it runs on every `model_validate`, which is how the immutable log is read\nback — JetStream replays the whole stream on each agent start, and the API rebuilds a thread's timeline\nfrom the persisted display copy. Blank condensations did occur before the producer-side raise existed, so\nvalidating on read makes that history undeserializable: replay drops the event and\n`EventService.get_events_in_thread` fails the whole thread.",
21218
21526
  } as const;
21219
21527
 
21220
21528
  export const StartEventSchema = {
@@ -21411,6 +21719,19 @@ export const StoreOrganizationMemoryEventSchema = {
21411
21719
  title: "Deleted Relations",
21412
21720
  description: "Deleted relations",
21413
21721
  },
21722
+ llm_model_name: {
21723
+ anyOf: [
21724
+ {
21725
+ type: "string",
21726
+ },
21727
+ {
21728
+ type: "null",
21729
+ },
21730
+ ],
21731
+ title: "Llm Model Name",
21732
+ description:
21733
+ "Model that extracted these memories (issue #1590), or None when the write stored verbatim text. Carried on this event only, for observability — it is not stored in mem0's metadata, so it cannot be recovered from the memory record itself once this event is gone.",
21734
+ },
21414
21735
  _event_name: {
21415
21736
  type: "string",
21416
21737
  title: "Event Name",
@@ -21519,6 +21840,19 @@ export const StoreUserMemoryEventSchema = {
21519
21840
  title: "Deleted Relations",
21520
21841
  description: "Deleted relations",
21521
21842
  },
21843
+ llm_model_name: {
21844
+ anyOf: [
21845
+ {
21846
+ type: "string",
21847
+ },
21848
+ {
21849
+ type: "null",
21850
+ },
21851
+ ],
21852
+ title: "Llm Model Name",
21853
+ description:
21854
+ "Model that extracted these memories (issue #1590), or None when the write stored verbatim text. Carried on this event only, for observability — it is not stored in mem0's metadata, so it cannot be recovered from the memory record itself once this event is gone.",
21855
+ },
21522
21856
  _event_name: {
21523
21857
  type: "string",
21524
21858
  title: "Event Name",
@@ -24543,7 +24877,7 @@ export const VectorStoreInputSchema = {
24543
24877
  required: ["label", "validation"],
24544
24878
  title: "VectorStoreInput",
24545
24879
  description:
24546
- 'A FormKit element for selecting a vector store collection, namespaces, and\nthe metadata keys publishers are allowed to filter on at query time.\n\nThis element renders as three controls:\n1. Database dropdown (loads from /api/v1/knowledge/databases)\n2. Namespace multi-select (populated based on selected database)\n3. Free-form chips input for `allowed_metadata_filter_fields`\n\nThe output matches the three configurable fields of `MilvusVectorStoreConfig`:\n{\n "collection_name": str,\n "index_namespaces": list[str],\n "allowed_metadata_filter_fields": list[str],\n}\n\n### Form Duality\nWhen used with MilvusVectorStoreConfig, the form submission is validated\ndirectly into MilvusVectorStoreConfig (connection settings are read from\nMilvusSettings at runtime).\n\n### Example Usage\n```python\nfrom swiss_ai_hub.core.form.elements.vector_store_input import VectorStoreInput\nfrom swiss_ai_hub.core.persistence.rag.vectors.stores.milvus_vector_store_config import MilvusVectorStoreConfig\n\nclass MyRetrieverConfig(Form):\n vector_store: Annotated[\n MilvusVectorStoreConfig | VectorStoreInput,\n Field(description="The vector store configuration"),\n ]\n\n# Form mode - for rendering:\nconfig = MyRetrieverConfig(\n vector_store=VectorStoreInput(\n label=LocaleString(en="Vector Store", de="Vektorspeicher"),\n ),\n)\n\n# Data mode - from submission (Pydantic validates into MilvusVectorStoreConfig):\nconfig = MyRetrieverConfig(\n vector_store=MilvusVectorStoreConfig(\n collection_name="my-database",\n index_namespaces=["namespace1", "namespace2"],\n allowed_metadata_filter_fields=["department", "year"],\n ),\n)\n```',
24880
+ 'A FormKit element for selecting a vector store collection, namespaces, and\nthe metadata keys publishers are allowed to filter on at query time.\n\nThis element renders as three controls:\n1. Database dropdown (loads from /api/v1/knowledge/databases)\n2. "All namespaces" switch, or a namespace multi-select populated from the selected database\n3. Free-form chips input for `allowed_metadata_filter_fields`\n\nThe output matches the configurable fields of `MilvusVectorStoreConfig`:\n{\n "collection_name": str,\n "index_namespaces": list[str],\n "all_namespaces": bool,\n "allowed_metadata_filter_fields": list[str],\n}\n\n### Form Duality\nWhen used with MilvusVectorStoreConfig, the form submission is validated\ndirectly into MilvusVectorStoreConfig (connection settings are read from\nMilvusSettings at runtime).\n\n### Example Usage\n```python\nfrom swiss_ai_hub.core.form.elements.vector_store_input import VectorStoreInput\nfrom swiss_ai_hub.core.persistence.rag.vectors.stores.milvus_vector_store_config import MilvusVectorStoreConfig\n\nclass MyRetrieverConfig(Form):\n vector_store: Annotated[\n MilvusVectorStoreConfig | VectorStoreInput,\n Field(description="The vector store configuration"),\n ]\n\n# Form mode - for rendering:\nconfig = MyRetrieverConfig(\n vector_store=VectorStoreInput(\n label=LocaleString(en="Vector Store", de="Vektorspeicher"),\n ),\n)\n\n# Data mode - from submission (Pydantic validates into MilvusVectorStoreConfig):\nconfig = MyRetrieverConfig(\n vector_store=MilvusVectorStoreConfig(\n collection_name="my-database",\n index_namespaces=["namespace1", "namespace2"],\n allowed_metadata_filter_fields=["department", "year"],\n ),\n)\n```',
24547
24881
  } as const;
24548
24882
 
24549
24883
  export const VideoBlockSchema = {
@@ -25115,7 +25449,7 @@ export const AgentClassDTOWritableSchema = {
25115
25449
  "FormKit elements defining the agent configuration form. Default values are embedded in the elements themselves.",
25116
25450
  },
25117
25451
  agent_config_specs: {
25118
- $ref: "#/components/schemas/AgentConfigSpecs",
25452
+ $ref: "#/components/schemas/ConfigSpecs",
25119
25453
  description:
25120
25454
  "Validation specification including the JSON schema for form submissions. Used by ModelCreationService to create Pydantic models for validation.",
25121
25455
  },
@@ -25436,10 +25770,16 @@ export const AgentInTheLoopExceptionEventWritableSchema = {
25436
25770
  description:
25437
25771
  "The exception event from the delegated agent containing error details and failure context.",
25438
25772
  },
25773
+ request_event_id: {
25774
+ type: "string",
25775
+ title: "Request Event Id",
25776
+ description:
25777
+ "`event_id` of the `AgentInTheLoopRequestEvent` that failed. Carried here for the same reason the response carries it — a fan-out caller that cannot attribute a failure cannot complete its batch.",
25778
+ },
25439
25779
  },
25440
25780
  additionalProperties: true,
25441
25781
  type: "object",
25442
- required: ["exception_event"],
25782
+ required: ["exception_event", "request_event_id"],
25443
25783
  title: "AgentInTheLoopExceptionEvent",
25444
25784
  description:
25445
25785
  "An error response from an agent when a delegated task fails.\n\n### Why AgentInTheLoopExceptionEvent?\nWhen an agent encounters an error during a delegated task, this event:\n- Signals workflow disruption (since it's a `ControlEvent`), allowing error handling in the original agent\n- Is visible to the UI (since it's also a `DisplayEvent`), enabling monitoring and debugging of agent failures\n- Provides a dedicated error channel separate from successful responses",
@@ -25523,9 +25863,22 @@ export const AgentInTheLoopRequestEventWritableSchema = {
25523
25863
  type: "boolean",
25524
25864
  title: "Share Run Id",
25525
25865
  description:
25526
- "Whether to share the run context with the other agent. Warning: In almost all cases, you will not want to share the run!",
25866
+ "Whether to share the run context with the other agent. Warning: In almost all cases, you will not want to share the run! The response subscription is scoped to the delegated run id, so sharing it makes every subscriber of a fan-out fire on every delegate.",
25527
25867
  default: false,
25528
25868
  },
25869
+ timeout_seconds: {
25870
+ anyOf: [
25871
+ {
25872
+ type: "number",
25873
+ },
25874
+ {
25875
+ type: "null",
25876
+ },
25877
+ ],
25878
+ title: "Timeout Seconds",
25879
+ description:
25880
+ "How long to wait for the delegated agent before synthesizing a failure. `None` (the default) waits forever, which is what a delegate that never starts — an offline agent, a mistyped agent_id — costs the caller: no stop event is ever published, so the caller's run never resumes. Set it when the caller cannot tolerate that, and note it only covers a delegate that does not answer: the timer lives in the caller's dispatcher process, so it dies with the response subscription it guards.",
25881
+ },
25529
25882
  },
25530
25883
  additionalProperties: true,
25531
25884
  type: "object",
@@ -25574,10 +25927,16 @@ export const AgentInTheLoopResponseEventWritableSchema = {
25574
25927
  description:
25575
25928
  "The stop event from the delegated agent containing the task results and marks the completion.",
25576
25929
  },
25930
+ request_event_id: {
25931
+ type: "string",
25932
+ title: "Request Event Id",
25933
+ description:
25934
+ "`event_id` of the `AgentInTheLoopRequestEvent` this answer belongs to. The only thing that tells a caller which delegated answer is which: a run that delegates once can infer it, but a fan-out receives N of these on one topic and nothing else on the payload distinguishes them.",
25935
+ },
25577
25936
  },
25578
25937
  additionalProperties: true,
25579
25938
  type: "object",
25580
- required: ["stop_event"],
25939
+ required: ["stop_event", "request_event_id"],
25581
25940
  title: "AgentInTheLoopResponseEvent",
25582
25941
  description:
25583
25942
  "A response from an agent after completing a delegated task.\n\n### Why AgentInTheLoopResponseEvent?\nWhen an agent completes a task delegated through an `AgentInTheLoopRequestEvent`, the response:\n- Influences the workflow (since it's a `ControlEvent`), allowing the original agent to resume based on the result\n- Is visible to the UI (since it's also a `DisplayEvent`), enabling monitoring of agent interactions",
@@ -25803,6 +26162,19 @@ export const AgentSelectorWritableSchema = {
25803
26162
  description:
25804
26163
  "Optional filter: only show agent classes that accept this start event type. Matches against event_name or event_parents in the agent's start_events.",
25805
26164
  },
26165
+ agentClass: {
26166
+ anyOf: [
26167
+ {
26168
+ type: "string",
26169
+ },
26170
+ {
26171
+ type: "null",
26172
+ },
26173
+ ],
26174
+ title: "Agentclass",
26175
+ description:
26176
+ "Pin the selection to one agent class. The class dropdown is not rendered and the profile dropdown lists only that class's profiles. Use it when the config already knows which blueprint answers — a dropdown offering one choice asks the admin to make a decision that was never theirs.",
26177
+ },
25806
26178
  classPlaceholder: {
25807
26179
  anyOf: [
25808
26180
  {
@@ -25845,7 +26217,7 @@ export const AgentSelectorWritableSchema = {
25845
26217
  required: ["label"],
25846
26218
  title: "AgentSelector",
25847
26219
  description:
25848
- 'A FormKit element for selecting an agent class and instance ID.\n\nThis element renders as a cascading selection:\n1. Agent class dropdown (loads from /api/v1/agents/classes)\n2. Agent ID dropdown (populated based on selected class from /api/v1/agents/classes/{class}/instances)\n\nThe output is a structured object containing both the class name and the instance ID:\n{"agent_class": str, "agent_id": str}\n\n### Optional Filtering by Start Event\n\nWhen `start_event` is specified, only agent classes that accept the given event type\nare shown. For example, `start_event="AskExpertStartEvent"` filters to only show agents\nwhose `start_events` contain an event with matching `event_name` or `event_parents`.\n\nThis is similar to ModelSelect\'s `mode` parameter for filtering by model type.\n\n### Form Duality\n\nWhen used with AgentRef, the form submission is validated directly into AgentRef:\n\n```python\nfrom swiss_ai_hub.core.form.elements.agent_selector import AgentSelector\nfrom swiss_ai_hub.core.form.forms.AgentRef import AgentRef\n\nclass MyConfig(Form):\n target_agent: Annotated[\n AgentRef | AgentSelector,\n Field(description="The target agent to invoke"),\n ]\n\n @classmethod\n def as_form(cls) -> "MyConfig":\n return cls(\n target_agent=AgentSelector(\n label=LocaleString(en="Target Agent", de="Ziel-Agent"),\n start_event="SomeStartEvent", # Optional filter\n ),\n )\n\n # Data mode - from submission:\n config = MyConfig(\n target_agent=AgentRef(\n agent_class="my_agent_class",\n agent_id="my_agent_id",\n ),\n )\n```',
26220
+ 'A FormKit element for selecting an agent class and instance ID.\n\nThis element renders as a cascading selection:\n1. Agent class dropdown (loads from /api/v1/agents/classes)\n2. Agent ID dropdown (populated based on selected class from /api/v1/agents/classes/{class}/instances)\n\nThe output is a structured object containing both the class name and the instance ID:\n{"agent_class": str, "agent_id": str}\n\n### Optional Filtering by Start Event\n\nWhen `start_event` is specified, only agent classes that accept the given event type\nare shown. For example, `start_event="AskExpertStartEvent"` filters to only show agents\nwhose `start_events` contain an event with matching `event_name` or `event_parents`.\n\nThis is similar to ModelSelect\'s `mode` parameter for filtering by model type.\n\n### Pinning to One Agent Class\n\nWhen `agent_class` is specified, the class dropdown is not rendered at all and the profile dropdown lists only\nthat class\'s profiles. `start_event` is redundant then — the class is already decided — so set one or the other.\n\n### Form Duality\n\nWhen used with AgentRef, the form submission is validated directly into AgentRef:\n\n```python\nfrom swiss_ai_hub.core.form.elements.agent_selector import AgentSelector\nfrom swiss_ai_hub.core.form.forms.AgentRef import AgentRef\n\nclass MyConfig(Form):\n target_agent: Annotated[\n AgentRef | AgentSelector,\n Field(description="The target agent to invoke"),\n ]\n\n @classmethod\n def as_form(cls) -> "MyConfig":\n return cls(\n target_agent=AgentSelector(\n label=LocaleString(en="Target Agent", de="Ziel-Agent"),\n start_event="SomeStartEvent", # Optional filter\n ),\n )\n\n # Data mode - from submission:\n config = MyConfig(\n target_agent=AgentRef(\n agent_class="my_agent_class",\n agent_id="my_agent_id",\n ),\n )\n```',
25849
26221
  } as const;
25850
26222
 
25851
26223
  export const AgentSuitabilityAcceptEventWritableSchema = {
@@ -26279,6 +26651,19 @@ export const BaseStoreMemoryEventWritableSchema = {
26279
26651
  title: "Deleted Relations",
26280
26652
  description: "Deleted relations",
26281
26653
  },
26654
+ llm_model_name: {
26655
+ anyOf: [
26656
+ {
26657
+ type: "string",
26658
+ },
26659
+ {
26660
+ type: "null",
26661
+ },
26662
+ ],
26663
+ title: "Llm Model Name",
26664
+ description:
26665
+ "Model that extracted these memories (issue #1590), or None when the write stored verbatim text. Carried on this event only, for observability — it is not stored in mem0's metadata, so it cannot be recovered from the memory record itself once this event is gone.",
26666
+ },
26282
26667
  },
26283
26668
  additionalProperties: true,
26284
26669
  type: "object",
@@ -28813,7 +29198,7 @@ export const FullProcessInstanceDTOWritableSchema = {
28813
29198
  "List of agent work events that the process can receive. Agent work events are used to trigger the execution of an agent.",
28814
29199
  },
28815
29200
  process_config_specs: {
28816
- $ref: "#/components/schemas/ProcessConfigSpecs",
29201
+ $ref: "#/components/schemas/ConfigSpecs",
28817
29202
  description:
28818
29203
  "Configuration specifications of the process class, including schema and parameters.",
28819
29204
  },
@@ -30337,6 +30722,151 @@ export const IconSelectorWritableSchema = {
30337
30722
  'A FormKit element for selecting or entering an Iconify icon name.\n\nThis element renders as an editable select with icon preview capability.\nUsers can either select from preset icon options or enter any valid Iconify icon name.\nThe selected/entered icon is displayed live in the input field.\n\n### Features\n- Dropdown with preset icon options (each showing the icon preview)\n- Editable input for entering custom Iconify icon names\n- Live icon preview in the input field\n- Supports any valid Iconify icon (e.g., \'lucide:bot\', \'meteor-icons:robot\')\n\n### Example Usage\n```python\nclass MyAgentConfig(AgentConfig):\n icon: Annotated[\n str | IconSelector,\n Field(description="Icon for the agent"),\n ]\n\n# Form mode - for rendering:\nconfig = MyAgentConfig(\n ...,\n icon=IconSelector(label=LocaleString(en="Icon", de="Symbol")),\n)\n\n# Data mode - from submission:\nconfig = MyAgentConfig(\n ...,\n icon="mage:robot",\n)\n```',
30338
30723
  } as const;
30339
30724
 
30725
+ export const IngestorDTOWritableSchema = {
30726
+ properties: {
30727
+ name: {
30728
+ type: "string",
30729
+ title: "Name",
30730
+ description:
30731
+ "Ingestor identifier, as served by GET /knowledge/ingestors.",
30732
+ },
30733
+ display_name: {
30734
+ anyOf: [
30735
+ {
30736
+ type: "string",
30737
+ },
30738
+ {
30739
+ type: "null",
30740
+ },
30741
+ ],
30742
+ title: "Display Name",
30743
+ description: "Localized name of the ingestion pipeline.",
30744
+ },
30745
+ description: {
30746
+ anyOf: [
30747
+ {
30748
+ type: "string",
30749
+ },
30750
+ {
30751
+ type: "null",
30752
+ },
30753
+ ],
30754
+ title: "Description",
30755
+ description: "Localized description of what the pipeline does.",
30756
+ },
30757
+ form: {
30758
+ items: {
30759
+ oneOf: [
30760
+ {
30761
+ $ref: "#/components/schemas/HtmlElement",
30762
+ },
30763
+ {
30764
+ $ref: "#/components/schemas/AgentSelectorWritable",
30765
+ },
30766
+ {
30767
+ $ref: "#/components/schemas/CascadeSelectWritable",
30768
+ },
30769
+ {
30770
+ $ref: "#/components/schemas/CheckboxWritable",
30771
+ },
30772
+ {
30773
+ $ref: "#/components/schemas/ChipsInputWritable",
30774
+ },
30775
+ {
30776
+ $ref: "#/components/schemas/ColorPickerWritable",
30777
+ },
30778
+ {
30779
+ $ref: "#/components/schemas/CronInputWritable",
30780
+ },
30781
+ {
30782
+ $ref: "#/components/schemas/DatePickerWritable",
30783
+ },
30784
+ {
30785
+ $ref: "#/components/schemas/GroupWritable",
30786
+ },
30787
+ {
30788
+ $ref: "#/components/schemas/IconSelectorWritable",
30789
+ },
30790
+ {
30791
+ $ref: "#/components/schemas/InputMaskWritable",
30792
+ },
30793
+ {
30794
+ $ref: "#/components/schemas/InputNumberWritable",
30795
+ },
30796
+ {
30797
+ $ref: "#/components/schemas/InputOtpWritable",
30798
+ },
30799
+ {
30800
+ $ref: "#/components/schemas/InputTextWritable",
30801
+ },
30802
+ {
30803
+ $ref: "#/components/schemas/KnowledgeDatabaseSelectorWritable",
30804
+ },
30805
+ {
30806
+ $ref: "#/components/schemas/KnobWritable",
30807
+ },
30808
+ {
30809
+ $ref: "#/components/schemas/ListboxWritable",
30810
+ },
30811
+ {
30812
+ $ref: "#/components/schemas/LocaleInputWritable",
30813
+ },
30814
+ {
30815
+ $ref: "#/components/schemas/ModelSelectWritable",
30816
+ },
30817
+ {
30818
+ $ref: "#/components/schemas/MultiSelectWritable",
30819
+ },
30820
+ {
30821
+ $ref: "#/components/schemas/PasswordWritable",
30822
+ },
30823
+ {
30824
+ $ref: "#/components/schemas/RadioButtonWritable",
30825
+ },
30826
+ {
30827
+ $ref: "#/components/schemas/RatingWritable",
30828
+ },
30829
+ {
30830
+ $ref: "#/components/schemas/RepeaterWritable",
30831
+ },
30832
+ {
30833
+ $ref: "#/components/schemas/SelectWritable",
30834
+ },
30835
+ {
30836
+ $ref: "#/components/schemas/SelectButtonWritable",
30837
+ },
30838
+ {
30839
+ $ref: "#/components/schemas/SliderWritable",
30840
+ },
30841
+ {
30842
+ $ref: "#/components/schemas/TenantSelectWritable",
30843
+ },
30844
+ {
30845
+ $ref: "#/components/schemas/TextareaWritable",
30846
+ },
30847
+ {
30848
+ $ref: "#/components/schemas/ToggleButtonWritable",
30849
+ },
30850
+ {
30851
+ $ref: "#/components/schemas/ToggleSwitchWritable",
30852
+ },
30853
+ {
30854
+ $ref: "#/components/schemas/VectorStoreInputWritable",
30855
+ },
30856
+ ],
30857
+ },
30858
+ type: "array",
30859
+ title: "Form",
30860
+ description:
30861
+ "FormKit elements a database of this ingestor is configured through, localized.",
30862
+ default: [],
30863
+ },
30864
+ },
30865
+ type: "object",
30866
+ required: ["name", "display_name", "description"],
30867
+ title: "IngestorDTO",
30868
+ } as const;
30869
+
30340
30870
  export const InputMaskWritableSchema = {
30341
30871
  properties: {
30342
30872
  is_formkit_element: {
@@ -34372,7 +34902,7 @@ export const ProcessClassDTOWritableSchema = {
34372
34902
  description: "FormKit elements defining the configuration form.",
34373
34903
  },
34374
34904
  process_config_specs: {
34375
- $ref: "#/components/schemas/ProcessConfigSpecs",
34905
+ $ref: "#/components/schemas/ConfigSpecs",
34376
34906
  description:
34377
34907
  "Configuration specifications of the process class, including schema and parameters.",
34378
34908
  },
@@ -34639,8 +35169,16 @@ export const RAGStartEventWritableSchema = {
34639
35169
  default: "de",
34640
35170
  },
34641
35171
  user: {
34642
- $ref: "#/components/schemas/UserIdentity",
34643
- description: "User on whose behalf the RAG run is executed.",
35172
+ anyOf: [
35173
+ {
35174
+ $ref: "#/components/schemas/UserIdentity",
35175
+ },
35176
+ {
35177
+ type: "null",
35178
+ },
35179
+ ],
35180
+ description:
35181
+ "User on whose behalf the RAG run is executed, when there is one. Optional because a delegating agent forwards whatever identity its own start event carries, and a scheduled run carries none — there is no service account to substitute. The RAG agent's user-memory steps are what read it, and they are skipped without it rather than attributing one caller's memories to a shared identity.",
34644
35182
  },
34645
35183
  messages: {
34646
35184
  items: {
@@ -34704,7 +35242,7 @@ export const RAGStartEventWritableSchema = {
34704
35242
  },
34705
35243
  additionalProperties: true,
34706
35244
  type: "object",
34707
- required: ["user", "selected_namespaces"],
35245
+ required: ["selected_namespaces"],
34708
35246
  title: "RAGStartEvent",
34709
35247
  description:
34710
35248
  "Namespace-aware start event for the RAG agent.\n\n`RAGStartEvent` is intended for non-chat publishers: custom domain front-ends that run their own namespace\nselection UI, or other agents delegating to RAG via `AgentInTheLoop`.",
@@ -36969,7 +37507,7 @@ export const StandaloneQuestionCondenserEventWritableSchema = {
36969
37507
  required: ["condensed_chat_message"],
36970
37508
  title: "StandaloneQuestionCondenserEvent",
36971
37509
  description:
36972
- "Event to condense chat messages into a single standalone question as a chat message.",
37510
+ "Event to condense chat messages into a single standalone question as a chat message.\n\nA blank condensation is refused by `condense_standalone_question`, before an event of this type can be\nbuilt. The invariant is deliberately *not* also a `field_validator` here: a validator on an event is not\nonly a publish-time contract, it runs on every `model_validate`, which is how the immutable log is read\nback — JetStream replays the whole stream on each agent start, and the API rebuilds a thread's timeline\nfrom the persisted display copy. Blank condensations did occur before the producer-side raise existed, so\nvalidating on read makes that history undeserializable: replay drops the event and\n`EventService.get_events_in_thread` fails the whole thread.",
36973
37511
  } as const;
36974
37512
 
36975
37513
  export const StartEventWritableSchema = {
@@ -37130,6 +37668,19 @@ export const StoreOrganizationMemoryEventWritableSchema = {
37130
37668
  title: "Deleted Relations",
37131
37669
  description: "Deleted relations",
37132
37670
  },
37671
+ llm_model_name: {
37672
+ anyOf: [
37673
+ {
37674
+ type: "string",
37675
+ },
37676
+ {
37677
+ type: "null",
37678
+ },
37679
+ ],
37680
+ title: "Llm Model Name",
37681
+ description:
37682
+ "Model that extracted these memories (issue #1590), or None when the write stored verbatim text. Carried on this event only, for observability — it is not stored in mem0's metadata, so it cannot be recovered from the memory record itself once this event is gone.",
37683
+ },
37133
37684
  },
37134
37685
  additionalProperties: true,
37135
37686
  type: "object",
@@ -37219,6 +37770,19 @@ export const StoreUserMemoryEventWritableSchema = {
37219
37770
  title: "Deleted Relations",
37220
37771
  description: "Deleted relations",
37221
37772
  },
37773
+ llm_model_name: {
37774
+ anyOf: [
37775
+ {
37776
+ type: "string",
37777
+ },
37778
+ {
37779
+ type: "null",
37780
+ },
37781
+ ],
37782
+ title: "Llm Model Name",
37783
+ description:
37784
+ "Model that extracted these memories (issue #1590), or None when the write stored verbatim text. Carried on this event only, for observability — it is not stored in mem0's metadata, so it cannot be recovered from the memory record itself once this event is gone.",
37785
+ },
37222
37786
  },
37223
37787
  additionalProperties: true,
37224
37788
  type: "object",
@@ -38789,5 +39353,5 @@ export const VectorStoreInputWritableSchema = {
38789
39353
  required: ["label"],
38790
39354
  title: "VectorStoreInput",
38791
39355
  description:
38792
- 'A FormKit element for selecting a vector store collection, namespaces, and\nthe metadata keys publishers are allowed to filter on at query time.\n\nThis element renders as three controls:\n1. Database dropdown (loads from /api/v1/knowledge/databases)\n2. Namespace multi-select (populated based on selected database)\n3. Free-form chips input for `allowed_metadata_filter_fields`\n\nThe output matches the three configurable fields of `MilvusVectorStoreConfig`:\n{\n "collection_name": str,\n "index_namespaces": list[str],\n "allowed_metadata_filter_fields": list[str],\n}\n\n### Form Duality\nWhen used with MilvusVectorStoreConfig, the form submission is validated\ndirectly into MilvusVectorStoreConfig (connection settings are read from\nMilvusSettings at runtime).\n\n### Example Usage\n```python\nfrom swiss_ai_hub.core.form.elements.vector_store_input import VectorStoreInput\nfrom swiss_ai_hub.core.persistence.rag.vectors.stores.milvus_vector_store_config import MilvusVectorStoreConfig\n\nclass MyRetrieverConfig(Form):\n vector_store: Annotated[\n MilvusVectorStoreConfig | VectorStoreInput,\n Field(description="The vector store configuration"),\n ]\n\n# Form mode - for rendering:\nconfig = MyRetrieverConfig(\n vector_store=VectorStoreInput(\n label=LocaleString(en="Vector Store", de="Vektorspeicher"),\n ),\n)\n\n# Data mode - from submission (Pydantic validates into MilvusVectorStoreConfig):\nconfig = MyRetrieverConfig(\n vector_store=MilvusVectorStoreConfig(\n collection_name="my-database",\n index_namespaces=["namespace1", "namespace2"],\n allowed_metadata_filter_fields=["department", "year"],\n ),\n)\n```',
39356
+ 'A FormKit element for selecting a vector store collection, namespaces, and\nthe metadata keys publishers are allowed to filter on at query time.\n\nThis element renders as three controls:\n1. Database dropdown (loads from /api/v1/knowledge/databases)\n2. "All namespaces" switch, or a namespace multi-select populated from the selected database\n3. Free-form chips input for `allowed_metadata_filter_fields`\n\nThe output matches the configurable fields of `MilvusVectorStoreConfig`:\n{\n "collection_name": str,\n "index_namespaces": list[str],\n "all_namespaces": bool,\n "allowed_metadata_filter_fields": list[str],\n}\n\n### Form Duality\nWhen used with MilvusVectorStoreConfig, the form submission is validated\ndirectly into MilvusVectorStoreConfig (connection settings are read from\nMilvusSettings at runtime).\n\n### Example Usage\n```python\nfrom swiss_ai_hub.core.form.elements.vector_store_input import VectorStoreInput\nfrom swiss_ai_hub.core.persistence.rag.vectors.stores.milvus_vector_store_config import MilvusVectorStoreConfig\n\nclass MyRetrieverConfig(Form):\n vector_store: Annotated[\n MilvusVectorStoreConfig | VectorStoreInput,\n Field(description="The vector store configuration"),\n ]\n\n# Form mode - for rendering:\nconfig = MyRetrieverConfig(\n vector_store=VectorStoreInput(\n label=LocaleString(en="Vector Store", de="Vektorspeicher"),\n ),\n)\n\n# Data mode - from submission (Pydantic validates into MilvusVectorStoreConfig):\nconfig = MyRetrieverConfig(\n vector_store=MilvusVectorStoreConfig(\n collection_name="my-database",\n index_namespaces=["namespace1", "namespace2"],\n allowed_metadata_filter_fields=["department", "year"],\n ),\n)\n```',
38793
39357
  } as const;