naas-abi-core 1.0.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 (124) hide show
  1. naas_abi_core/__init__.py +1 -0
  2. naas_abi_core/apps/api/api.py +242 -0
  3. naas_abi_core/apps/api/api_test.py +281 -0
  4. naas_abi_core/apps/api/openapi_doc.py +307 -0
  5. naas_abi_core/apps/mcp/mcp_server.py +243 -0
  6. naas_abi_core/apps/mcp/mcp_server_test.py +163 -0
  7. naas_abi_core/apps/terminal_agent/main.py +555 -0
  8. naas_abi_core/apps/terminal_agent/terminal_style.py +175 -0
  9. naas_abi_core/cli/__init__.py +53 -0
  10. naas_abi_core/cli/agent.py +30 -0
  11. naas_abi_core/cli/chat.py +26 -0
  12. naas_abi_core/cli/config.py +49 -0
  13. naas_abi_core/cli/init.py +13 -0
  14. naas_abi_core/cli/module.py +28 -0
  15. naas_abi_core/cli/new.py +13 -0
  16. naas_abi_core/cli/secret.py +79 -0
  17. naas_abi_core/engine/Engine.py +87 -0
  18. naas_abi_core/engine/EngineProxy.py +109 -0
  19. naas_abi_core/engine/Engine_test.py +6 -0
  20. naas_abi_core/engine/IEngine.py +91 -0
  21. naas_abi_core/engine/conftest.py +45 -0
  22. naas_abi_core/engine/engine_configuration/EngineConfiguration.py +160 -0
  23. naas_abi_core/engine/engine_configuration/EngineConfiguration_GenericLoader.py +49 -0
  24. naas_abi_core/engine/engine_configuration/EngineConfiguration_ObjectStorageService.py +131 -0
  25. naas_abi_core/engine/engine_configuration/EngineConfiguration_ObjectStorageService_test.py +26 -0
  26. naas_abi_core/engine/engine_configuration/EngineConfiguration_SecretService.py +116 -0
  27. naas_abi_core/engine/engine_configuration/EngineConfiguration_TripleStoreService.py +171 -0
  28. naas_abi_core/engine/engine_configuration/EngineConfiguration_VectorStoreService.py +65 -0
  29. naas_abi_core/engine/engine_configuration/EngineConfiguration_test.py +9 -0
  30. naas_abi_core/engine/engine_configuration/utils/PydanticModelValidator.py +15 -0
  31. naas_abi_core/engine/engine_loaders/EngineModuleLoader.py +302 -0
  32. naas_abi_core/engine/engine_loaders/EngineOntologyLoader.py +16 -0
  33. naas_abi_core/engine/engine_loaders/EngineServiceLoader.py +47 -0
  34. naas_abi_core/integration/__init__.py +7 -0
  35. naas_abi_core/integration/integration.py +28 -0
  36. naas_abi_core/models/Model.py +198 -0
  37. naas_abi_core/models/OpenRouter.py +15 -0
  38. naas_abi_core/models/OpenRouter_test.py +36 -0
  39. naas_abi_core/module/Module.py +245 -0
  40. naas_abi_core/module/ModuleAgentLoader.py +49 -0
  41. naas_abi_core/module/ModuleUtils.py +20 -0
  42. naas_abi_core/modules/templatablesparqlquery/README.md +196 -0
  43. naas_abi_core/modules/templatablesparqlquery/__init__.py +39 -0
  44. naas_abi_core/modules/templatablesparqlquery/ontologies/TemplatableSparqlQueryOntology.ttl +116 -0
  45. naas_abi_core/modules/templatablesparqlquery/workflows/GenericWorkflow.py +48 -0
  46. naas_abi_core/modules/templatablesparqlquery/workflows/TemplatableSparqlQueryLoader.py +192 -0
  47. naas_abi_core/pipeline/__init__.py +6 -0
  48. naas_abi_core/pipeline/pipeline.py +70 -0
  49. naas_abi_core/services/__init__.py +0 -0
  50. naas_abi_core/services/agent/Agent.py +1619 -0
  51. naas_abi_core/services/agent/AgentMemory_test.py +28 -0
  52. naas_abi_core/services/agent/Agent_test.py +214 -0
  53. naas_abi_core/services/agent/IntentAgent.py +1171 -0
  54. naas_abi_core/services/agent/IntentAgent_test.py +139 -0
  55. naas_abi_core/services/agent/beta/Embeddings.py +180 -0
  56. naas_abi_core/services/agent/beta/IntentMapper.py +119 -0
  57. naas_abi_core/services/agent/beta/LocalModel.py +88 -0
  58. naas_abi_core/services/agent/beta/VectorStore.py +89 -0
  59. naas_abi_core/services/agent/test_agent_memory.py +278 -0
  60. naas_abi_core/services/agent/test_postgres_integration.py +145 -0
  61. naas_abi_core/services/cache/CacheFactory.py +31 -0
  62. naas_abi_core/services/cache/CachePort.py +63 -0
  63. naas_abi_core/services/cache/CacheService.py +246 -0
  64. naas_abi_core/services/cache/CacheService_test.py +85 -0
  65. naas_abi_core/services/cache/adapters/secondary/CacheFSAdapter.py +39 -0
  66. naas_abi_core/services/object_storage/ObjectStorageFactory.py +57 -0
  67. naas_abi_core/services/object_storage/ObjectStoragePort.py +47 -0
  68. naas_abi_core/services/object_storage/ObjectStorageService.py +41 -0
  69. naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterFS.py +52 -0
  70. naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterNaas.py +131 -0
  71. naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterS3.py +171 -0
  72. naas_abi_core/services/ontology/OntologyPorts.py +36 -0
  73. naas_abi_core/services/ontology/OntologyService.py +17 -0
  74. naas_abi_core/services/ontology/adaptors/secondary/OntologyService_SecondaryAdaptor_NERPort.py +37 -0
  75. naas_abi_core/services/secret/Secret.py +138 -0
  76. naas_abi_core/services/secret/SecretPorts.py +40 -0
  77. naas_abi_core/services/secret/Secret_test.py +65 -0
  78. naas_abi_core/services/secret/adaptors/secondary/Base64Secret.py +57 -0
  79. naas_abi_core/services/secret/adaptors/secondary/Base64Secret_test.py +39 -0
  80. naas_abi_core/services/secret/adaptors/secondary/NaasSecret.py +81 -0
  81. naas_abi_core/services/secret/adaptors/secondary/NaasSecret_test.py +25 -0
  82. naas_abi_core/services/secret/adaptors/secondary/dotenv_secret_secondaryadaptor.py +26 -0
  83. naas_abi_core/services/triple_store/TripleStoreFactory.py +116 -0
  84. naas_abi_core/services/triple_store/TripleStorePorts.py +223 -0
  85. naas_abi_core/services/triple_store/TripleStoreService.py +419 -0
  86. naas_abi_core/services/triple_store/adaptors/secondary/AWSNeptune.py +1284 -0
  87. naas_abi_core/services/triple_store/adaptors/secondary/AWSNeptune_test.py +284 -0
  88. naas_abi_core/services/triple_store/adaptors/secondary/Oxigraph.py +597 -0
  89. naas_abi_core/services/triple_store/adaptors/secondary/Oxigraph_test.py +1474 -0
  90. naas_abi_core/services/triple_store/adaptors/secondary/TripleStoreService__SecondaryAdaptor__Filesystem.py +223 -0
  91. naas_abi_core/services/triple_store/adaptors/secondary/TripleStoreService__SecondaryAdaptor__ObjectStorage.py +234 -0
  92. naas_abi_core/services/triple_store/adaptors/secondary/base/TripleStoreService__SecondaryAdaptor__FileBase.py +18 -0
  93. naas_abi_core/services/vector_store/IVectorStorePort.py +101 -0
  94. naas_abi_core/services/vector_store/IVectorStorePort_test.py +189 -0
  95. naas_abi_core/services/vector_store/VectorStoreFactory.py +47 -0
  96. naas_abi_core/services/vector_store/VectorStoreService.py +171 -0
  97. naas_abi_core/services/vector_store/VectorStoreService_test.py +185 -0
  98. naas_abi_core/services/vector_store/__init__.py +13 -0
  99. naas_abi_core/services/vector_store/adapters/QdrantAdapter.py +251 -0
  100. naas_abi_core/services/vector_store/adapters/QdrantAdapter_test.py +57 -0
  101. naas_abi_core/utils/Expose.py +53 -0
  102. naas_abi_core/utils/Graph.py +182 -0
  103. naas_abi_core/utils/JSON.py +49 -0
  104. naas_abi_core/utils/LazyLoader.py +44 -0
  105. naas_abi_core/utils/Logger.py +12 -0
  106. naas_abi_core/utils/OntologyReasoner.py +141 -0
  107. naas_abi_core/utils/OntologyYaml.disabled.py +679 -0
  108. naas_abi_core/utils/SPARQL.py +256 -0
  109. naas_abi_core/utils/Storage.py +33 -0
  110. naas_abi_core/utils/StorageUtils.py +398 -0
  111. naas_abi_core/utils/String.py +52 -0
  112. naas_abi_core/utils/Workers.py +114 -0
  113. naas_abi_core/utils/__init__.py +0 -0
  114. naas_abi_core/utils/onto2py/README.md +0 -0
  115. naas_abi_core/utils/onto2py/__init__.py +10 -0
  116. naas_abi_core/utils/onto2py/__main__.py +29 -0
  117. naas_abi_core/utils/onto2py/onto2py.py +611 -0
  118. naas_abi_core/utils/onto2py/tests/ttl2py_test.py +271 -0
  119. naas_abi_core/workflow/__init__.py +5 -0
  120. naas_abi_core/workflow/workflow.py +48 -0
  121. naas_abi_core-1.0.0.dist-info/METADATA +75 -0
  122. naas_abi_core-1.0.0.dist-info/RECORD +124 -0
  123. naas_abi_core-1.0.0.dist-info/WHEEL +4 -0
  124. naas_abi_core-1.0.0.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,271 @@
