naas-abi-core 1.0.6__tar.gz → 1.0.8__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 (131) hide show
  1. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/=0.9.13 +4 -4
  2. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/CHANGELOG.md +14 -0
  3. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/PKG-INFO +6 -1
  4. naas_abi_core-1.0.8/assets/favicon.ico +0 -0
  5. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/api/api.py +5 -2
  6. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/__init__.py +4 -3
  7. naas_abi_core-1.0.8/naas_abi_core/cli/deploy.py +194 -0
  8. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration.py +3 -1
  9. naas_abi_core-1.0.8/naas_abi_core/engine/engine_configuration/EngineConfiguration_Deploy.py +6 -0
  10. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/pyproject.toml +13 -1
  11. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/.gitignore +0 -0
  12. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/README.md +0 -0
  13. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/__init__.py +0 -0
  14. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/api/api_test.py +0 -0
  15. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/api/openapi_doc.py +0 -0
  16. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/mcp/Dockerfile.mcp +0 -0
  17. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/mcp/mcp_server.py +0 -0
  18. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/mcp/mcp_server_test.py +0 -0
  19. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/terminal_agent/main.py +0 -0
  20. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/apps/terminal_agent/terminal_style.py +0 -0
  21. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/agent.py +0 -0
  22. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/chat.py +0 -0
  23. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/config.py +0 -0
  24. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/init.py +0 -0
  25. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/module.py +0 -0
  26. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/new.py +0 -0
  27. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/cli/secret.py +0 -0
  28. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/Engine.py +0 -0
  29. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/EngineProxy.py +0 -0
  30. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/Engine_test.py +0 -0
  31. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/IEngine.py +0 -0
  32. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/conftest.py +0 -0
  33. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration_GenericLoader.py +0 -0
  34. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration_ObjectStorageService.py +0 -0
  35. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration_ObjectStorageService_test.py +0 -0
  36. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration_SecretService.py +0 -0
  37. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration_TripleStoreService.py +0 -0
  38. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration_VectorStoreService.py +0 -0
  39. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/EngineConfiguration_test.py +0 -0
  40. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_configuration/utils/PydanticModelValidator.py +0 -0
  41. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_loaders/EngineModuleLoader.py +0 -0
  42. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_loaders/EngineOntologyLoader.py +0 -0
  43. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/engine/engine_loaders/EngineServiceLoader.py +0 -0
  44. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/integration/__init__.py +0 -0
  45. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/integration/integration.py +0 -0
  46. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/models/Model.py +0 -0
  47. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/models/OpenRouter.py +0 -0
  48. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/models/OpenRouter_test.py +0 -0
  49. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/module/Module.py +0 -0
  50. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/module/ModuleAgentLoader.py +0 -0
  51. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/module/ModuleUtils.py +0 -0
  52. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/modules/templatablesparqlquery/README.md +0 -0
  53. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/modules/templatablesparqlquery/__init__.py +0 -0
  54. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/modules/templatablesparqlquery/ontologies/TemplatableSparqlQueryOntology.ttl +0 -0
  55. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/modules/templatablesparqlquery/workflows/GenericWorkflow.py +0 -0
  56. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/modules/templatablesparqlquery/workflows/TemplatableSparqlQueryLoader.py +0 -0
  57. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/pipeline/__init__.py +0 -0
  58. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/pipeline/pipeline.py +0 -0
  59. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/__init__.py +0 -0
  60. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/Agent.py +0 -0
  61. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/AgentMemory_test.py +0 -0
  62. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/Agent_test.py +0 -0
  63. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/IntentAgent.py +0 -0
  64. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/IntentAgent_test.py +0 -0
  65. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/beta/Embeddings.py +0 -0
  66. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/beta/IntentMapper.py +0 -0
  67. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/beta/LocalModel.py +0 -0
  68. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/beta/VectorStore.py +0 -0
  69. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/test_agent_memory.py +0 -0
  70. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/agent/test_postgres_integration.py +0 -0
  71. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/cache/CacheFactory.py +0 -0
  72. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/cache/CachePort.py +0 -0
  73. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/cache/CacheService.py +0 -0
  74. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/cache/CacheService_test.py +0 -0
  75. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/cache/adapters/secondary/CacheFSAdapter.py +0 -0
  76. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/object_storage/ObjectStorageFactory.py +0 -0
  77. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/object_storage/ObjectStoragePort.py +0 -0
  78. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/object_storage/ObjectStorageService.py +0 -0
  79. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterFS.py +0 -0
  80. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterNaas.py +0 -0
  81. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterS3.py +0 -0
  82. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/ontology/OntologyPorts.py +0 -0
  83. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/ontology/OntologyService.py +0 -0
  84. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/ontology/adaptors/secondary/OntologyService_SecondaryAdaptor_NERPort.py +0 -0
  85. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/Secret.py +0 -0
  86. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/SecretPorts.py +0 -0
  87. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/Secret_test.py +0 -0
  88. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/adaptors/secondary/Base64Secret.py +0 -0
  89. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/adaptors/secondary/Base64Secret_test.py +0 -0
  90. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/adaptors/secondary/NaasSecret.py +0 -0
  91. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/adaptors/secondary/NaasSecret_test.py +0 -0
  92. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/secret/adaptors/secondary/dotenv_secret_secondaryadaptor.py +0 -0
  93. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/TripleStoreFactory.py +0 -0
  94. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/TripleStorePorts.py +0 -0
  95. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/TripleStoreService.py +0 -0
  96. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/adaptors/secondary/AWSNeptune.py +0 -0
  97. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/adaptors/secondary/AWSNeptune_test.py +0 -0
  98. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/adaptors/secondary/Oxigraph.py +0 -0
  99. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/adaptors/secondary/Oxigraph_test.py +0 -0
  100. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/adaptors/secondary/TripleStoreService__SecondaryAdaptor__Filesystem.py +0 -0
  101. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/adaptors/secondary/TripleStoreService__SecondaryAdaptor__ObjectStorage.py +0 -0
  102. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/triple_store/adaptors/secondary/base/TripleStoreService__SecondaryAdaptor__FileBase.py +0 -0
  103. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/IVectorStorePort.py +0 -0
  104. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/IVectorStorePort_test.py +0 -0
  105. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/VectorStoreFactory.py +0 -0
  106. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/VectorStoreService.py +0 -0
  107. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/VectorStoreService_test.py +0 -0
  108. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/__init__.py +0 -0
  109. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/adapters/QdrantAdapter.py +0 -0
  110. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/services/vector_store/adapters/QdrantAdapter_test.py +0 -0
  111. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/tests/test_services_imports.py +0 -0
  112. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/Expose.py +0 -0
  113. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/Graph.py +0 -0
  114. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/JSON.py +0 -0
  115. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/LazyLoader.py +0 -0
  116. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/Logger.py +0 -0
  117. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/OntologyReasoner.py +0 -0
  118. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/OntologyYaml.disabled.py +0 -0
  119. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/SPARQL.py +0 -0
  120. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/Storage.py +0 -0
  121. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/StorageUtils.py +0 -0
  122. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/String.py +0 -0
  123. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/Workers.py +0 -0
  124. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/__init__.py +0 -0
  125. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/onto2py/README.md +0 -0
  126. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/onto2py/__init__.py +0 -0
  127. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/onto2py/__main__.py +0 -0
  128. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/onto2py/onto2py.py +0 -0
  129. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/utils/onto2py/tests/ttl2py_test.py +0 -0
  130. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/workflow/__init__.py +0 -0
  131. {naas_abi_core-1.0.6 → naas_abi_core-1.0.8}/naas_abi_core/workflow/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Collecting uv
