qanswer_sdk 3.1509.0__py3-none-any.whl → 3.1511.0__py3-none-any.whl

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 (126) hide show
  1. qanswer_sdk/__init__.py +31 -24
  2. qanswer_sdk/api/__init__.py +0 -1
  3. qanswer_sdk/api/admin_api.py +914 -142
  4. qanswer_sdk/api/ai_assistant_access_rights_api.py +883 -280
  5. qanswer_sdk/api/ai_assistant_api.py +289 -61
  6. qanswer_sdk/api/branding_api.py +6 -6
  7. qanswer_sdk/api/connector_website_api.py +287 -0
  8. qanswer_sdk/api/connectors_api.py +863 -11
  9. qanswer_sdk/api/connectors_data_api.py +28 -27
  10. qanswer_sdk/api/mcp_api.py +1103 -469
  11. qanswer_sdk/api/payment_api.py +3 -3
  12. qanswer_sdk/api/socket_api.py +0 -245
  13. qanswer_sdk/api/task_ai_excel_api.py +288 -0
  14. qanswer_sdk/api/task_report_copilot_api.py +49 -122
  15. qanswer_sdk/api/tool_embedder_api.py +552 -1
  16. qanswer_sdk/api/tool_llm_api.py +1059 -10
  17. qanswer_sdk/api/unit_organizations_api.py +1240 -165
  18. qanswer_sdk/api/unit_user_api.py +506 -0
  19. qanswer_sdk/api_client.py +1 -1
  20. qanswer_sdk/configuration.py +1 -1
  21. qanswer_sdk/models/__init__.py +30 -22
  22. qanswer_sdk/models/access_pdf_payload_model.py +6 -4
  23. qanswer_sdk/models/add_qn_a_request.py +5 -3
  24. qanswer_sdk/models/{assistant_template.py → ai_assistant_clone_response.py} +9 -19
  25. qanswer_sdk/models/ai_assistant_dto.py +4 -2
  26. qanswer_sdk/models/ai_assistant_filter_dto.py +3 -1
  27. qanswer_sdk/models/{user_dataset_access_control_origin_header.py → ai_assistant_restricted_domain.py} +8 -8
  28. qanswer_sdk/models/ai_assistant_share_response.py +93 -0
  29. qanswer_sdk/models/api_key_mcp_authentication_config.py +2 -2
  30. qanswer_sdk/models/assistant_template_filter_dto.py +93 -0
  31. qanswer_sdk/models/{relation_extraction_schema.py → assistant_template_with_tools_selection_dto.py} +26 -24
  32. qanswer_sdk/models/audio_file_upload_payload.py +4 -2
  33. qanswer_sdk/models/auto_bot_description_request.py +5 -3
  34. qanswer_sdk/models/chatbot_chat_payload.py +6 -2
  35. qanswer_sdk/models/connector_type_dto.py +101 -0
  36. qanswer_sdk/models/{relation_extraction_data_input.py → connector_type_list_dto.py} +14 -14
  37. qanswer_sdk/models/conversation_message.py +37 -7
  38. qanswer_sdk/models/conversation_model.py +8 -2
  39. qanswer_sdk/models/credits_info_global_dto.py +95 -0
  40. qanswer_sdk/models/credits_info_organization_dto.py +93 -0
  41. qanswer_sdk/models/dataset_detail_kg.py +30 -10
  42. qanswer_sdk/models/dataset_schema.py +5 -1
  43. qanswer_sdk/models/dataset_update_object.py +8 -2
  44. qanswer_sdk/models/document_content_update_model.py +4 -2
  45. qanswer_sdk/models/econsilium_search_index_add_payload.py +3 -1
  46. qanswer_sdk/models/embedder_create_dto.py +9 -3
  47. qanswer_sdk/models/embedder_detailed_dto.py +9 -3
  48. qanswer_sdk/models/embedder_update_dto.py +9 -3
  49. qanswer_sdk/models/{relation_model.py → embedding_endpoint_import_failure.py} +8 -10
  50. qanswer_sdk/models/embedding_endpoint_import_response.py +99 -0
  51. qanswer_sdk/models/es_meta_data.py +98 -0
  52. qanswer_sdk/models/{get_file_es_meta_data_response.py → es_meta_data_value.py} +7 -11
  53. qanswer_sdk/models/feedback_update.py +4 -2
  54. qanswer_sdk/models/file_es_meta_data.py +31 -4
  55. qanswer_sdk/models/g_drive_download_request.py +3 -1
  56. qanswer_sdk/models/generate_ai_cells_payload.py +5 -3
  57. qanswer_sdk/models/highlight_audio_payload_model.py +6 -4
  58. qanswer_sdk/models/imap_add_payload.py +4 -2
  59. qanswer_sdk/models/list_socket_events.py +2 -2
  60. qanswer_sdk/models/llm_consumption.py +2 -2
  61. qanswer_sdk/models/llm_create_dto.py +25 -3
  62. qanswer_sdk/models/llm_detailed_dto.py +30 -4
  63. qanswer_sdk/models/llm_dto.py +18 -2
  64. qanswer_sdk/models/llm_endpoint.py +25 -3
  65. qanswer_sdk/models/llm_endpoint_import_failure.py +89 -0
  66. qanswer_sdk/models/{relation_extraction_data_output.py → llm_endpoint_import_response.py} +20 -16
  67. qanswer_sdk/models/llm_endpoint_read_input.py +25 -3
  68. qanswer_sdk/models/llm_endpoint_read_output.py +25 -3
  69. qanswer_sdk/models/llm_update_dto.py +25 -3
  70. qanswer_sdk/models/mcp_server.py +153 -0
  71. qanswer_sdk/models/mcp_server_create.py +4 -2
  72. qanswer_sdk/models/mcp_server_dto.py +6 -2
  73. qanswer_sdk/models/mcp_server_update.py +4 -2
  74. qanswer_sdk/models/mcp_tool.py +124 -0
  75. qanswer_sdk/models/mcp_tool_description_update.py +6 -4
  76. qanswer_sdk/models/mcp_tool_dto.py +3 -1
  77. qanswer_sdk/models/one_drive_download_request.py +3 -1
  78. qanswer_sdk/models/one_note_download_request.py +3 -1
  79. qanswer_sdk/models/organization_admin.py +4 -2
  80. qanswer_sdk/models/organization_filter_dto.py +4 -2
  81. qanswer_sdk/models/{relation_value_input.py → organization_mcp_server_setting.py} +29 -24
  82. qanswer_sdk/models/plan_dto.py +16 -4
  83. qanswer_sdk/models/publication_add_payload.py +4 -2
  84. qanswer_sdk/models/rag_payload.py +6 -2
  85. qanswer_sdk/models/report_copilot_generation_from_slots_payload.py +5 -3
  86. qanswer_sdk/models/report_copilot_refinement_payload.py +5 -3
  87. qanswer_sdk/models/report_copilot_slot_feedback_update.py +4 -2
  88. qanswer_sdk/models/report_template.py +3 -1
  89. qanswer_sdk/models/report_template_create_payload.py +4 -2
  90. qanswer_sdk/models/report_template_simplified.py +4 -2
  91. qanswer_sdk/models/report_template_update_payload.py +4 -2
  92. qanswer_sdk/models/report_templates_search_payload.py +104 -0
  93. qanswer_sdk/models/search_payload.py +6 -2
  94. qanswer_sdk/models/share_point_download_request.py +3 -1
  95. qanswer_sdk/models/socket_conversation_message.py +37 -7
  96. qanswer_sdk/models/template_toggle_request.py +5 -5
  97. qanswer_sdk/models/text2_sparql_payload.py +5 -1
  98. qanswer_sdk/models/thinking_block.py +91 -0
  99. qanswer_sdk/models/{subject_model.py → update_cells_payload.py} +10 -10
  100. qanswer_sdk/models/{relation_extraction_configuration.py → update_file_es_meta_data.py} +37 -26
  101. qanswer_sdk/models/{update_metadata_model.py → update_metadata_model_input.py} +7 -7
  102. qanswer_sdk/models/{relation_extraction_task_settings_update_payload.py → update_metadata_model_output.py} +14 -12
  103. qanswer_sdk/models/update_qn_a_pair_request.py +4 -2
  104. qanswer_sdk/models/{relation_extraction_template_payload.py → update_template_cells_payload.py} +19 -15
  105. qanswer_sdk/models/user.py +10 -5
  106. qanswer_sdk/models/user_credits_config_dto.py +95 -0
  107. qanswer_sdk/models/user_credits_dto.py +104 -0
  108. qanswer_sdk/models/user_dataset.py +31 -11
  109. qanswer_sdk/models/{relation_extraction_row_output.py → user_dataset_mcp_tool_selection.py} +33 -26
  110. qanswer_sdk/models/user_dataset_mcp_tool_selection_dto.py +3 -1
  111. qanswer_sdk/models/user_filter_dto.py +4 -2
  112. qanswer_sdk/models/{relation_extraction_row_input.py → user_mcp_tool_selection.py} +31 -26
  113. qanswer_sdk/models/user_mcp_tool_selection_dto.py +3 -1
  114. qanswer_sdk/models/user_profile_dto.py +16 -4
  115. qanswer_sdk/models/{value_model.py → websearch_scraping_site.py} +11 -17
  116. qanswer_sdk/models/website_add_payload.py +4 -2
  117. {qanswer_sdk-3.1509.0.dist-info → qanswer_sdk-3.1511.0.dist-info}/METADATA +2 -2
  118. {qanswer_sdk-3.1509.0.dist-info → qanswer_sdk-3.1511.0.dist-info}/RECORD +119 -112
  119. qanswer_sdk/api/task_relation_extraction_api.py +0 -3636
  120. qanswer_sdk/models/export_relation_extraction_table_request.py +0 -97
  121. qanswer_sdk/models/relation_extraction_payload.py +0 -117
  122. qanswer_sdk/models/relation_extraction_task_settings.py +0 -125
  123. qanswer_sdk/models/relation_extraction_task_update.py +0 -125
  124. qanswer_sdk/models/relation_value_output.py +0 -103
  125. qanswer_sdk/models/socket_data_extraction.py +0 -109
  126. {qanswer_sdk-3.1509.0.dist-info → qanswer_sdk-3.1511.0.dist-info}/WHEEL +0 -0
