amsdal_ml 0.2.1__tar.gz → 0.3.0__tar.gz

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. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/PKG-INFO +4 -6
  2. amsdal_ml-0.3.0/amsdal_ml/__about__.py +1 -0
  3. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/fileio/base_loader.py +2 -1
  4. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/fileio/openai_loader.py +8 -1
  5. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_models/openai_model.py +23 -10
  6. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/change-logs.md +12 -0
  7. amsdal_ml-0.3.0/latest-changelogs.md +3 -0
  8. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/pyproject.toml +4 -5
  9. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/uv.lock +1035 -931
  10. amsdal_ml-0.2.1/amsdal_ml/__about__.py +0 -1
  11. amsdal_ml-0.2.1/latest-changelogs.md +0 -7
  12. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.amsdal/.dependencies +0 -0
  13. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.amsdal/.environment +0 -0
  14. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.amsdal/.secrets +0 -0
  15. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.amsdal-cli +0 -0
  16. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.github/workflows/ci.yml +0 -0
  17. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.github/workflows/release.yml +0 -0
  18. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.github/workflows/tag_check.yml +0 -0
  19. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/.gitignore +0 -0
  20. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/CLAUDE.md +0 -0
  21. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/README.md +0 -0
  22. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/RELEASE.md +0 -0
  23. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/Third-Party Materials - AMSDAL Dependencies - License Notices.md +0 -0
  24. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/__init__.py +0 -0
  25. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/__init__.py +0 -0
  26. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/agent.py +0 -0
  27. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/default_qa_agent.py +0 -0
  28. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/functional_calling_agent.py +0 -0
  29. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/mcp_client_tool.py +0 -0
  30. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/python_tool.py +0 -0
  31. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/retriever_tool.py +0 -0
  32. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/agents/tool_adapters.py +0 -0
  33. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/app.py +0 -0
  34. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/fileio/__init__.py +0 -0
  35. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/mcp_client/__init__.py +0 -0
  36. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/mcp_client/base.py +0 -0
  37. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/mcp_client/http_client.py +0 -0
  38. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/mcp_client/stdio_client.py +0 -0
  39. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/mcp_server/__init__.py +0 -0
  40. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/mcp_server/server_retriever_stdio.py +0 -0
  41. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/migrations/0000_initial.py +0 -0
  42. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_config.py +0 -0
  43. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/__init__.py +0 -0
  44. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/default_ingesting.py +0 -0
  45. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/embedders/__init__.py +0 -0
  46. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/embedders/embedder.py +0 -0
  47. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/embedders/openai_embedder.py +0 -0
  48. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/embedding_data.py +0 -0
  49. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/ingesting.py +0 -0
  50. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/loaders/__init__.py +0 -0
  51. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/loaders/folder_loader.py +0 -0
  52. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/loaders/loader.py +0 -0
  53. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/loaders/pdf_loader.py +0 -0
  54. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/loaders/text_loader.py +0 -0
  55. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/model_ingester.py +0 -0
  56. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/openai_ingesting.py +0 -0
  57. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/pipeline.py +0 -0
  58. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/pipeline_interface.py +0 -0
  59. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/processors/__init__.py +0 -0
  60. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/processors/cleaner.py +0 -0
  61. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/processors/text_cleaner.py +0 -0
  62. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/splitters/__init__.py +0 -0
  63. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/splitters/splitter.py +0 -0
  64. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/splitters/token_splitter.py +0 -0
  65. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/stores/__init__.py +0 -0
  66. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/stores/embedding_data.py +0 -0
  67. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/stores/store.py +0 -0
  68. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_ingesting/types.py +0 -0
  69. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_models/__init__.py +0 -0
  70. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_models/models.py +0 -0
  71. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_models/utils.py +0 -0
  72. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_retrievers/__init__.py +0 -0
  73. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_retrievers/adapters.py +0 -0
  74. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_retrievers/default_retriever.py +0 -0
  75. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_retrievers/openai_retriever.py +0 -0
  76. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_retrievers/query_retriever.py +0 -0
  77. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/ml_retrievers/retriever.py +0 -0
  78. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/models/__init__.py +0 -0
  79. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/models/embedding_model.py +0 -0
  80. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/prompts/__init__.py +0 -0
  81. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/prompts/database_query_agent.prompt +0 -0
  82. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/prompts/functional_calling_agent_base.prompt +0 -0
  83. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/prompts/nl_query_filter.prompt +0 -0
  84. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/prompts/react_chat.prompt +0 -0
  85. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/py.typed +0 -0
  86. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/utils/__init__.py +0 -0
  87. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/amsdal_ml/utils/query_utils.py +0 -0
  88. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/config.yml +0 -0
  89. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/docker-compose.tests.yml +0 -0
  90. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/license_check.py +0 -0
  91. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/scripts/release.sh +0 -0
  92. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/scripts/tag_check.sh +0 -0
  93. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/__init__.py +0 -0
  94. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/__init__.py +0 -0
  95. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/test_arun.py +0 -0
  96. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/test_astream.py +0 -0
  97. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/test_astream_final_only.py +0 -0
  98. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/test_fakes.py +0 -0
  99. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/test_functional_calling_agent.py +0 -0
  100. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/test_qa_agent_with_nlq_tool.py +0 -0
  101. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/agents_tests/test_tool_call_arguments_async.py +0 -0
  102. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/conftest.py +0 -0
  103. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/__init__.py +0 -0
  104. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/author.py +0 -0
  105. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/book.py +0 -0
  106. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/category.py +0 -0
  107. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/order.py +0 -0
  108. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/product.py +0 -0
  109. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/user.py +0 -0
  110. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/fixtures/models/vehicle.py +0 -0
  111. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/ingesting/__init__.py +0 -0
  112. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/ingesting/test_folder_loader_and_rag.py +0 -0
  113. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/ingesting/test_ingestion_components.py +0 -0
  114. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/ingesting/test_model_ingester.py +0 -0
  115. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/__init__.py +0 -0
  116. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/mock_tests/__init__.py +0 -0
  117. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/mock_tests/test_retriever_mock.py +0 -0
  118. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/models_tests/__init__.py +0 -0
  119. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/models_tests/test_nl_query_models.py +0 -0
  120. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/schema_tests/__init__.py +0 -0
  121. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/schema_tests/test_comprehensive_schema.py +0 -0
  122. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/nlqueryretriever_tests/schema_tests/test_nested_list_skipping.py +0 -0
  123. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/test_files/.gitkeep +0 -0
  124. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/test_files/pdf/Aspida.pdf +0 -0
  125. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/test_files/pdf/Nassau.pdf +0 -0
  126. {amsdal_ml-0.2.1 → amsdal_ml-0.3.0}/tests/test_openai_model.py +0 -0