2
- Downloading uv-0.9.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)
3
- Downloading uv-0.9.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.7 MB)
4
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.7/21.7 MB 148.5 MB/s 0:00:00
2
+ Downloading uv-0.9.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)
3
+ Downloading uv-0.9.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.7 MB)
4
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.7/21.7 MB 130.7 MB/s 0:00:00
5
5
  Installing collected packages: uv
6
- Successfully installed uv-0.9.14
6
+ Successfully installed uv-0.9.15
@@ -2,6 +2,20 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v1.0.8 (2025-12-05)
6
+
7
+
8
+ ## v1.0.7 (2025-12-03)
9
+
10
+ ### Bug Fixes
11
+
12
+ - Working on embedding assets in the release
13
+ ([`9737428`](https://github.com/jupyter-naas/abi/commit/97374285cb3c79ed03399859c58b8cac6373627d))
14
+
15
+ - **marketplace**: Convert applications.pubmed to a real module
16
+ ([`b9ac395`](https://github.com/jupyter-naas/abi/commit/b9ac395c0e90980fb19379d40ae5017efcf06d1d))
17
+
18
+
5
19
  ## v1.0.6 (2025-12-02)
6
20
 
7
21
  ### Bug Fixes
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: naas-abi-core
3
- Version: 1.0.6
3
+ Version: 1.0.8
4
4
  Summary: Abi framework allowing you to build your AI system.
5
5
  Author-email: Maxime Jublou <maxime@naas.ai>, Florent Ravenel <florent@naas.ai>, Jeremy Ravenel <jeremy@naas.ai>
6
6
  Requires-Python: <4,>=3.10
7
7
  Requires-Dist: click<8.2,>=8.1.1
8
+ Requires-Dist: docker>=7.1.0
8
9
  Requires-Dist: dotenv>=0.9.9
9
10
  Requires-Dist: fastapi<0.116,>=0.115.5
10
11
  Requires-Dist: fastmcp>=2.13.2
@@ -14,6 +15,7 @@ Requires-Dist: langgraph>=0.6.6
14
15
  Requires-Dist: loguru<0.8,>=0.7.2
15
16
  Requires-Dist: pandas-stubs>=2.3.2.250926
16
17
  Requires-Dist: pandas>=2.3.3
18
+ Requires-Dist: pillow>=12.0.0
17
19
  Requires-Dist: pip>=25.1.1
18
20
  Requires-Dist: psycopg[binary,pool]>=3.0.0
19
21
  Requires-Dist: pydantic>=2.11.5
@@ -29,11 +31,14 @@ Requires-Dist: starlette>=0.46.2
29
31
  Requires-Dist: types-tqdm>=4.67.0.20250809
30
32
  Provides-Extra: all
31
33
  Requires-Dist: boto3<2,>=1.38.19; extra == 'all'
34
+ Requires-Dist: langchain-openai>=0.3.35; extra == 'all'
32
35
  Requires-Dist: paramiko<4.0.0,>=3.5.1; extra == 'all'
33
36
  Requires-Dist: qdrant-client>=1.14.3; extra == 'all'
34
37
  Requires-Dist: sshtunnel>=0.4.0; extra == 'all'
35
38
  Provides-Extra: aws
36
39
  Requires-Dist: boto3<2,>=1.38.19; extra == 'aws'
40
+ Provides-Extra: openrouter
41
+ Requires-Dist: langchain-openai>=0.3.35; extra == 'openrouter'
37
42
  Provides-Extra: qdrant
38
43
  Requires-Dist: qdrant-client>=1.14.3; extra == 'qdrant'
39
44
  Provides-Extra: ssh
Binary file
@@ -16,6 +16,7 @@ from fastapi.security.oauth2 import OAuth2
16
16
  from fastapi.security.utils import get_authorization_scheme_param
17
17
  from fastapi.staticfiles import StaticFiles
18
18
  from naas_abi_core import logger
19
+ from importlib.resources import files
19
20
 
20
21
  # Docs
21
22
  from naas_abi_core.apps.api.openapi_doc import API_LANDING_HTML, TAGS_METADATA
@@ -49,8 +50,10 @@ app.add_middleware(
49
50
  allow_headers=["*"],
50
51
  )
51
52
 
52
- # Mount the static directory
53
- app.mount("/static", StaticFiles(directory="assets"), name="static")
53
+
54
+ static_dir = os.path.join(os.path.dirname(str(files("naas_abi_core"))), "assets")
55
+ app.mount("/static", StaticFiles(directory=str(static_dir)), name="static")
56
+
54
57
 
55
58
 
56
59
  # Custom OAuth2 class that accepts query parameter
@@ -7,7 +7,7 @@ from .init import init
7
7
  from .module import module
8
8
  from .new import new
9
9
  from .secret import secrets
10
-
10
+ from .deploy import deploy
11
11
  # from dotenv import load_dotenv
12
12
 
13
13
  # load_dotenv()
@@ -48,6 +48,7 @@ main.add_command(agent)
48
48
  main.add_command(chat)
49
49
  main.add_command(new)
50
50
  main.add_command(init)
51
+ main.add_command(deploy)
51
52
 
52
- if __name__ == "__main__":
53
- main()
53
+ # if __name__ == "__main__":
54
+ main()
@@ -0,0 +1,194 @@
1
+ import json
2
+ import subprocess
3
+ from uuid import uuid4
4
+
5
+ import click
6
+ import requests
7
+ from pydantic import BaseModel
8
+ from rich.console import Console
9
+ from rich.markdown import Markdown
10
+
11
+ from naas_abi_core import logger
12
+ from naas_abi_core.engine.engine_configuration.EngineConfiguration import (
13
+ EngineConfiguration,
14
+ )
15
+
16
+
17
+ @click.group("deploy")
18
+ def deploy():
19
+ pass
20
+
21
+
22
+ class Container(BaseModel):
23
+ name: str
24
+ image: str
25
+ port: int
26
+ cpu: str
27
+ memory: str
28
+ env: dict
29
+
30
+
31
+ class Space(BaseModel):
32
+ name: str
33
+ containers: list[Container]
34
+
35
+
36
+ class NaasAPIClient:
37
+ naas_api_key: str
38
+ base_url: str
39
+
40
+ def __init__(self, naas_api_key: str):
41
+ self.naas_api_key = naas_api_key
42
+ self.base_url = "https://api.naas.ai"
43
+
44
+ def create_registry(self, name: str):
45
+ response = requests.post(
46
+ f"{self.base_url}/registry/",
47
+ headers={"Authorization": f"Bearer {self.naas_api_key}"},
48
+ json={"name": name},
49
+ )
50
+ if response.status_code == 409:
51
+ return self.get_registry(name)
52
+ response.raise_for_status()
53
+ return response.json()
54
+
55
+ def get_registry(self, name: str):
56
+ response = requests.get(
57
+ f"{self.base_url}/registry/{name}",
58
+ headers={"Authorization": f"Bearer {self.naas_api_key}"},
59
+ )
60
+ response.raise_for_status()
61
+ return response.json()
62
+
63
+ def get_registry_credentials(self, name: str):
64
+ response = requests.get(
65
+ f"{self.base_url}/registry/{name}/credentials",
66
+ headers={"Authorization": f"Bearer {self.naas_api_key}"},
67
+ )
68
+ response.raise_for_status()
69
+ return response.json()
70
+
71
+ def update_space(self, space: Space) -> dict:
72
+ response = requests.put(
73
+ f"{self.base_url}/space/{space.name}",
74
+ headers={"Authorization": f"Bearer {self.naas_api_key}"},
75
+ json=space.model_dump(),
76
+ )
77
+ response.raise_for_status()
78
+ return response.json()
79
+
80
+ def create_space(self, space: Space) -> dict:
81
+ response = requests.post(
82
+ f"{self.base_url}/space/",
83
+ headers={"Authorization": f"Bearer {self.naas_api_key}"},
84
+ json=space.model_dump(),
85
+ )
86
+
87
+ if response.status_code == 409:
88
+ return self.update_space(space)
89
+
90
+ response.raise_for_status()
91
+ return response.json()
92
+
93
+ def get_space(self, name: str) -> dict:
94
+ response = requests.get(
95
+ f"{self.base_url}/space/{name}",
96
+ headers={"Authorization": f"Bearer {self.naas_api_key}"},
97
+ )
98
+ response.raise_for_status()
99
+ return response.json()
100
+
101
+
102
+ class NaasDeployer:
103
+ image_name: str
104
+
105
+ naas_api_client: NaasAPIClient
106
+
107
+ def __init__(self, configuration: EngineConfiguration):
108
+ self.configuration = configuration
109
+ self.image_name = str(uuid4())
110
+ assert configuration.deploy is not None
111
+ self.naas_api_client = NaasAPIClient(configuration.deploy.naas_api_key)
112
+
113
+ def docker_build(self, image_name: str):
114
+ subprocess.run(
115
+ f"docker build -t {image_name} . --platform linux/amd64", shell=True
116
+ )
117
+
118
+ def deploy(self):
119
+ registry = self.naas_api_client.create_registry(
120
+ self.configuration.deploy.space_name
121
+ )
122
+
123
+ uid = str(uuid4())
124
+
125
+ image_name = f"{registry['registry']['uri']}:{uid}"
126
+ self.docker_build(image_name)
127
+ credentials = self.naas_api_client.get_registry_credentials(
128
+ self.configuration.deploy.space_name
129
+ )
130
+ docker_login_command = f"docker login -u {credentials['credentials']['username']} -p {credentials['credentials']['password']} {registry['registry']['uri']}"
131
+ subprocess.run(docker_login_command, shell=True)
132
+ subprocess.run(f"docker push {image_name}", shell=True)
133
+
134
+ image_sha = (
135
+ subprocess.run(
136
+ "docker inspect --format='{{index .RepoDigests 0}}' "
137
+ + image_name
138
+ + " | cut -d'@' -f2",
139
+ shell=True,
140
+ capture_output=True,
141
+ )
142
+ .stdout.strip()
143
+ .decode("utf-8")
144
+ )
145
+
146
+ image_name_with_sha = f"{image_name.replace(':' + uid, '')}@{image_sha}"
147
+
148
+ self.naas_api_client.create_space(
149
+ Space(
150
+ name=self.configuration.deploy.space_name,
151
+ containers=[
152
+ Container(
153
+ name="api",
154
+ image=image_name_with_sha,
155
+ port=9879,
156
+ cpu="1",
157
+ memory="1Gi",
158
+ env={
159
+ "NAAS_API_KEY": self.configuration.deploy.naas_api_key,
160
+ "ENV": "prod",
161
+ },
162
+ )
163
+ ],
164
+ )
165
+ )
166
+
167
+ space = self.naas_api_client.get_space(self.configuration.deploy.space_name)
168
+
169
+ Console().print(
170
+ Markdown(f"""
171
+ # Deployment successful
172
+
173
+ - Space: {self.configuration.deploy.space_name}
174
+ - Image: {image_name_with_sha}
175
+ - URL: https://{self.configuration.deploy.space_name}.default.space.naas.ai
176
+
177
+ ```json
178
+ {json.dumps(space, indent=4)}
179
+ ```
180
+ """)
181
+ )
182
+
183
+
184
+ @deploy.command("naas")
185
+ def naas():
186
+ configuration: EngineConfiguration = EngineConfiguration.load_configuration()
187
+
188
+ if configuration.deploy is None:
189
+ logger.error(
190
+ "Deploy configuration not found in the yaml configuration file. Please add a deploy section to the configuration file."
191
+ )
192
+
193
+ deployer = NaasDeployer(configuration)
194
+ deployer.deploy()
@@ -20,7 +20,7 @@ from naas_abi_core.engine.engine_configuration.EngineConfiguration_VectorStoreSe
20
20
  from naas_abi_core.services.secret.Secret import Secret
21
21
  from pydantic import BaseModel, model_validator
22
22
  from typing_extensions import Literal
23
-
23
+ from naas_abi_core.engine.engine_configuration.EngineConfiguration_Deploy import DeployConfiguration
24
24
 
25
25
  class ServicesConfiguration(BaseModel):
26
26
  object_storage: ObjectStorageServiceConfiguration
@@ -80,6 +80,8 @@ class GlobalConfig(BaseModel):
80
80
 
81
81
  class EngineConfiguration(BaseModel):
82
82
  api: ApiConfiguration
83
+
84
+ deploy: DeployConfiguration | None = None
83
85
 
84
86
  services: ServicesConfiguration
85
87
 
@@ -0,0 +1,6 @@
1
+ from pydantic import BaseModel
2
+
3
+ class DeployConfiguration(BaseModel):
4
+ workspace_id: str
5
+ space_name: str
6
+ naas_api_key: str
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "naas-abi-core"
3
- version = "1.0.6"
3
+ version = "1.0.8"
4
4
  description = "Abi framework allowing you to build your AI system."
5
5
  authors = [{ name = "Maxime Jublou", email = "maxime@naas.ai" },{ name = "Florent Ravenel", email = "florent@naas.ai" }, { name = "Jeremy Ravenel", email = "jeremy@naas.ai" }]
6
6
  requires-python = ">=3.10,<4"
@@ -30,6 +30,8 @@ dependencies = [
30
30
  "pandas-stubs>=2.3.2.250926",
31
31
  "fastmcp>=2.13.2",
32
32
  "pandas>=2.3.3",
33
+ "pillow>=12.0.0",
34
+ "docker>=7.1.0",
33
35
  ]
34
36
 
35
37
  [project.optional-dependencies]
@@ -48,6 +50,10 @@ all = [
48
50
  "naas-abi-core[ssh]",
49
51
  "naas-abi-core[aws]",
50
52
  "naas-abi-core[qdrant]",
53
+ "naas-abi-core[openrouter]",
54
+ ]
55
+ openrouter = [
56
+ "langchain-openai>=0.3.35",
51
57
  ]
52
58
  [project.scripts]
53
59
  abi = "naas_abi_core.cli:main"
@@ -62,6 +68,7 @@ allow-direct-references = true
62
68
 
63
69
  [dependency-groups]
64
70
  dev = [
71
+ "mypy>=1.19.0",
65
72
  "pytest>=9.0.1",
66
73
  "python-semantic-release>=9.21.0",
67
74
  ]
@@ -95,3 +102,8 @@ match = "^dev"
95
102
  prerelease = true
96
103
  prerelease_token = "dev"
97
104
 
105
+ [tool.hatch.build.targets.wheel.force-include]
106
+ "assets" = "assets"
107
+
108
+ [tool.hatch.build.targets.sdist.force-include]
109
+ "assets" = "assets"
File without changes
File without changes