@@ -17,26 +17,26 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
- from qanswer_sdk.models.relation_extraction_configuration import RelationExtractionConfiguration
23
- from qanswer_sdk.models.relation_extraction_data_output import RelationExtractionDataOutput
22
+ from qanswer_sdk.models.mcp_tool_dto import McpToolDto
24
23
  from typing import Optional, Set
25
24
  from typing_extensions import Self
26
25
 
27
- class RelationExtractionSchema(BaseModel):
26
+ class AssistantTemplateWithToolsSelectionDto(BaseModel):
28
27
  """
29
- RelationExtractionSchema
28
+ AssistantTemplateWithToolsSelectionDto
30
29
  """ # noqa: E501
31
30
  id: StrictInt
32
31
  username: StrictStr
33
32
  dataset: StrictStr
34
- template_name: StrictStr
35
- template: RelationExtractionConfiguration
36
- extracted_data: Optional[RelationExtractionDataOutput] = None
37
- creation_date: StrictStr
38
- last_updated: StrictStr
39
- __properties: ClassVar[List[str]] = ["id", "username", "dataset", "template_name", "template", "extracted_data", "creation_date", "last_updated"]
33
+ name: StrictStr
34
+ llm_id: StrictInt
35
+ description: Optional[StrictStr] = None
36
+ chat_prompt: Optional[StrictStr] = None
37
+ categories: Optional[List[StrictStr]] = None
38
+ tools_selections: Optional[List[McpToolDto]] = Field(default=None, alias="toolsSelections")
39
+ __properties: ClassVar[List[str]] = ["id", "username", "dataset", "name", "llm_id", "description", "chat_prompt", "categories", "toolsSelections"]
40
40
 