@@ -1,14 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amsdal_ml
3
- Version: 0.2.1
3
+ Version: 0.3.0
4
4
  Summary: amsdal_ml plugin for AMSDAL Framework
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: aiohttp==3.12.15
7
- Requires-Dist: amsdal-cli>=0.5.7
8
- Requires-Dist: amsdal-data>=0.5.9
9
- Requires-Dist: amsdal-models>=0.5.9
10
- Requires-Dist: amsdal-utils>=0.5.4
11
- Requires-Dist: amsdal>=0.5.6
7
+ Requires-Dist: amsdal-cli>=0.6.1
8
+ Requires-Dist: amsdal-server>=0.6.2
9
+ Requires-Dist: amsdal>=0.6.0
12
10
  Requires-Dist: mcp>=0.1
13
11
  Requires-Dist: openai==1.100.2
14
12
  Requires-Dist: pydantic-settings~=2.12
@@ -0,0 +1 @@
1
+ __version__ = '0.3.0'
@@ -24,6 +24,7 @@ class FileAttachment:
24
24
  type: str # one of: PLAIN_TEXT, FILE_ID
25
25
  content: Any
26
26
  metadata: dict[str, Any] | None = None
27
+ mime_type: str | None = None
27
28
 
28
29
  def __post_init__(self) -> None:
29
30
  if self.metadata is None:
@@ -40,7 +41,7 @@ class FileItem:
40
41
  def from_path(path: str, *, filedata: FileData | None = None) -> FileItem:
41
42
  # Caller is responsible for lifecycle; loaders may close after upload.
42
43
  f = open(path, 'rb')