1
+ from io import StringIO
2
+
3
+ import pytest
4
+ import requests
5
+ from naas_abi_core.utils.onto2py.onto2py import onto2py
6
+ from pydantic import ValidationError
7
+
8
+
9
+ def ttl_to_module(ttl_file, module_name):
10
+ # Generate Python code from TTL
11
+ python_code = onto2py(ttl_file)
12
+
13
+ with open(module_name + ".py", "w") as f:
14
+ f.write(python_code)
15
+
16
+ import importlib.util
17
+
18
+ spec = importlib.util.spec_from_file_location(module_name, module_name + ".py")
19
+ module = importlib.util.module_from_spec(spec)
20
+ spec.loader.exec_module(module)
21
+
22
+ return module
23
+
24
+
25
+ def test_cco_to_py():
26
+ """Test conversion of CCO ontology to Python classes"""
27
+ response = requests.get(
28
+ "https://raw.githubusercontent.com/CommonCoreOntology/CommonCoreOntologies/refs/heads/develop/src/cco-merged/CommonCoreOntologiesMerged.ttl"
29
+ )
30
+
31
+ assert response.status_code == 200, f"Failed to fetch TTL file: {response.text}"
32
+
33
+ ttl_file = StringIO(response.text)
34
+ module = ttl_to_module(ttl_file, "cco_merged")
35
+
36
+ e = module.Ont00000671()
37
+ assert e.rdf().serialize(format="turtle") == e.rdf().serialize(format="turtle")
38
+
39
+
40
+ def test_bfo_to_py():
41
+ """Test conversion of BFO core ontology to Python classes"""
42
+ response = requests.get(
43
+ "https://raw.githubusercontent.com/BFO-ontology/BFO-2020/refs/heads/master/src/owl/bfo-core.ttl"
44
+ )
45
+
46
+ assert response.status_code == 200, f"Failed to fetch TTL file: {response.text}"
47
+
48
+ ttl_file = StringIO(response.text)
49
+
50
+ # Generate Python code from TTL
51
+ python_code = onto2py(ttl_file)
52
+
53
+ with open("bfo-core.py", "w") as f:
54
+ f.write(python_code)
55
+
56
+ import importlib.util
57
+
58
+ spec = importlib.util.spec_from_file_location("bfo_core", "bfo-core.py")
59
+ module = importlib.util.module_from_spec(spec)
60
+ spec.loader.exec_module(module)
61
+
62
+ # Verify we got some generated code
63
+ assert python_code, "No Python code was generated"
64
+ assert "class" in python_code, "No classes found in generated code"
65
+ assert "BaseModel" in python_code, "Pydantic BaseModel missing"
66
+
67
+ print("Generated Python code:")
68
+ print("=" * 50)
69
+ print(python_code)
70
+ print("=" * 50)
71
+
72
+ module.BFO_0000001()
73
+
74
+
75
+ def test_simple_ttl():
76
+ """Test with a simple TTL example"""
77
+ simple_ttl = """@prefix ex: <http://example.org/> .
78
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
79
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
80
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
81
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
82
+
83
+ # Define classes
84
+ ex:Person rdf:type owl:Class ;
85
+ rdfs:label "Person" ;
86
+ rdfs:comment "A human being" .
87
+
88
+ ex:Organization rdf:type owl:Class ;
89
+ rdfs:label "Organization" ;
90
+ rdfs:comment "A group or institution" .
91
+
92
+ # Define properties
93
+ ex:hasName rdf:type owl:DatatypeProperty ;
94
+ rdfs:domain ex:Person ;
95
+ rdfs:range xsd:string ;
96
+ rdfs:label "has name" .
97
+
98
+ ex:hasAge rdf:type owl:DatatypeProperty ;
99
+ rdfs:domain ex:Person ;
100
+ rdfs:range xsd:integer ;
101
+ rdfs:label "has age" .
102
+
103
+ ex:worksFor rdf:type owl:ObjectProperty ;
104
+ rdfs:domain ex:Person ;
105
+ rdfs:range ex:Organization ;
106
+ rdfs:label "works for" .
107
+ """
108
+
109
+ ttl_file = StringIO(simple_ttl)
110
+ python_code = onto2py(ttl_file)
111
+
112
+ print("Generated Python code from simple TTL:")
113
+ print("=" * 50)
114
+ print(python_code)
115
+ print("=" * 50)
116
+
117
+ # Verify expected content
118
+ assert "class Person(RDFEntity):" in python_code
119
+ assert "class Organization(RDFEntity):" in python_code
120
+ assert "hasName: Optional[str] = Field(default=None)" in python_code
121
+ assert "hasAge: Optional[int] = Field(default=None)" in python_code
122
+ assert "worksFor: Optional[Organization] = Field(default=None)" in python_code
123
+
124
+
125
+ def test_shacl_ttl():
126
+ """Test with a TTL example using SHACL constraints"""
127
+ shacl_ttl = """@prefix ex: <http://example.org/> .
128
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
129
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
130
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
131
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
132
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
133
+
134
+ # Define classes
135
+ ex:Person rdf:type owl:Class ;
136
+ rdfs:label "Person" ;
137
+ rdfs:comment "A human being" .
138
+
139
+ ex:Pet rdf:type owl:Class ;
140
+ rdfs:label "Pet" ;
141
+ rdfs:comment "A domesticated animal kept for companionship" .
142
+
143
+ ex:PetOwner rdf:type owl:Class ;
144
+ rdfs:subClassOf ex:Person ;
145
+ rdfs:label "Pet Owner" ;
146
+ rdfs:comment "A person who owns a pet" .
147
+
148
+ # Define data properties
149
+ ex:hasName rdf:type owl:DatatypeProperty ;
150
+ rdfs:domain ex:Person ;
151
+ rdfs:range xsd:string ;
152
+ rdfs:label "has name" .
153
+
154
+ ex:hasAge rdf:type owl:DatatypeProperty ;
155
+ rdfs:domain ex:Person ;
156
+ rdfs:range xsd:integer ;
157
+ rdfs:label "has age" .
158
+
159
+ ex:petName rdf:type owl:DatatypeProperty ;
160
+ rdfs:domain ex:Pet ;
161
+ rdfs:range xsd:string ;
162
+ rdfs:label "pet name" .
163
+
164
+ # Define object properties
165
+ ex:hasPet rdf:type owl:ObjectProperty ;
166
+ rdfs:domain ex:PetOwner ;
167
+ rdfs:range ex:Pet ;
168
+ rdfs:label "has pet" .
169
+
170
+ # SHACL constraints
171
+ ex:PersonShape rdf:type sh:NodeShape ;
172
+ sh:targetClass ex:Person ;
173
+ sh:property [
174
+ sh:path ex:hasName ;
175
+ sh:minCount 1 ;
176
+ sh:maxCount 1 ;
177
+ sh:datatype xsd:string
178
+ ] ;
179
+ sh:property [
180
+ sh:path ex:hasAge ;
181
+ sh:minCount 1 ;
182
+ sh:maxCount 1 ;
183
+ sh:datatype xsd:integer ;
184
+ sh:minInclusive 0 ;
185
+ sh:maxInclusive 150
186
+ ] .
187
+
188
+ ex:PetShape rdf:type sh:NodeShape ;
189
+ sh:targetClass ex:Pet ;
190
+ sh:property [
191
+ sh:path ex:petName ;
192
+ sh:minCount 1 ;
193
+ sh:maxCount 1 ;
194
+ sh:datatype xsd:string
195
+ ] .
196
+
197
+ ex:PetOwnerShape rdf:type sh:NodeShape ;
198
+ sh:targetClass ex:PetOwner ;
199
+ sh:property [
200
+ sh:path ex:hasPet ;
201
+ sh:minCount 1 ;
202
+ sh:class ex:Pet
203
+ ] .
204
+ """
205
+
206
+ ttl_file = StringIO(shacl_ttl)
207
+ python_code = onto2py(ttl_file)
208
+
209
+ print("Generated Python code from SHACL TTL:")
210
+ print("=" * 50)
211
+ print(python_code)
212
+ print("=" * 50)
213
+
214
+ # Verify expected content
215
+ assert "class Person(RDFEntity):" in python_code
216
+ assert "class Pet(RDFEntity):" in python_code
217
+ assert "class PetOwner(Person, RDFEntity):" in python_code
218
+ assert "hasName: str = Field(...)" in python_code # Required property
219
+ assert "hasAge: int = Field(...)" in python_code # Required property
220
+ assert "petName: str = Field(...)" in python_code # Required property for Pet
221
+ assert "hasPet: Pet = Field(...)" in python_code # Required property for PetOwner
222
+
223
+ import os
224
+ import tempfile
225
+
226
+ temp_dir = tempfile.mkdtemp()
227
+ temp_file = os.path.join(temp_dir, "shacl_ttl.py")
228
+
229
+ with open(temp_file, "w") as f:
230
+ f.write(python_code)
231
+
232
+ with open("shacl_ttl.py", "w") as f:
233
+ f.write(python_code)
234
+
235
+ # Load the generated code
236
+ import importlib.util
237
+
238
+ spec = importlib.util.spec_from_file_location("shacl_ttl", temp_file)
239
+ module = importlib.util.module_from_spec(spec)
240
+ spec.loader.exec_module(module)
241
+
242
+ # assert module.Person.hasName is not None, module.Person
243
+ # assert module.Person.hasAge is not None, module.Person
244
+ # assert module.Pet.petName is not None, module.Pet
245
+ # assert module.PetOwner.hasPet is not None, module.PetOwner
246
+
247
+ person = module.Person(hasName="John Doe", hasAge=30)
248
+ print(person)
249
+ assert person.hasName == "John Doe"
250
+ assert person.hasAge == 30
251
+
252
+ pet = module.Pet(petName="Fluffy")
253
+ print(pet)
254
+ assert pet.petName == "Fluffy"
255
+
256
+ pet_owner = module.PetOwner(hasPet=pet, hasName="John Doe", hasAge=30)
257
+ print(pet_owner)
258
+ assert pet_owner.hasPet == pet
259
+
260
+ g = pet_owner.rdf()
261
+ for s, p, o in g:
262
+ print(s, p, o)
263
+ print(g.serialize(format="turtle"))
264
+ # Should have 6 triples: 2 type declarations + 4 property assertions
265
+ # PetOwner: type, hasName, hasAge, hasPet
266
+ # Pet: type, petName
267
+ assert len(list(g)) == 6, list(g)
268
+
269
+ # Assert this is raising a validation error
270
+ with pytest.raises(ValidationError):
271
+ module.PetOwner(hasName="John Doe", hasAge=30)
@@ -0,0 +1,5 @@
1
+ from naas_abi_core.workflow.workflow import Workflow as Workflow
2
+ from naas_abi_core.workflow.workflow import (
3
+ WorkflowConfiguration as WorkflowConfiguration,
4
+ )
5
+ from naas_abi_core.workflow.workflow import WorkflowParameters as WorkflowParameters
@@ -0,0 +1,48 @@
1
+ from dataclasses import dataclass
2
+ from typing import Generic, TypeVar
3
+
4
+ from pydantic import BaseModel
5
+
6
+ from naas_abi_core.utils.Expose import Expose
7
+
8
+
9
+ @dataclass
10
+ class WorkflowConfiguration:
11
+ pass
12
+
13
+
14
+ class WorkflowParameters(BaseModel):
15
+ pass
16
+
17
+
18
+ P = TypeVar("P", bound=WorkflowParameters)
19
+
20
+
21
+ class Workflow(Expose, Generic[P]):
22
+ """A workflow represents a sequence of operations that can be exposed in multiple ways.
23
+
24
+ Workflows encapsulate business logic that can be:
25
+ - Scheduled as background jobs
26
+ - Exposed as tools for AI agents
27
+ - Served via API endpoints
28
+ - Run directly as Python code
29
+
30
+ The workflow pattern provides a consistent way to package functionality
31
+ that needs to be accessible through multiple interfaces.
32
+
33
+ Attributes:
34
+ __configuration (WorkflowConfiguration): Configuration parameters for the workflow
35
+
36
+ Example:
37
+ >>> config = MyWorkflowConfig(param1="value1")
38
+ >>> workflow = MyWorkflow(config)
39
+ >>> result = workflow.run()
40
+ """
41
+
42
+ __configuration: WorkflowConfiguration
43
+
44
+ def __init__(self, configuration: WorkflowConfiguration):
45
+ self.__configuration = configuration
46
+
47
+ def run(self, parameters: P):
48
+ pass
@@ -0,0 +1,75 @@
1
+ Metadata-Version: 2.4
2
+ Name: naas-abi-core
3
+ Version: 1.0.0
4
+ Summary: Abi framework allowing you to build your AI system.
5
+ Author-email: Maxime Jublou <maxime@naas.ai>, Florent Ravenel <florent@naas.ai>, Jeremy Ravenel <jeremy@naas.ai>
6
+ Requires-Python: <4,>=3.10
7
+ Requires-Dist: boto3<2,>=1.38.19
8
+ Requires-Dist: click<8.2,>=8.1.1
9
+ Requires-Dist: dotenv>=0.9.9
10
+ Requires-Dist: langchain-openai<0.4,>=0.3.3
11
+ Requires-Dist: langgraph-checkpoint-postgres>=2.0.21
12
+ Requires-Dist: langgraph>=0.6.6
13
+ Requires-Dist: loguru<0.8,>=0.7.2
14
+ Requires-Dist: pip>=25.1.1
15
+ Requires-Dist: psycopg[binary,pool]>=3.0.0
16
+ Requires-Dist: pydantic>=2.11.5
17
+ Requires-Dist: pydash>=8.0.5
18
+ Requires-Dist: qdrant-client>=1.14.3
19
+ Requires-Dist: rdflib<8,>=7.1.1
20
+ Requires-Dist: rich<14,>=13.9.4
21
+ Requires-Dist: spacy>=3.8.7
22
+ Requires-Dist: sparqlwrapper>=2.0.0
23
+ Requires-Dist: sse-starlette<3,>=2.1.3
24
+ Requires-Dist: starlette>=0.46.2
25
+ Requires-Dist: types-tqdm>=4.67.0.20250809
26
+ Provides-Extra: ssh
27
+ Requires-Dist: paramiko<4.0.0,>=3.5.1; extra == 'ssh'
28
+ Requires-Dist: sshtunnel>=0.4.0; extra == 'ssh'
29
+ Description-Content-Type: text/markdown
30
+
31
+ # ABI Library
32
+
33
+ The ABI Library is the core implementation of ABI's concepts, designed to build a unified AI system. This library provides the fundamental building blocks for connecting, processing, and utilizing data across different AI components.
34
+
35
+ ## Core Concepts
36
+
37
+ ### Integration
38
+ Integrations provide standardized connections to third-party services and data sources. They handle:
39
+ - Authentication and authorization
40
+ - API communication
41
+ - Data format standardization
42
+ - Error handling and retries
43
+
44
+ ### Pipeline
45
+ Pipelines are responsible for data ingestion and transformation into the ontological layer. They:
46
+ - Utilize integrations to fetch data
47
+ - Transform raw data into semantic representations
48
+ - Maintain data consistency and quality
49
+ - Map external data models to ABI's ontology
50
+
51
+ ### Workflow
52
+ Workflows leverage the ontological layer to implement business logic and provide data to consumers. They can be used by:
53
+ - Large Language Models (LLMs)
54
+ - Remote APIs and services
55
+ - Other automated processes
56
+
57
+ ### Services
58
+ Services form the foundational layer of ABI, implementing the Hexagonal Architecture (Ports & Adapters) pattern to provide flexible and system-agnostic interfaces. This architectural approach allows ABI to seamlessly integrate with existing systems while maintaining clean separation of concerns.
59
+
60
+ Each service defines a primary port (interface) that specifies its capabilities, while multiple secondary adapters can implement this interface for different backend systems. This means you can:
61
+
62
+ - Easily swap implementations without changing business logic
63
+ - Add new integrations by implementing new adapters
64
+ - Test components in isolation using mock adapters
65
+
66
+ For example, the Secret Service could connect to various backend systems through different adapters:
67
+ - Hashicorp Vault
68
+ - AWS Secrets Manager
69
+ - Azure Key Vault
70
+ - Environment Variables
71
+ - Local File System
72
+ - Google Cloud Secret Manager
73
+ - Kubernetes Secrets
74
+
75
+ This modular approach ensures that ABI can be deployed in any environment while maintaining consistent interfaces and behavior across different infrastructure choices.
@@ -0,0 +1,124 @@
1
+ naas_abi_core/__init__.py,sha256=kR93ywABUBo8-tAWCHMbRcCDCJZjqq4hWwxMk3Cr9fI,56
2
+ naas_abi_core/apps/api/api.py,sha256=2z495FbiwgIuPkrWgssAEYdN6AG2LcCYiLboy4oGI8U,6986
3
+ naas_abi_core/apps/api/api_test.py,sha256=7H_VgnbsGqu6oGY-apAHjJr_yjIcGHY0heaEThWBsUk,10537
4
+ naas_abi_core/apps/api/openapi_doc.py,sha256=JbwzcmSP-Yl1rbN0QvUwOSmOFf-yKXECZ-2ptI7fWoU,11834
5
+ naas_abi_core/apps/mcp/mcp_server.py,sha256=U-wDl8rswMk4nefGg2SUByw4x8CM10M59FfLHxIKC-o,8391
6
+ naas_abi_core/apps/mcp/mcp_server_test.py,sha256=8jixnDyERM_HjjDTRtPDQcJ_rzA0ESAn147sl2Gk8gw,5636
7
+ naas_abi_core/apps/terminal_agent/main.py,sha256=ucrNCGjjixyiO47Eily1yAmrwznS6KOcB1kk02yt_m8,19631
8
+ naas_abi_core/apps/terminal_agent/terminal_style.py,sha256=YOpfvBlKU52wNyGEKbZPiRQVKxug-hI92H8ScV5L8Ew,5254
9
+ naas_abi_core/cli/__init__.py,sha256=k5L0LznXVHyZxINdoqe0IOVz1IaSXsUB9ptIP1dEnns,1275
10
+ naas_abi_core/cli/agent.py,sha256=fMdbC7HsrOfZSf5zVRHWSmyrejI5mUdRlAT5v5YHXzk,658
11
+ naas_abi_core/cli/chat.py,sha256=3t_TJ7vqCNs0MIIXOtlSke3nzy4rMSEJtB3P6pKItMo,856
12
+ naas_abi_core/cli/config.py,sha256=CcdDX6HKCP32NjRhbVsCOwLUC9LmaqTm2sv8W5rOt00,1484
13
+ naas_abi_core/cli/init.py,sha256=Pcy2-hy-FvpXf3UOKMP6agWyFrCl9z-KP5ktEWltPy0,220
14
+ naas_abi_core/cli/module.py,sha256=TBl-SpeGUcy1Rrp40Irbt34yQS00xJcNje-OijNE4Hk,717
15
+ naas_abi_core/cli/new.py,sha256=aFhKbTHwqYkPdzrd7r8i_h9dfzXNjI03t8qVeqME8w8,262
16
+ naas_abi_core/cli/secret.py,sha256=u_yUZgVEcns-CM-qsIIZUHX8j8T6aioJYluqSQhnXFE,2491
17
+ naas_abi_core/engine/Engine.py,sha256=jGsGleO9PeFb7D9LlyO6gH1FFCh7Vj8wC7s0N0cuyxU,3257
18
+ naas_abi_core/engine/EngineProxy.py,sha256=o-D8LlP-PjQ_Yct4JWrDZw7mA7yporxb2XrJFowLYrY,3379
19
+ naas_abi_core/engine/Engine_test.py,sha256=8eLZEnkL0IR4VAr6LF8fJ_fxZzi9s1mXCLgTVOIsR3E,161
20
+ naas_abi_core/engine/IEngine.py,sha256=u-m-Qrvt3SP3gYKWPFPVjV8rs05D6NGnzO3XA0FInnw,2865
21
+ naas_abi_core/engine/conftest.py,sha256=Al-SRVLrEdbTrX8sxQ3bBK4w1bbzE4GoBkzoBK-aXlg,932
22
+ naas_abi_core/engine/engine_configuration/EngineConfiguration.py,sha256=XA8BDyuYWvjwREGHDBB1iGFe5neJKFKsaHFRnPPKJXI,5378
23
+ naas_abi_core/engine/engine_configuration/EngineConfiguration_GenericLoader.py,sha256=KK2TQx6cNmoqFcwr9En00NKrX4ckkZl4ecv9QCUwPyc,1995
24
+ naas_abi_core/engine/engine_configuration/EngineConfiguration_ObjectStorageService.py,sha256=cPZBs5-2dqX-piIZ7KTqiOce6O6GbnDDwjPGcfDN_U4,4736
25
+ naas_abi_core/engine/engine_configuration/EngineConfiguration_ObjectStorageService_test.py,sha256=h1PdIbMTJWi_lG83YgpI6zg8gRo0WEWvGSE6R4uKQp4,1063
26
+ naas_abi_core/engine/engine_configuration/EngineConfiguration_SecretService.py,sha256=nqQ7XmfZZIx4kUvSO_FkBsSf9mcrRdwpsF_vkEdKqgU,4064
27
+ naas_abi_core/engine/engine_configuration/EngineConfiguration_TripleStoreService.py,sha256=XCyn1DO3oW7xPlrfmD1lo3GPymDCVDPI-QXw-lbzzIQ,6278
28
+ naas_abi_core/engine/engine_configuration/EngineConfiguration_VectorStoreService.py,sha256=aoO-cmC1dfaXT4gqFivrO1ntB0xK8rjFoWmruf-I67U,2210
29
+ naas_abi_core/engine/engine_configuration/EngineConfiguration_test.py,sha256=PL4A4Dawq6tfyHsiIkqbHhovc7wkIHcVZra6llRI-CY,286
30
+ naas_abi_core/engine/engine_configuration/utils/PydanticModelValidator.py,sha256=jZzLqLvR8HawpyGYiUJEng3NlebLHiN3mVFOzNDSWs8,504
31
+ naas_abi_core/engine/engine_loaders/EngineModuleLoader.py,sha256=4VsGtPsaeslej2JuyksHUbHJEY6J096cnr3iuTrhnpY,12043
32
+ naas_abi_core/engine/engine_loaders/EngineOntologyLoader.py,sha256=dKVnzBRCFQDjHDdkG5wtBlXP3TDf6JY1mwGfKjVqhqs,527
33
+ naas_abi_core/engine/engine_loaders/EngineServiceLoader.py,sha256=OPBTFG1c-QAFulXqNMwEh58IZ0ynClP5fFHdW3pS9PU,1772
34
+ naas_abi_core/integration/__init__.py,sha256=bB7l26o_ksuEo8O5dggIaZcolJbveJxGZe0-J_UzL3Y,305
35
+ naas_abi_core/integration/integration.py,sha256=tbdAV63Uisml9G8diZl20_JDlgJVFuLQpK_7VE4qgSw,811
36
+ naas_abi_core/models/Model.py,sha256=s1Aj8Mcy113uhgYR4-lSfoyLnucOzOlnxKu6QKSwfeY,8223
37
+ naas_abi_core/models/OpenRouter.py,sha256=6bvn_Dl4mQB1J-XTMoF1rD8F4FNszLAA0358fzJDBxs,485
38
+ naas_abi_core/models/OpenRouter_test.py,sha256=nLlVdBaBan0mkdbnF3vrWGJYr8zQAC7Fl3wLUc37Mvw,1168
39
+ naas_abi_core/module/Module.py,sha256=C5AlEmofh9bYUIMd817ODZExC4m6nvs6Rm6sRtNPN5E,8904
40
+ naas_abi_core/module/ModuleAgentLoader.py,sha256=Tc2KYODt8cGeK__QLk7h0J5QZ0EM-ZsQZTDeCJ4ip38,1965
41
+ naas_abi_core/module/ModuleUtils.py,sha256=6wUHpbdl0y_16xvz7W-NSOaRyLW9N9zx2Lg_Jkg0eMM,707
42
+ naas_abi_core/modules/templatablesparqlquery/README.md,sha256=Cpz3FPMc1q-P5HmQ7848er5_MRTHLDLqYqq0nFrs7Dw,6991
43
+ naas_abi_core/modules/templatablesparqlquery/__init__.py,sha256=Y2tAF9omNqYhJGYbt4MA28q7bnTX3wy3ATvJQwEwAmU,1225
44
+ naas_abi_core/modules/templatablesparqlquery/ontologies/TemplatableSparqlQueryOntology.ttl,sha256=P8c4ZlWV6nzXZ7DiOlY1aDE39cKh0rlmjKp03Wc7U-8,4933
45
+ naas_abi_core/modules/templatablesparqlquery/workflows/GenericWorkflow.py,sha256=1wo9KAlNkSGXfZtQVJTi4XvDNTEMiyB9OCthkTMjeZY,1617
46
+ naas_abi_core/modules/templatablesparqlquery/workflows/TemplatableSparqlQueryLoader.py,sha256=_NU6RN1VZnv5N5GAYCsYCqRv07IgxemwZPd0fCxkGFI,7351
47
+ naas_abi_core/pipeline/__init__.py,sha256=4de6BzXJI6nTSI7baeqe4IoN-Q95idsADchU6Eiv55Q,309
48
+ naas_abi_core/pipeline/pipeline.py,sha256=m1QWXwdy_0yr8hxILNwoPSK2-vIz4P9WeZ6pDm9gJSg,2186
49
+ naas_abi_core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ naas_abi_core/services/agent/Agent.py,sha256=SOoo1J50qMJwfgart2zUC98oa6C43L_FN5UJl90182k,63648
51
+ naas_abi_core/services/agent/AgentMemory_test.py,sha256=sSqDkr0o0MgeHudsX5s3u2oFLaAX7GVgyQPwdsD76Cs,650
52
+ naas_abi_core/services/agent/Agent_test.py,sha256=VITdYn0fSK-7dq67qVQbirkwZBIRBwtRqdaWy9E87VY,6343
53
+ naas_abi_core/services/agent/IntentAgent.py,sha256=gGAeLGLuJUNAi8cxsKRoazaoI6_75rX5sgV7qHY4R6w,45100
54
+ naas_abi_core/services/agent/IntentAgent_test.py,sha256=g5mI1EjLGsJm2rssxp3lsdP-WJbp6uuWePWGGazkgm8,4453
55
+ naas_abi_core/services/agent/test_agent_memory.py,sha256=X1ZgEEDq10PYisnouBodThDT-JIgG_UHVmYp4xkBhOs,11079
56
+ naas_abi_core/services/agent/test_postgres_integration.py,sha256=tzVJjBAqcHomUVuTQ5-kom3POOgbYjilw5Vzfr9Q6go,4458
57
+ naas_abi_core/services/agent/beta/Embeddings.py,sha256=qC0DXWGhns_c04DeRzzbHFcgwY5cvcxuxWeL65O0su4,5109
58
+ naas_abi_core/services/agent/beta/IntentMapper.py,sha256=NgZLybuj2Rp-jZmVRiMbtFESwOFldwCOXISkogOEYMc,3834
59
+ naas_abi_core/services/agent/beta/LocalModel.py,sha256=QCOyEngihK8oh1CvFmiGUPUdvUAb2_tEwPPri45xoz0,3935
60
+ naas_abi_core/services/agent/beta/VectorStore.py,sha256=ps6FvJz6Y-pb2WpcSDH1zm6is44tWJhSw0F2kziVxDI,2980
61
+ naas_abi_core/services/cache/CacheFactory.py,sha256=i3kNZ3OjFGq4myxo1GvYyhp7DTSVoepQsXC3n9iIgzI,1054
62
+ naas_abi_core/services/cache/CachePort.py,sha256=bYmTqnOrCVpSB_d5Dq_oq3sWtt7GtzsTUO8pEQT-Jlg,1736
63
+ naas_abi_core/services/cache/CacheService.py,sha256=e2iQN4ch5TMno-dHDe0gkfiELjijIS2OF5u54IKcqHE,10356
64
+ naas_abi_core/services/cache/CacheService_test.py,sha256=Wigncmy4tsCp3EDSidmXAvl7G8dYlCV87YkZjN5wBGU,2429
65
+ naas_abi_core/services/cache/adapters/secondary/CacheFSAdapter.py,sha256=mMmo-KNdSATwjlOdqhoJj42pQvKXo2Q-SzQ_PXhOyho,1392
66
+ naas_abi_core/services/object_storage/ObjectStorageFactory.py,sha256=cKbmlfO4OyLGDCSwBzEER5FAS_UrdfxsE6fm3P7Map4,1910
67
+ naas_abi_core/services/object_storage/ObjectStoragePort.py,sha256=JIx0DCwgI4ZCs2AateQ6iPQoCPepjfTChXHSUY28alU,1107
68
+ naas_abi_core/services/object_storage/ObjectStorageService.py,sha256=GGBuqOxZD0xSCkLrFJRcg8zJHrusXEtocPS15-b0d1Q,1382
69
+ naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterFS.py,sha256=njVHg9reyUAhUfHqqPpIVB36ZIxLO1Dpa3Ife__3VUI,1702
70
+ naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterNaas.py,sha256=qtiW3-1gdw5UxUcV4w5gbg8KQkcw_NnqLSL6x_P2owU,4275
71
+ naas_abi_core/services/object_storage/adapters/secondary/ObjectStorageSecondaryAdapterS3.py,sha256=j-uM0Akuh1ytHm5uiz89ipaPO8dNjNpi4frcethzPek,5995
72
+ naas_abi_core/services/ontology/OntologyPorts.py,sha256=CANMwmXps5k2IB1pq1I5723HnR97nDgysh8OZZ7fwrE,1160
73
+ naas_abi_core/services/ontology/OntologyService.py,sha256=-shSDmL5zvEvNjTbDQ1pq2ziwnJvfR-ka6XJh1AcDuA,542
74
+ naas_abi_core/services/ontology/adaptors/secondary/OntologyService_SecondaryAdaptor_NERPort.py,sha256=CNGnlvtoADUki8fEWnanD4Xe7_osQrpWDusZOLu1mgo,1303
75
+ naas_abi_core/services/secret/Secret.py,sha256=7odnAtpkC12laA8CFzE_W2NOFpDyaW2TmoebUCFMSQE,5159
76
+ naas_abi_core/services/secret/SecretPorts.py,sha256=E-oBxE49OZmVYbKTwbtsuxjaU58tVXFBMbblmVVbd7k,996
77
+ naas_abi_core/services/secret/Secret_test.py,sha256=rRLAsBCNDMduUwCeCSdlWtIFwguqFeVdRp-3lF6R9mc,1581
78
+ naas_abi_core/services/secret/adaptors/secondary/Base64Secret.py,sha256=Py7bBEBnkaBnuD9wtXO_tMI5HiM7olspOvfBRRq57Tw,1967
79
+ naas_abi_core/services/secret/adaptors/secondary/Base64Secret_test.py,sha256=wwdfMJrkh6vFZabZie9xyQHYlTjPAfouV-sPI4pk8MM,1287
80
+ naas_abi_core/services/secret/adaptors/secondary/NaasSecret.py,sha256=b31HLYCN3JzYwlWwsiTlQ3FM7t9sLFz7dF3eMmFnA6c,2755
81
+ naas_abi_core/services/secret/adaptors/secondary/NaasSecret_test.py,sha256=gR2hjU8e3hbkWn_suhwj4kfWLjTZjZavj-5R-z93zjU,625
82
+ naas_abi_core/services/secret/adaptors/secondary/dotenv_secret_secondaryadaptor.py,sha256=gVNPGhtwfu_j_73PpWQtHC1gx8yR0qDqgjn4m1yppXs,782
83
+ naas_abi_core/services/triple_store/TripleStoreFactory.py,sha256=4cCWJUhmXo5-yB61fyDwc-pigIYZo_PzmPW_5pY5I-E,4560
84
+ naas_abi_core/services/triple_store/TripleStorePorts.py,sha256=dRhDc5-uiXDZQWzscqUd972EPi_pafPLkj4sXwxF8Xs,6681
85
+ naas_abi_core/services/triple_store/TripleStoreService.py,sha256=X1ty-fH0A1XyLhZpU6oc3h-BgOoarAHSMPzITBBVhlY,16274
86
+ naas_abi_core/services/triple_store/adaptors/secondary/AWSNeptune.py,sha256=fJlkf1QIOj4FCBCSotCfmlv15QtbKDFONcGVtu_W5v8,49390
87
+ naas_abi_core/services/triple_store/adaptors/secondary/AWSNeptune_test.py,sha256=b9LiXwQ3EWem5T_OplJWgXQ-cPwkrfomKO5MQx6zwF4,7662
88
+ naas_abi_core/services/triple_store/adaptors/secondary/Oxigraph.py,sha256=1VXtc-Ew7unmqULTA95nN8gnaYWP0Leb3rKbuWe1vRo,20729
89
+ naas_abi_core/services/triple_store/adaptors/secondary/Oxigraph_test.py,sha256=oVyBHGYsrZn9HpzC4aRBi3w515yU0vXG8Yo1mIZN1hk,57224
90
+ naas_abi_core/services/triple_store/adaptors/secondary/TripleStoreService__SecondaryAdaptor__Filesystem.py,sha256=y0SC9qZnpG6Z7mXRSQ_glMPzEqimmgK1Tj2G65I73UQ,7494
91
+ naas_abi_core/services/triple_store/adaptors/secondary/TripleStoreService__SecondaryAdaptor__ObjectStorage.py,sha256=Y6LQDp-S6fi-Uf-f1hKr4lSFmiOE86XRDmUqryRZNvk,7935
92
+ naas_abi_core/services/triple_store/adaptors/secondary/base/TripleStoreService__SecondaryAdaptor__FileBase.py,sha256=pdioenLk37t3ZCXC4wm8cvKlWPtAUkbs2lEzYpfZt1Q,645
93
+ naas_abi_core/services/vector_store/IVectorStorePort.py,sha256=0YTKO3BZPPmbVFFEo2e5f-dZDNxOTqD9S05dFlNdHY8,2186
94
+ naas_abi_core/services/vector_store/IVectorStorePort_test.py,sha256=vyCRZTV41wP7mu_MVhPjmhyRLLCJ1_hFXmhvoe31D_Q,6267
95
+ naas_abi_core/services/vector_store/VectorStoreFactory.py,sha256=brCFjz_mDe2Oonfwb0hAMx8LH-8aHNEbMu2x1G9XhrQ,1652
96
+ naas_abi_core/services/vector_store/VectorStoreService.py,sha256=Zy3mlAZ2afXGwV2L5eoDdqKn4sTgMoxZNRkQrHsrlog,5821
97
+ naas_abi_core/services/vector_store/VectorStoreService_test.py,sha256=LKGdUJoayVM5mFlRPdv7DaXs6i5DhCdmjG-ntvRTDwM,6890
98
+ naas_abi_core/services/vector_store/__init__.py,sha256=tuRLebTOVhH5UF8JRke3rVTze1V3WK1DFT4k9ZYHqeA,407
99
+ naas_abi_core/services/vector_store/adapters/QdrantAdapter.py,sha256=rlgjwbPXxFU1sAiNX8_57ia-5svN3e5kAkE6p42kJRI,7981
100
+ naas_abi_core/services/vector_store/adapters/QdrantAdapter_test.py,sha256=JyKNfx-e4M7VybWViWrGWG8KiAnBa0oOwT-W_Yg23Uw,1891
101
+ naas_abi_core/utils/Expose.py,sha256=_01Qz5_-T8H75ssC0e-BIiPe8IxllHgrhynjmjX8m1o,1709
102
+ naas_abi_core/utils/Graph.py,sha256=FoBuiTrcLw4dzhROnd7JHp-LMxMuwJISFbtdrwpoM24,6288
103
+ naas_abi_core/utils/JSON.py,sha256=onIs-E3GWz4fvRuWBQpyb9qRNXCOJPf9x1yV1-jDlqU,1687
104
+ naas_abi_core/utils/LazyLoader.py,sha256=rWrnFVuKCK1WrtNgeiegT_i7AkxGy9qK2hfhsXV4dCY,1120
105
+ naas_abi_core/utils/Logger.py,sha256=imA6Z_zdzNeKN8Mjbwh0yZUQYYqpKh2IIZutt-Gxy7U,201
106
+ naas_abi_core/utils/OntologyReasoner.py,sha256=OgDgiymd7HuDI28XZfcS2-9QeR7_jY9o9LWBQu2AU7k,4591
107
+ naas_abi_core/utils/OntologyYaml.disabled.py,sha256=y5dYzD6w3yByQ4I-T6km6T2J0t-sTNy6iNm8ocpffyA,25246
108
+ naas_abi_core/utils/SPARQL.py,sha256=Yjk2INdNIUuv8P26-ToqNik5odyUroybzWvijMsfcns,9313
109
+ naas_abi_core/utils/Storage.py,sha256=XgB8KcYgnF8armlvxJrZbJPcsnPSb8ByNCnVchFMpo4,1205
110
+ naas_abi_core/utils/StorageUtils.py,sha256=WFGuUSe9u44BXLi5JqnVoHEGmWGpZTFUZv1empbe5dU,13654
111
+ naas_abi_core/utils/String.py,sha256=K7JcFYjoKH0OjziqMJuIougoNDlcTobcigXzwmvdv0c,1367
112
+ naas_abi_core/utils/Workers.py,sha256=dqrcEsoiA8EcSAX6Ko77-RO_Ko5Cqusv9yxoWALIIxY,3431
113
+ naas_abi_core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ naas_abi_core/utils/onto2py/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
+ naas_abi_core/utils/onto2py/__init__.py,sha256=mhTtX2gCv-IyWG71hiCYiOEbGOuDTssaOcqXxqySxn0,163
116
+ naas_abi_core/utils/onto2py/__main__.py,sha256=b-brUMSGdg972Cr06V6BVIdSMTw17--h7b9zE3UPZ4E,696
117
+ naas_abi_core/utils/onto2py/onto2py.py,sha256=_wn9qrrsWd8gO-BY4_jQJVfY87e9MJ2Er2Rf4FXcNls,24095
118
+ naas_abi_core/utils/onto2py/tests/ttl2py_test.py,sha256=5OZqSxPffjJYiX9T4rT1mV0PT1Qhf6goqEYT_mAPnaI,8055
119
+ naas_abi_core/workflow/__init__.py,sha256=hZD58mCB1PApxITqftP_xgjxL7NeLvOfI-rJENg1ENs,250
120
+ naas_abi_core/workflow/workflow.py,sha256=ZufSS073JztVl0OQRTqNyK7FepFvv7gXlc4j5FAEZCI,1216
121
+ naas_abi_core-1.0.0.dist-info/METADATA,sha256=dwnzb1TY2WJYuXod20dyR4r8VsMGDsYkz2RQdvTqqYo,3192
122
+ naas_abi_core-1.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
123
+ naas_abi_core-1.0.0.dist-info/entry_points.txt,sha256=R6N3E2Hh92nTrji34JIwBgc6c-wVpfBYBTwkU0xe64E,79
124
+ naas_abi_core-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ abi = abi.cli:main
3
+ onto2py = abi.utils.onto2py.__main__:main