41
41
  model_config = ConfigDict(
42
42
  populate_by_name=True,
@@ -56,7 +56,7 @@ class RelationExtractionSchema(BaseModel):
56
56
 
57
57
  @classmethod
58
58
  def from_json(cls, json_str: str) -> Optional[Self]:
59
- """Create an instance of RelationExtractionSchema from a JSON string"""
59
+ """Create an instance of AssistantTemplateWithToolsSelectionDto from a JSON string"""
60
60
  return cls.from_dict(json.loads(json_str))
61
61
 
62
62
  def to_dict(self) -> Dict[str, Any]:
@@ -77,17 +77,18 @@ class RelationExtractionSchema(BaseModel):
77
77
  exclude=excluded_fields,
78
78
  exclude_none=True,
79
79
  )
80
- # override the default output from pydantic by calling `to_dict()` of template
81
- if self.template:
82
- _dict['template'] = self.template.to_dict()
83
- # override the default output from pydantic by calling `to_dict()` of extracted_data
84
- if self.extracted_data:
85
- _dict['extracted_data'] = self.extracted_data.to_dict()
80
+ # override the default output from pydantic by calling `to_dict()` of each item in tools_selections (list)
81
+ _items = []
82
+ if self.tools_selections:
83
+ for _item_tools_selections in self.tools_selections:
84
+ if _item_tools_selections:
85
+ _items.append(_item_tools_selections.to_dict())
86
+ _dict['toolsSelections'] = _items
86
87
  return _dict
87
88
 
88
89
  @classmethod
89
90
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
90
- """Create an instance of RelationExtractionSchema from a dict"""
91
+ """Create an instance of AssistantTemplateWithToolsSelectionDto from a dict"""
91
92
  if obj is None:
92
93
  return None
93
94
 
@@ -98,11 +99,12 @@ class RelationExtractionSchema(BaseModel):
98
99
  "id": obj.get("id"),
99
100
  "username": obj.get("username"),
100
101
  "dataset": obj.get("dataset"),
101
- "template_name": obj.get("template_name"),
102
- "template": RelationExtractionConfiguration.from_dict(obj["template"]) if obj.get("template") is not None else None,
103
- "extracted_data": RelationExtractionDataOutput.from_dict(obj["extracted_data"]) if obj.get("extracted_data") is not None else None,
104
- "creation_date": obj.get("creation_date"),
105
- "last_updated": obj.get("last_updated")
102
+ "name": obj.get("name"),
103
+ "llm_id": obj.get("llm_id"),
104
+ "description": obj.get("description"),
105
+ "chat_prompt": obj.get("chat_prompt"),
106
+ "categories": obj.get("categories"),
107
+ "toolsSelections": [McpToolDto.from_dict(_item) for _item in obj["toolsSelections"]] if obj.get("toolsSelections") is not None else None
106
108
  })
107
109
  return _obj
108
110
 
@@ -34,7 +34,8 @@ class AudioFileUploadPayload(BaseModel):
34
34
  quota: Optional[StrictInt] = Field(default=None, description="Quota of the user")
35
35
  metadata: Optional[List[UploadMetadata]] = Field(default=None, description="Optional per-file metadata entries matching the uploaded files.")
36
36
  file_ids: Optional[List[StrictStr]] = Field(default=None, description="Optional subset of cached file_ids to add during the indexing step.")