43
- return FileItem(file=f, filename=path.split('/')[-1], filedata=filedata)
44
+ return FileItem(file=f, filename=path.rsplit('/', 1)[-1], filedata=filedata)
44
45
 
45
46
  @staticmethod
46
47
  def from_bytes(data: bytes, *, filename: str | None = None, filedata: FileData | None = None) -> FileItem:
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import io
5
5
  import logging
6
+ import mimetypes
6
7
  from collections.abc import Sequence
7
8
  from typing import Any
8
9
  from typing import BinaryIO
@@ -41,6 +42,12 @@ class OpenAIFileLoader(BaseFileLoader):
41
42
 
42
43
  up = await self.client.files.create(file=(filename or 'upload.bin', buf), purpose=self.purpose)
43
44
 
45
+ mime_type = None
46
+ if filedata is not None and filedata.mime:
47
+ mime_type = filedata.mime
48
+ else:
49
+ mime_type = mimetypes.guess_type(filename or "")[0]
50
+
44
51
  meta: dict[str, Any] = {
45
52
  'filename': filename,
46
53
  'provider': 'openai',
@@ -56,7 +63,7 @@ class OpenAIFileLoader(BaseFileLoader):
56
63
  if filedata is not None:
57
64
  meta['filedata'] = filedata.model_dump()
58
65
 
59
- return FileAttachment(type=FILE_ID, content=up.id, metadata=meta)
66
+ return FileAttachment(type=FILE_ID, content=up.id, metadata=meta, mime_type=mime_type)
60
67
 
61
68
  async def load(self, item: FileItem) -> FileAttachment:
62
69
  return await self._upload_one(item.file, filename=item.filename, filedata=item.filedata)
@@ -351,6 +351,13 @@ class OpenAIModel(MLModel):
351
351
 
352
352
  return None
353
353
 
354
+ def _map_responses_text_config(self, response_format: dict[str, Any]) -> dict[str, Any]:
355
+ if response_format.get("type") == "json_schema":
356
+ format_config: dict[str, Any] = {"type": "json_schema"}
357
+ format_config.update(response_format["json_schema"])
358
+ return {"format": format_config}
359
+ return {"format": dict(response_format)}
360
+
354
361
  def _ensure_async_client(self) -> None:
355
362
  if self.client is None:
356
363
  try:
@@ -403,8 +410,7 @@ class OpenAIModel(MLModel):
403
410
 
404
411
  return atts
405
412
 
406
- @staticmethod
407
- def _has_file_ids(atts: list[FileAttachment]) -> bool:
413
+ def _has_file_ids(self, atts: list[FileAttachment]) -> bool:
408
414
  return any(a.type == FILE_ID for a in atts)
409
415
 
410
416
  def _build_input_content(
@@ -416,7 +422,11 @@ class OpenAIModel(MLModel):
416
422
  if a.type == PLAIN_TEXT:
417
423
  parts.append({"type": "input_text", "text": str(a.content)})
418
424
  elif a.type == FILE_ID:
419
- parts.append({"type": "input_file", "file_id": str(a.content)})
425
+ mime = (a.mime_type or (a.metadata or {}).get("mime_type") or "").lower()
426
+ if mime.startswith("image/"):
427
+ parts.append({"type": "input_image", "file_id": str(a.content)})
428
+ else:
429
+ parts.append({"type": "input_file", "file_id": str(a.content)})
420
430
  return [{"role": "user", "content": parts}]
421
431
 
422
432
  messages = cast(list[StructuredMessage], [dict(msg) for msg in input])
@@ -425,7 +435,11 @@ class OpenAIModel(MLModel):
425
435
  if a.type == PLAIN_TEXT:
426
436
  parts.append({"type": "input_text", "text": str(a.content)})
427
437
  elif a.type == FILE_ID:
428
- parts.append({"type": "input_file", "file_id": str(a.content)})
438
+ mime = (a.mime_type or (a.metadata or {}).get("mime_type") or "").lower()
439
+ if mime.startswith("image/"):
440
+ parts.append({"type": "input_image", "file_id": str(a.content)})
441
+ else:
442
+ parts.append({"type": "input_file", "file_id": str(a.content)})
429
443
 
430
444
  if parts:
431
445
  messages.append({"role": "user", "content": parts})
@@ -439,8 +453,7 @@ class OpenAIModel(MLModel):
439
453
  return f"{prompt}\n\n[ATTACHMENTS]\n" + "\n\n".join(extras)
440
454
 
441
455
  # ---------- error mapping ----------
442
- @staticmethod
443
- def _map_openai_error(err: Exception) -> ModelError:
456
+ def _map_openai_error(self, err: Exception) -> ModelError:
444
457
  if isinstance(err, openai.RateLimitError):
445
458
  return ModelRateLimitError(str(err))
446
459
  if isinstance(err, openai.APIConnectionError):
@@ -532,7 +545,7 @@ class OpenAIModel(MLModel):
532
545
  "temperature": self.temperature,
533
546
  }
534
547
  if response_format:
535
- kwargs["response_format"] = response_format
548
+ kwargs["text"] = self._map_responses_text_config(response_format)
536
549
 
537
550
  try:
538
551
  resp: Any = client.responses.create(**kwargs)
@@ -552,7 +565,7 @@ class OpenAIModel(MLModel):
552
565
  "stream": True,
553
566
  }