37
- __properties: ClassVar[List[str]] = ["username", "dataset", "connector_id", "conversation_id", "quota", "metadata", "file_ids"]
37
+ additional_fields: Optional[Dict[str, Any]] = Field(default=None, description="Optional dictionary of additional fields to associate with each uploaded document.")
38
+ __properties: ClassVar[List[str]] = ["username", "dataset", "connector_id", "conversation_id", "quota", "metadata", "file_ids", "additional_fields"]
38
39
 
39
40
  model_config = ConfigDict(
40
41
  populate_by_name=True,
@@ -100,7 +101,8 @@ class AudioFileUploadPayload(BaseModel):
100
101
  "conversation_id": obj.get("conversation_id"),
101
102
  "quota": obj.get("quota"),
102
103
  "metadata": [UploadMetadata.from_dict(_item) for _item in obj["metadata"]] if obj.get("metadata") is not None else None,
103
- "file_ids": obj.get("file_ids")
104
+ "file_ids": obj.get("file_ids"),
105
+ "additional_fields": obj.get("additional_fields")
104
106
  })
105
107
  return _obj
106
108
 
@@ -18,7 +18,7 @@ import re # noqa: F401
18
18
  import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
- from typing import Any, ClassVar, Dict, List
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
24
24
 
@@ -28,7 +28,8 @@ class AutoBotDescriptionRequest(BaseModel):
28
28
  """ # noqa: E501
29
29
  username: StrictStr = Field(description="Username associated with the dataset")
30
30
  dataset: StrictStr = Field(description="Dataset identifier")
31
- __properties: ClassVar[List[str]] = ["username", "dataset"]
31
+ additional_fields: Optional[Dict[str, Any]] = Field(default=None, description="Additional fields for bot description generation")
32
+ __properties: ClassVar[List[str]] = ["username", "dataset", "additional_fields"]
32
33
 
33
34
  model_config = ConfigDict(
34
35
  populate_by_name=True,
@@ -82,7 +83,8 @@ class AutoBotDescriptionRequest(BaseModel):
82
83
 
83
84
  _obj = cls.model_validate({
84
85
  "username": obj.get("username"),
85
- "dataset": obj.get("dataset")
86
+ "dataset": obj.get("dataset"),
87
+ "additional_fields": obj.get("additional_fields")
86
88
  })
87
89
  return _obj
88
90
 
@@ -47,7 +47,9 @@ class ChatbotChatPayload(BaseModel):
47
47
  filters: Optional[List[List[SearchMetadataFilter]]] = None
48
48
  apply_map_reduce: Optional[StrictBool] = Field(default=None, description="Determines whether to apply map-reduce strategy for the response.")
49
49
  tool_selections: Optional[List[ToolSelection]] = Field(default=None, description="The selections of the MCP tools to be used.")
50
- __properties: ClassVar[List[str]] = ["question", "username", "conversation_id", "organizationId", "llm_choice", "image_urls", "parent_message_id", "is_regenerate", "system_message", "addon_system_message", "additional_fields", "bypass_guardrail", "origin", "oauth_token", "current_time", "auto_filters", "filters", "apply_map_reduce", "tool_selections"]
50
+ incognito: Optional[StrictBool] = Field(default=None, description="When true, the conversation is stored only in Redis with a TTL, is not retrievable via list/get, and will be purged automatically.")
51
+ llm_id: Optional[StrictInt] = Field(default=None, description="The ID of the LLM to be used for this chat request.")
52
+ __properties: ClassVar[List[str]] = ["question", "username", "conversation_id", "organizationId", "llm_choice", "image_urls", "parent_message_id", "is_regenerate", "system_message", "addon_system_message", "additional_fields", "bypass_guardrail", "origin", "oauth_token", "current_time", "auto_filters", "filters", "apply_map_reduce", "tool_selections", "incognito", "llm_id"]
51
53
 
52
54
  model_config = ConfigDict(
53
55
  populate_by_name=True,
@@ -137,7 +139,9 @@ class ChatbotChatPayload(BaseModel):
137
139
  for _item in obj["filters"]
138
140
  ] if obj.get("filters") is not None else None,
139
141
  "apply_map_reduce": obj.get("apply_map_reduce"),
140
- "tool_selections": [ToolSelection.from_dict(_item) for _item in obj["tool_selections"]] if obj.get("tool_selections") is not None else None
142
+ "tool_selections": [ToolSelection.from_dict(_item) for _item in obj["tool_selections"]] if obj.get("tool_selections") is not None else None,
143
+ "incognito": obj.get("incognito"),
144
+ "llm_id": obj.get("llm_id")
141
145
  })
142
146
  return _obj
143
147
 
@@ -0,0 +1,101 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ QAnswer: Api Documentation
5
+
6
+ APIs provided by QAnswer
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class ConnectorTypeDto(BaseModel):
26
+ """
27
+ ConnectorTypeDto
28
+ """ # noqa: E501
29
+ type: Optional[StrictStr] = None
30
+ restricted: Optional[StrictBool] = None
31
+ read_only: Optional[StrictBool] = Field(default=None, alias="readOnly")
32
+ __properties: ClassVar[List[str]] = ["type", "restricted", "readOnly"]
33
+
34
+ @field_validator('type')
35
+ def type_validate_enum(cls, value):
36
+ """Validates the enum"""
37
+ if value is None:
38
+ return value
39
+
40
+ if value not in set(['document', 'audio', 'website', 'qna', 'pinecone', 'rdf', 'websearch', 'econsilium', 'econsilium_search_index', 'publication_office', 'onedrive', 'sharepoint', 'gdrive', 'onenote', 'imap']):
41
+ raise ValueError("must be one of enum values ('document', 'audio', 'website', 'qna', 'pinecone', 'rdf', 'websearch', 'econsilium', 'econsilium_search_index', 'publication_office', 'onedrive', 'sharepoint', 'gdrive', 'onenote', 'imap')")
42
+ return value
43
+
44
+ model_config = ConfigDict(
45
+ populate_by_name=True,
46
+ validate_assignment=True,
47
+ protected_namespaces=(),
48
+ )
49
+
50
+
51
+ def to_str(self) -> str:
52
+ """Returns the string representation of the model using alias"""
53
+ return pprint.pformat(self.model_dump(by_alias=True))
54
+
55
+ def to_json(self) -> str:
56
+ """Returns the JSON representation of the model using alias"""
57
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
58
+ return json.dumps(self.to_dict())
59
+
60
+ @classmethod
61
+ def from_json(cls, json_str: str) -> Optional[Self]:
62
+ """Create an instance of ConnectorTypeDto from a JSON string"""
63
+ return cls.from_dict(json.loads(json_str))
64
+
65
+ def to_dict(self) -> Dict[str, Any]:
66
+ """Return the dictionary representation of the model using alias.
67
+
68
+ This has the following differences from calling pydantic's
69
+ `self.model_dump(by_alias=True)`:
70
+
71
+ * `None` is only added to the output dict for nullable fields that
72
+ were set at model initialization. Other fields with value `None`
73
+ are ignored.
74
+ """
75
+ excluded_fields: Set[str] = set([
76
+ ])
77
+
78
+ _dict = self.model_dump(
79
+ by_alias=True,
80
+ exclude=excluded_fields,
81
+ exclude_none=True,
82
+ )
83
+ return _dict
84
+
85
+ @classmethod
86
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
87
+ """Create an instance of ConnectorTypeDto from a dict"""
88
+ if obj is None:
89
+ return None
90
+
91
+ if not isinstance(obj, dict):
92
+ return cls.model_validate(obj)
93
+
94
+ _obj = cls.model_validate({
95
+ "type": obj.get("type"),
96
+ "restricted": obj.get("restricted"),
97
+ "readOnly": obj.get("readOnly")
98
+ })
99
+ return _obj
100
+
101
+
@@ -19,16 +19,16 @@ import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
- from qanswer_sdk.models.relation_extraction_row_input import RelationExtractionRowInput
22
+ from qanswer_sdk.models.connector_type_dto import ConnectorTypeDto
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
25
25
 
26
- class RelationExtractionDataInput(BaseModel):
26
+ class ConnectorTypeListDto(BaseModel):
27
27
  """
28
- RelationExtractionDataInput
28
+ ConnectorTypeListDto
29
29
  """ # noqa: E501
30
- rows: Optional[List[RelationExtractionRowInput]] = None
31
- __properties: ClassVar[List[str]] = ["rows"]
30
+ connectors: Optional[List[ConnectorTypeDto]] = None
31
+ __properties: ClassVar[List[str]] = ["connectors"]
32
32
 
33
33
  model_config = ConfigDict(
34
34
  populate_by_name=True,
@@ -48,7 +48,7 @@ class RelationExtractionDataInput(BaseModel):
48
48
 
49
49
  @classmethod
50
50
  def from_json(cls, json_str: str) -> Optional[Self]:
51
- """Create an instance of RelationExtractionDataInput from a JSON string"""
51
+ """Create an instance of ConnectorTypeListDto from a JSON string"""
52
52
  return cls.from_dict(json.loads(json_str))
53
53
 
54
54
  def to_dict(self) -> Dict[str, Any]:
@@ -69,18 +69,18 @@ class RelationExtractionDataInput(BaseModel):
69
69
  exclude=excluded_fields,
70
70
  exclude_none=True,
71
71
  )
72
- # override the default output from pydantic by calling `to_dict()` of each item in rows (list)
72
+ # override the default output from pydantic by calling `to_dict()` of each item in connectors (list)
73
73
  _items = []
74
- if self.rows:
75
- for _item_rows in self.rows:
76
- if _item_rows:
77
- _items.append(_item_rows.to_dict())
78
- _dict['rows'] = _items
74
+ if self.connectors:
75
+ for _item_connectors in self.connectors:
76
+ if _item_connectors:
77
+ _items.append(_item_connectors.to_dict())
78
+ _dict['connectors'] = _items
79
79
  return _dict
80
80
 
81
81
  @classmethod
82
82
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
83
- """Create an instance of RelationExtractionDataInput from a dict"""
83
+ """Create an instance of ConnectorTypeListDto from a dict"""
84
84
  if obj is None:
85
85
  return None
86
86
 
@@ -88,7 +88,7 @@ class RelationExtractionDataInput(BaseModel):
88
88
  return cls.model_validate(obj)
89
89
 
90
90
  _obj = cls.model_validate({
91
- "rows": [RelationExtractionRowInput.from_dict(_item) for _item in obj["rows"]] if obj.get("rows") is not None else None
91
+ "connectors": [ConnectorTypeDto.from_dict(_item) for _item in obj["connectors"]] if obj.get("connectors") is not None else None
92
92
  })
93
93
  return _obj
94
94
 
@@ -22,6 +22,9 @@ from typing import Any, ClassVar, Dict, List, Optional
22
22
  from qanswer_sdk.models.aggregations_group import AggregationsGroup
23
23
  from qanswer_sdk.models.content_item import ContentItem
24
24
  from qanswer_sdk.models.source import Source
25
+ from qanswer_sdk.models.thinking_block import ThinkingBlock
26
+ from qanswer_sdk.models.tool_selection import ToolSelection
27
+ from qanswer_sdk.models.websearch_scraping_site import WebsearchScrapingSite
25
28
  from typing import Optional, Set
26
29
  from typing_extensions import Self
27
30
 
@@ -50,11 +53,14 @@ class ConversationMessage(BaseModel):
50
53
  expanded_question: Optional[StrictStr] = None
51
54
  prompt_type: Optional[StrictStr] = None
52
55
  tagged_assistant_name: Optional[StrictStr] = None
53
- synonyms_used: Optional[List[Dict[str, Any]]] = None
54
- tool_calls: Optional[List[Dict[str, Any]]] = None
56
+ synonyms_used: Optional[List[StrictStr]] = None
57
+ tool_calls: Optional[List[Dict[str, Dict[str, Any]]]] = None
55
58
  tool_call_id: Optional[StrictStr] = None
56
- tool_selections: Optional[List[Dict[str, Any]]] = None
57
- __properties: ClassVar[List[str]] = ["role", "contents", "message_id", "parent_message_id", "timestamp", "feedback", "origin", "sources", "all_sources", "task_category", "interface_origin", "comment", "llm_choice", "error_key", "prompt_used", "mode", "is_input_data_cropped", "aggs", "expanded_question", "prompt_type", "tagged_assistant_name", "synonyms_used", "tool_calls", "tool_call_id", "tool_selections"]
59
+ tool_selections: Optional[List[ToolSelection]] = None
60
+ server_uids: Optional[List[StrictStr]] = None
61
+ thinking_blocks: Optional[List[ThinkingBlock]] = None
62
+ websearch_sites: Optional[List[WebsearchScrapingSite]] = None
63
+ __properties: ClassVar[List[str]] = ["role", "contents", "message_id", "parent_message_id", "timestamp", "feedback", "origin", "sources", "all_sources", "task_category", "interface_origin", "comment", "llm_choice", "error_key", "prompt_used", "mode", "is_input_data_cropped", "aggs", "expanded_question", "prompt_type", "tagged_assistant_name", "synonyms_used", "tool_calls", "tool_call_id", "tool_selections", "server_uids", "thinking_blocks", "websearch_sites"]
58
64
 
59
65
  @field_validator('role')
60
66
  def role_validate_enum(cls, value):
@@ -66,8 +72,8 @@ class ConversationMessage(BaseModel):
66
72
  @field_validator('task_category')
67
73
  def task_category_validate_enum(cls, value):
68
74
  """Validates the enum"""
69
- if value not in set(['text', 'sparql', 'sql', 'sparql2text', 'sparqlvisualize', 'undefined', 'typing', 'user_joined', 'user_left', 'human_takeover_proposed', 'human_takeover_accepted', 'human_takeover_rejected', 'thinking', 'something_went_wrong', 'mcp_tool_calls', 'mcp_tool_choice_accept', 'mcp_tool_choice_reject', 'mcp_ask_for_connection', 'mcp_tool_choice_ask_confirmation', 'mcp_tool_call_response']):
70
- raise ValueError("must be one of enum values ('text', 'sparql', 'sql', 'sparql2text', 'sparqlvisualize', 'undefined', 'typing', 'user_joined', 'user_left', 'human_takeover_proposed', 'human_takeover_accepted', 'human_takeover_rejected', 'thinking', 'something_went_wrong', 'mcp_tool_calls', 'mcp_tool_choice_accept', 'mcp_tool_choice_reject', 'mcp_ask_for_connection', 'mcp_tool_choice_ask_confirmation', 'mcp_tool_call_response')")
75
+ if value not in set(['text', 'sparql', 'sql', 'sparql2text', 'sparqlvisualize', 'undefined', 'typing', 'user_joined', 'user_left', 'human_takeover_proposed', 'human_takeover_accepted', 'human_takeover_rejected', 'websearch', 'thinking', 'something_went_wrong', 'mcp_tool_calls', 'mcp_tool_choice_accept', 'mcp_tool_choice_reject', 'mcp_ask_for_connection', 'mcp_tool_choice_ask_confirmation', 'mcp_tool_call_response']):
76
+ raise ValueError("must be one of enum values ('text', 'sparql', 'sql', 'sparql2text', 'sparqlvisualize', 'undefined', 'typing', 'user_joined', 'user_left', 'human_takeover_proposed', 'human_takeover_accepted', 'human_takeover_rejected', 'websearch', 'thinking', 'something_went_wrong', 'mcp_tool_calls', 'mcp_tool_choice_accept', 'mcp_tool_choice_reject', 'mcp_ask_for_connection', 'mcp_tool_choice_ask_confirmation', 'mcp_tool_call_response')")
71
77
  return value
72
78
 
73
79
  @field_validator('error_key')
@@ -157,6 +163,27 @@ class ConversationMessage(BaseModel):
157
163
  if _item_aggs:
158
164
  _items.append(_item_aggs.to_dict())
159
165
  _dict['aggs'] = _items
166
+ # override the default output from pydantic by calling `to_dict()` of each item in tool_selections (list)
167
+ _items = []
168
+ if self.tool_selections:
169
+ for _item_tool_selections in self.tool_selections:
170
+ if _item_tool_selections:
171
+ _items.append(_item_tool_selections.to_dict())
172
+ _dict['tool_selections'] = _items
173
+ # override the default output from pydantic by calling `to_dict()` of each item in thinking_blocks (list)
174
+ _items = []
175
+ if self.thinking_blocks:
176
+ for _item_thinking_blocks in self.thinking_blocks:
177
+ if _item_thinking_blocks:
178
+ _items.append(_item_thinking_blocks.to_dict())
179
+ _dict['thinking_blocks'] = _items
180
+ # override the default output from pydantic by calling `to_dict()` of each item in websearch_sites (list)
181
+ _items = []
182
+ if self.websearch_sites:
183
+ for _item_websearch_sites in self.websearch_sites:
184
+ if _item_websearch_sites:
185
+ _items.append(_item_websearch_sites.to_dict())
186
+ _dict['websearch_sites'] = _items
160
187
  return _dict
161
188
 
162
189
  @classmethod
@@ -193,7 +220,10 @@ class ConversationMessage(BaseModel):
193
220
  "synonyms_used": obj.get("synonyms_used"),
194
221
  "tool_calls": obj.get("tool_calls"),
195
222
  "tool_call_id": obj.get("tool_call_id"),
196
- "tool_selections": obj.get("tool_selections")
223
+ "tool_selections": [ToolSelection.from_dict(_item) for _item in obj["tool_selections"]] if obj.get("tool_selections") is not None else None,
224
+ "server_uids": obj.get("server_uids"),
225
+ "thinking_blocks": [ThinkingBlock.from_dict(_item) for _item in obj["thinking_blocks"]] if obj.get("thinking_blocks") is not None else None,
226
+ "websearch_sites": [WebsearchScrapingSite.from_dict(_item) for _item in obj["websearch_sites"]] if obj.get("websearch_sites") is not None else None
197
227
  })
198
228
  return _obj
199
229
 
@@ -46,7 +46,10 @@ class ConversationModel(BaseModel):
46
46
  shared_id: Optional[StrictInt] = None
47
47
  shared_from: Optional[StrictStr] = None
48
48
  shared_access_type: Optional[StrictStr] = None
49
- __properties: ClassVar[List[str]] = ["conversation_id", "title", "username", "dataset", "creation_date", "last_updated", "has_feedback", "has_human_takeover_accepted", "has_human_helped", "origin", "conversation", "interface_origin", "number_of_files", "size_of_files", "is_shared", "shared_entity", "shared_id", "shared_from", "shared_access_type"]
49
+ incognito: Optional[StrictBool] = None
50
+ metadata: Optional[Dict[str, Any]] = None
51
+ copy_metadata: Optional[Dict[str, Any]] = None
52
+ __properties: ClassVar[List[str]] = ["conversation_id", "title", "username", "dataset", "creation_date", "last_updated", "has_feedback", "has_human_takeover_accepted", "has_human_helped", "origin", "conversation", "interface_origin", "number_of_files", "size_of_files", "is_shared", "shared_entity", "shared_id", "shared_from", "shared_access_type", "incognito", "metadata", "copy_metadata"]
50
53
 
51
54
  @field_validator('interface_origin')
52
55
  def interface_origin_validate_enum(cls, value):
@@ -144,7 +147,10 @@ class ConversationModel(BaseModel):
144
147
  "shared_entity": obj.get("shared_entity"),
145
148
  "shared_id": obj.get("shared_id"),
146
149
  "shared_from": obj.get("shared_from"),
147
- "shared_access_type": obj.get("shared_access_type")
150
+ "shared_access_type": obj.get("shared_access_type"),
151
+ "incognito": obj.get("incognito"),
152
+ "metadata": obj.get("metadata"),
153
+ "copy_metadata": obj.get("copy_metadata")
148
154
  })
149
155
  return _obj
150
156
 
@@ -0,0 +1,95 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ QAnswer: Api Documentation
5
+
6
+ APIs provided by QAnswer
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
21
+ from typing import Any, ClassVar, Dict, List, Optional, Union
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class CreditsInfoGlobalDto(BaseModel):
26
+ """
27
+ CreditsInfoGlobalDto
28
+ """ # noqa: E501
29
+ quota_dataset_number: Optional[StrictInt] = Field(default=None, alias="quotaDatasetNumber")
30
+ quota_dataset_space_mb: Optional[StrictInt] = Field(default=None, alias="quotaDatasetSpaceMb")
31
+ quota_question_credits: Optional[StrictInt] = Field(default=None, alias="quotaQuestionCredits")
32
+ credit_capacity: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="creditCapacity")
33
+ quota_reset_delay_day: Optional[StrictInt] = Field(default=None, alias="quotaResetDelayDay")
34
+ __properties: ClassVar[List[str]] = ["quotaDatasetNumber", "quotaDatasetSpaceMb", "quotaQuestionCredits", "creditCapacity", "quotaResetDelayDay"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.model_dump(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> Optional[Self]:
54
+ """Create an instance of CreditsInfoGlobalDto from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self) -> Dict[str, Any]:
58
+ """Return the dictionary representation of the model using alias.
59
+
60
+ This has the following differences from calling pydantic's
61
+ `self.model_dump(by_alias=True)`:
62
+
63
+ * `None` is only added to the output dict for nullable fields that
64
+ were set at model initialization. Other fields with value `None`
65
+ are ignored.
66
+ """
67
+ excluded_fields: Set[str] = set([
68
+ ])
69
+
70
+ _dict = self.model_dump(
71
+ by_alias=True,
72
+ exclude=excluded_fields,
73
+ exclude_none=True,
74
+ )
75
+ return _dict
76
+
77
+ @classmethod
78
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
79
+ """Create an instance of CreditsInfoGlobalDto from a dict"""
80
+ if obj is None:
81
+ return None
82
+
83
+ if not isinstance(obj, dict):
84
+ return cls.model_validate(obj)
85
+
86
+ _obj = cls.model_validate({
87
+ "quotaDatasetNumber": obj.get("quotaDatasetNumber"),
88
+ "quotaDatasetSpaceMb": obj.get("quotaDatasetSpaceMb"),
89
+ "quotaQuestionCredits": obj.get("quotaQuestionCredits"),
90
+ "creditCapacity": obj.get("creditCapacity"),
91
+ "quotaResetDelayDay": obj.get("quotaResetDelayDay")
92
+ })
93
+ return _obj
94
+
95
+
@@ -0,0 +1,93 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ QAnswer: Api Documentation
5
+
6
+ APIs provided by QAnswer
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
21
+ from typing import Any, ClassVar, Dict, List, Optional, Union
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class CreditsInfoOrganizationDto(BaseModel):
26
+ """
27
+ CreditsInfoOrganizationDto
28
+ """ # noqa: E501
29
+ quota_dataset_number: Optional[StrictInt] = Field(default=None, alias="quotaDatasetNumber")
30
+ quota_dataset_space_mb: Optional[StrictInt] = Field(default=None, alias="quotaDatasetSpaceMb")
31
+ quota_question_credits: Optional[StrictInt] = Field(default=None, alias="quotaQuestionCredits")
32
+ credit_capacity: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="creditCapacity")
33
+ __properties: ClassVar[List[str]] = ["quotaDatasetNumber", "quotaDatasetSpaceMb", "quotaQuestionCredits", "creditCapacity"]
34
+
35
+ model_config = ConfigDict(
36
+ populate_by_name=True,
37
+ validate_assignment=True,
38
+ protected_namespaces=(),
39
+ )
40
+
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.model_dump(by_alias=True))
45
+
46
+ def to_json(self) -> str:
47
+ """Returns the JSON representation of the model using alias"""
48
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
49
+ return json.dumps(self.to_dict())
50
+
51
+ @classmethod
52
+ def from_json(cls, json_str: str) -> Optional[Self]:
53
+ """Create an instance of CreditsInfoOrganizationDto from a JSON string"""
54
+ return cls.from_dict(json.loads(json_str))
55
+
56
+ def to_dict(self) -> Dict[str, Any]:
57
+ """Return the dictionary representation of the model using alias.
58
+
59
+ This has the following differences from calling pydantic's
60
+ `self.model_dump(by_alias=True)`:
61
+
62
+ * `None` is only added to the output dict for nullable fields that
63
+ were set at model initialization. Other fields with value `None`
64
+ are ignored.
65
+ """
66
+ excluded_fields: Set[str] = set([
67
+ ])
68
+
69
+ _dict = self.model_dump(
70
+ by_alias=True,
71
+ exclude=excluded_fields,
72
+ exclude_none=True,
73
+ )
74
+ return _dict
75
+
76
+ @classmethod
77
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
78
+ """Create an instance of CreditsInfoOrganizationDto from a dict"""
79
+ if obj is None:
80
+ return None
81
+
82
+ if not isinstance(obj, dict):
83
+ return cls.model_validate(obj)
84
+
85
+ _obj = cls.model_validate({
86
+ "quotaDatasetNumber": obj.get("quotaDatasetNumber"),
87
+ "quotaDatasetSpaceMb": obj.get("quotaDatasetSpaceMb"),
88
+ "quotaQuestionCredits": obj.get("quotaQuestionCredits"),
89
+ "creditCapacity": obj.get("creditCapacity")
90
+ })
91
+ return _obj
92
+
93
+