554
567
  if response_format:
555
- kwargs["response_format"] = response_format
568
+ kwargs["text"] = self._map_responses_text_config(response_format)
556
569
 
557
570
  try:
558
571
  stream_or_resp = client.responses.create(**kwargs)
@@ -641,7 +654,7 @@ class OpenAIModel(MLModel):
641
654
  "temperature": self.temperature,
642
655
  }
643
656
  if response_format:
644
- kwargs["response_format"] = response_format
657
+ kwargs["text"] = self._map_responses_text_config(response_format)
645
658
 
646
659
  try:
647
660
  resp: Any = await client.responses.create(**kwargs)
@@ -661,7 +674,7 @@ class OpenAIModel(MLModel):
661
674
  "stream": True,
662
675
  }
663
676
  if response_format:
664
- kwargs["response_format"] = response_format
677
+ kwargs["text"] = self._map_responses_text_config(response_format)
665
678
 
666
679
  try:
667
680
  stream_or_resp = await client.responses.create(**kwargs)
@@ -1,3 +1,15 @@
1
+ ## [v0.3.0](https://pypi.org/project/amsdal_ml/0.3.0/) - 2026-02-06
2
+
3
+ ## Update to amsdal v0.6.0
4
+
5
+ ## [v0.2.2](https://pypi.org/project/amsdal_ml/0.2.2/) - 2026-01-19
6
+
7
+ ### Fixed
8
+
9
+ - Added support for `JSON_SCHEMA` response format when using attachments in OpenAI Responses API.
10
+ - Support for images in OpenAI Responses API (automatically selects `input_image` based on MIME type).
11
+ - Added `mime_type` support to `FileAttachment` and `OpenAIFileLoader`.
12
+
1
13
  ## [v0.2.1](https://pypi.org/project/amsdal_ml/0.2.1/) - 2025-12-23
2
14
 
3
15
  ### New Features
@@ -0,0 +1,3 @@
1
+ ## [v0.3.0](https://pypi.org/project/amsdal_ml/0.3.0/) - 2026-02-06
2
+
3
+ ## Update to amsdal v0.6.0
@@ -15,12 +15,10 @@ description = "amsdal_ml plugin for AMSDAL Framework"
15
15
  readme = "README.md"
16
16
  requires-python = ">=3.11"
17
17
  dependencies = [
18
- "amsdal>=0.5.6",
19
- "amsdal_cli>=0.5.7",
18
+ "amsdal>=0.6.0",
19
+ "amsdal_cli>=0.6.1",
20
20
  "aiohttp==3.12.15",
21
- "amsdal_data>=0.5.9",
22
- "amsdal_models>=0.5.9",
23
- "amsdal_utils>=0.5.4",
21
+ "amsdal_server>=0.6.2",
24
22
  "openai==1.100.2",
25
23
  "pydantic~=2.12",
26
24
  "pydantic-settings~=2.12",
@@ -137,6 +135,7 @@ ignore = [
137
135
  "UP045",
138
136
  "Q000",
139
137
  "Q003",
138
+ "UP042",
140
139
  ]
141
140
 
142
141
  [tool.ruff.lint.per-file-ignores]