sim-atlas 0.0.1__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 (49) hide show
  1. sim_atlas-0.0.1/.gitignore +338 -0
  2. sim_atlas-0.0.1/.gitlab-ci.yml +44 -0
  3. sim_atlas-0.0.1/AGENTS.md +114 -0
  4. sim_atlas-0.0.1/CLAUDE.md +1 -0
  5. sim_atlas-0.0.1/LICENSE +28 -0
  6. sim_atlas-0.0.1/PKG-INFO +32 -0
  7. sim_atlas-0.0.1/README.md +0 -0
  8. sim_atlas-0.0.1/pyproject.toml +101 -0
  9. sim_atlas-0.0.1/src/sim_atlas/__init__.py +0 -0
  10. sim_atlas-0.0.1/src/sim_atlas/agent/__init__.py +3 -0
  11. sim_atlas-0.0.1/src/sim_atlas/agent/_prompt.py +66 -0
  12. sim_atlas-0.0.1/src/sim_atlas/agent/_runner.py +213 -0
  13. sim_atlas-0.0.1/src/sim_atlas/agent/_sse.py +71 -0
  14. sim_atlas-0.0.1/src/sim_atlas/agent/tools/__init__.py +229 -0
  15. sim_atlas-0.0.1/src/sim_atlas/agent/tools/_errors.py +2 -0
  16. sim_atlas-0.0.1/src/sim_atlas/agent/tools/_graph.py +328 -0
  17. sim_atlas-0.0.1/src/sim_atlas/agent/tools/_search.py +255 -0
  18. sim_atlas-0.0.1/src/sim_atlas/ai.py +180 -0
  19. sim_atlas-0.0.1/src/sim_atlas/cli/__init__.py +4 -0
  20. sim_atlas-0.0.1/src/sim_atlas/cli/server.py +37 -0
  21. sim_atlas-0.0.1/src/sim_atlas/cli/token.py +38 -0
  22. sim_atlas-0.0.1/src/sim_atlas/exceptions.py +6 -0
  23. sim_atlas-0.0.1/src/sim_atlas/file_system_storage.py +480 -0
  24. sim_atlas-0.0.1/src/sim_atlas/main.py +329 -0
  25. sim_atlas-0.0.1/src/sim_atlas/models.py +348 -0
  26. sim_atlas-0.0.1/src/sim_atlas/security.py +39 -0
  27. sim_atlas-0.0.1/src/sim_atlas/settings.py +228 -0
  28. sim_atlas-0.0.1/src/sim_atlas/static/frontend/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  29. sim_atlas-0.0.1/src/sim_atlas/static/frontend/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  30. sim_atlas-0.0.1/src/sim_atlas/static/frontend/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  31. sim_atlas-0.0.1/src/sim_atlas/static/frontend/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  32. sim_atlas-0.0.1/src/sim_atlas/static/frontend/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  33. sim_atlas-0.0.1/src/sim_atlas/static/frontend/assets/index-Bj1UJeA8.css +1 -0
  34. sim_atlas-0.0.1/src/sim_atlas/static/frontend/assets/index-vns5LrWm.js +82 -0
  35. sim_atlas-0.0.1/src/sim_atlas/static/frontend/index.html +14 -0
  36. sim_atlas-0.0.1/src/sim_atlas/static/ide/assets/index-D7pRfJJj.js +116 -0
  37. sim_atlas-0.0.1/src/sim_atlas/static/ide/assets/index-DeIeWIGr.css +1 -0
  38. sim_atlas-0.0.1/src/sim_atlas/static/ide/index.html +16 -0
  39. sim_atlas-0.0.1/src/sim_atlas/storage_interface.py +96 -0
  40. sim_atlas-0.0.1/src/sim_atlas/type_utils.py +185 -0
  41. sim_atlas-0.0.1/src/sim_atlas/voyage_ai.py +25 -0
  42. sim_atlas-0.0.1/tests/__init__.py +0 -0
  43. sim_atlas-0.0.1/tests/test_agent_runner.py +138 -0
  44. sim_atlas-0.0.1/tests/test_file_system_storage.py +18 -0
  45. sim_atlas-0.0.1/tests/test_main.py +436 -0
  46. sim_atlas-0.0.1/tests/test_settings.py +151 -0
  47. sim_atlas-0.0.1/tests/test_storage_interface.py +661 -0
  48. sim_atlas-0.0.1/update_static_data +14 -0
  49. sim_atlas-0.0.1/uv.lock +3203 -0
@@ -0,0 +1,338 @@
1
+ *.json
2
+ *.pkl
3
+
4
+ # Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,python,node
5
+ # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,python,node
6
+
7
+ ### Node ###
8
+ # Logs
9
+ logs
10
+ *.log
11
+ npm-debug.log*
12
+ yarn-debug.log*
13
+ yarn-error.log*
14
+ lerna-debug.log*
15
+ .pnpm-debug.log*
16
+
17
+ # Diagnostic reports (https://nodejs.org/api/report.html)
18
+ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
19
+
20
+ # Runtime data
21
+ pids
22
+ *.pid
23
+ *.seed
24
+ *.pid.lock
25
+
26
+ # Directory for instrumented libs generated by jscoverage/JSCover
27
+ lib-cov
28
+
29
+ # Coverage directory used by tools like istanbul
30
+ coverage
31
+ *.lcov
32
+
33
+ # nyc test coverage
34
+ .nyc_output
35
+
36
+ # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
37
+ .grunt
38
+
39
+ # Bower dependency directory (https://bower.io/)
40
+ bower_components
41
+
42
+ # node-waf configuration
43
+ .lock-wscript
44
+
45
+ # Compiled binary addons (https://nodejs.org/api/addons.html)
46
+ build/Release
47
+
48
+ # Dependency directories
49
+ node_modules/
50
+ jspm_packages/
51
+
52
+ # Snowpack dependency directory (https://snowpack.dev/)
53
+ web_modules/
54
+
55
+ # TypeScript cache
56
+ *.tsbuildinfo
57
+
58
+ # Optional npm cache directory
59
+ .npm
60
+
61
+ # Optional eslint cache
62
+ .eslintcache
63
+
64
+ # Optional stylelint cache
65
+ .stylelintcache
66
+
67
+ # Microbundle cache
68
+ .rpt2_cache/
69
+ .rts2_cache_cjs/
70
+ .rts2_cache_es/
71
+ .rts2_cache_umd/
72
+
73
+ # Optional REPL history
74
+ .node_repl_history
75
+
76
+ # Output of 'npm pack'
77
+ *.tgz
78
+
79
+ # Yarn Integrity file
80
+ .yarn-integrity
81
+
82
+ # dotenv environment variable files
83
+ .env
84
+ .env.development.local
85
+ .env.test.local
86
+ .env.production.local
87
+ .env.local
88
+
89
+ # parcel-bundler cache (https://parceljs.org/)
90
+ .cache
91
+ .parcel-cache
92
+
93
+ # Next.js build output
94
+ .next
95
+ out
96
+
97
+ # Nuxt.js build / generate output
98
+ .nuxt
99
+ dist
100
+
101
+ # Gatsby files
102
+ .cache/
103
+ # Comment in the public line in if your project uses Gatsby and not Next.js
104
+ # https://nextjs.org/blog/next-9-1#public-directory-support
105
+ # public
106
+
107
+ # vuepress build output
108
+ .vuepress/dist
109
+
110
+ # vuepress v2.x temp and cache directory
111
+ .temp
112
+
113
+ # Docusaurus cache and generated files
114
+ .docusaurus
115
+
116
+ # Serverless directories
117
+ .serverless/
118
+
119
+ # FuseBox cache
120
+ .fusebox/
121
+
122
+ # DynamoDB Local files
123
+ .dynamodb/
124
+
125
+ # TernJS port file
126
+ .tern-port
127
+
128
+ # Stores VSCode versions used for testing VSCode extensions
129
+ .vscode-test
130
+
131
+ # yarn v2
132
+ .yarn/cache
133
+ .yarn/unplugged
134
+ .yarn/build-state.yml
135
+ .yarn/install-state.gz
136
+ .pnp.*
137
+
138
+ ### Node Patch ###
139
+ # Serverless Webpack directories
140
+ .webpack/
141
+
142
+ # Optional stylelint cache
143
+
144
+ # SvelteKit build / generate output
145
+ .svelte-kit
146
+
147
+ ### Python ###
148
+ # Byte-compiled / optimized / DLL files
149
+ __pycache__/
150
+ *.py[cod]
151
+ *$py.class
152
+
153
+ # C extensions
154
+ *.so
155
+
156
+ # Distribution / packaging
157
+ .Python
158
+ build/
159
+ develop-eggs/
160
+ dist/
161
+ downloads/
162
+ eggs/
163
+ .eggs/
164
+ lib/
165
+ lib64/
166
+ parts/
167
+ sdist/
168
+ var/
169
+ wheels/
170
+ share/python-wheels/
171
+ *.egg-info/
172
+ .installed.cfg
173
+ *.egg
174
+ MANIFEST
175
+
176
+ # PyInstaller
177
+ # Usually these files are written by a python script from a template
178
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
179
+ *.manifest
180
+ *.spec
181
+
182
+ # Installer logs
183
+ pip-log.txt
184
+ pip-delete-this-directory.txt
185
+
186
+ # Unit test / coverage reports
187
+ htmlcov/
188
+ .tox/
189
+ .nox/
190
+ .coverage
191
+ .coverage.*
192
+ nosetests.xml
193
+ coverage.xml
194
+ *.cover
195
+ *.py,cover
196
+ .hypothesis/
197
+ .pytest_cache/
198
+ cover/
199
+
200
+ # Translations
201
+ *.mo
202
+ *.pot
203
+
204
+ # Django stuff:
205
+ local_settings.py
206
+ db.sqlite3
207
+ db.sqlite3-journal
208
+
209
+ # Flask stuff:
210
+ instance/
211
+ .webassets-cache
212
+
213
+ # Scrapy stuff:
214
+ .scrapy
215
+
216
+ # Sphinx documentation
217
+ docs/_build/
218
+
219
+ # PyBuilder
220
+ .pybuilder/
221
+ target/
222
+
223
+ # Jupyter Notebook
224
+ .ipynb_checkpoints
225
+
226
+ # IPython
227
+ profile_default/
228
+ ipython_config.py
229
+
230
+ # pyenv
231
+ # For a library or package, you might want to ignore these files since the code is
232
+ # intended to run in multiple environments; otherwise, check them in:
233
+ # .python-version
234
+
235
+ # pipenv
236
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
237
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
238
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
239
+ # install all needed dependencies.
240
+ #Pipfile.lock
241
+
242
+ # poetry
243
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
244
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
245
+ # commonly ignored for libraries.
246
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
247
+ #poetry.lock
248
+
249
+ # pdm
250
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
251
+ #pdm.lock
252
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
253
+ # in version control.
254
+ # https://pdm.fming.dev/#use-with-ide
255
+ .pdm.toml
256
+
257
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
258
+ __pypackages__/
259
+
260
+ # Celery stuff
261
+ celerybeat-schedule
262
+ celerybeat.pid
263
+
264
+ # SageMath parsed files
265
+ *.sage.py
266
+
267
+ # Environments
268
+ .venv
269
+ env/
270
+ venv/
271
+ ENV/
272
+ env.bak/
273
+ venv.bak/
274
+
275
+ # Spyder project settings
276
+ .spyderproject
277
+ .spyproject
278
+
279
+ # Rope project settings
280
+ .ropeproject
281
+
282
+ # mkdocs documentation
283
+ /site
284
+
285
+ # mypy
286
+ .mypy_cache/
287
+ .dmypy.json
288
+ dmypy.json
289
+
290
+ # Pyre type checker
291
+ .pyre/
292
+
293
+ # pytype static type analyzer
294
+ .pytype/
295
+
296
+ # Cython debug symbols
297
+ cython_debug/
298
+
299
+ # PyCharm
300
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
301
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
302
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
303
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
304
+ #.idea/
305
+
306
+ ### Python Patch ###
307
+ # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
308
+ poetry.toml
309
+
310
+ # ruff
311
+ .ruff_cache/
312
+
313
+ # LSP config files
314
+ pyrightconfig.json
315
+
316
+ ### VisualStudioCode ###
317
+ .vscode/*
318
+ !.vscode/settings.json
319
+ !.vscode/tasks.json
320
+ !.vscode/launch.json
321
+ !.vscode/extensions.json
322
+ !.vscode/*.code-snippets
323
+
324
+ # Local History for Visual Studio Code
325
+ .history/
326
+
327
+ # Built Visual Studio Code Extensions
328
+ *.vsix
329
+
330
+ ### VisualStudioCode Patch ###
331
+ # Ignore all local history of files
332
+ .history
333
+ .ionide
334
+
335
+ # End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,python,node
336
+ .sim_atlas/
337
+
338
+ *.toml
@@ -0,0 +1,44 @@
1
+ workflow:
2
+ rules:
3
+ - if: '$CI_PIPELINE_SOURCE == "push"'
4
+ - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
5
+
6
+ variables:
7
+ SIM_ATLAS_JWT_SECRET: "ci-dummy-secret"
8
+ SIM_ATLAS_LLM_API_KEY: "ci-dummy-api-key"
9
+ SIM_ATLAS_LLM_BASE_URL: "http://localhost:11434/v1"
10
+ SIM_ATLAS_LLM_EMBEDDING_MODEL: "ci-dummy-embedding-model"
11
+ SIM_ATLAS_LLM_CHAT_MODEL: "ci-dummy-chat-model"
12
+ SIM_ATLAS_VOYAGE_API_KEY: "ci-dummy-voyage-api-key"
13
+
14
+ default:
15
+ interruptible: true
16
+
17
+ backend_lint_and_type_check:
18
+ image: python:3.12
19
+ before_script:
20
+ - python -m pip install --upgrade pip
21
+ - python -m pip install uv
22
+ script:
23
+ - cd backend
24
+ - uv sync --dev
25
+ - uv run ruff check .
26
+ - uv run ruff format --check .
27
+ - uv run pyright
28
+
29
+ backend_test_and_coverage:
30
+ image: python:3.12
31
+ before_script:
32
+ - python -m pip install --upgrade pip
33
+ - python -m pip install uv
34
+ script:
35
+ - cd backend
36
+ - uv sync --dev
37
+ - uv run coverage run -m pytest
38
+ - uv run coverage report
39
+ - uv run coverage html
40
+ coverage: '/TOTAL.*\s+(\d+%)$/'
41
+ artifacts:
42
+ paths:
43
+ - backend/htmlcov/
44
+ expose_as: Coverage Report
@@ -0,0 +1,114 @@
1
+ # backend
2
+
3
+ FastAPI REST API with MCP tool exposure and AI integration.
4
+
5
+ ## Commands
6
+
7
+ ```bash
8
+ uv run pytest # run tests
9
+ uv run coverage run -m pytest # run tests with coverage
10
+ uv run ruff check . # lint
11
+ uv run ruff format --check . # check formatting
12
+ uv run pyright # type-check (strict mode)
13
+ ```
14
+
15
+ ## Key Patterns
16
+
17
+ - **Storage**: always interact via `storage_interface.py` (`StorageInterface`), never directly via `file_system_storage.py`; use `get_storage_backend()` (also in `storage_interface.py`) to instantiate the backend
18
+ - **Dependency injection**: use `Depends()` for storage (`get_storage` in `main.py`) and auth (`get_current_user` in `security.py`); settings are NOT injected via `Depends()` — call `load_settings()` directly (it is `lru_cache`-cached)
19
+ - **Models**: Pydantic v2; all schemas in `models.py`; three distinct types: `NodeRequest` (API write input), `NodeMetadata` (internal storage schema), `NodeResponse` (API read output); `NdArray` is a custom Pydantic type for gzip-compressed numpy arrays (embeddings)
20
+ - **Auth**: JWT tokens carried in `x-api-key` header; `get_current_user` dependency enforces auth on write routes; read routes are public
21
+ - **MCP**: only `semantic_search`, `hybrid_search`, and `agent_stream` are exposed as MCP tools (see `include_operations` in `main.py`); keep those route signatures clean — they double as tool signatures
22
+ - **AI**: docstring enrichment via OpenAI-compatible API (`ai.py`); embeddings via VoyageAI (`voyage_ai.py`); agent in `agent/` — SSE streaming (`_sse.py`), agentic loop (`_runner.py`), system prompt (`_prompt.py`), observability (`_observability.py`), tools in `agent/tools/`; all AI features raise `AINotConfiguredError` (from `exceptions.py`) when the required settings are absent
23
+ - **Config**: all settings via `settings.py` (`pydantic-settings`); loaded from TOML files at `/etc/sim_atlas/config.toml`, `~/.sim_atlas/config.toml`, or `.sim_atlas/config.toml`; never hardcode secrets or URLs
24
+ - **CLI**: entry points live in `cli/` (`server.py` starts the server, `token.py` issues JWT tokens)
25
+
26
+ ## Libraries
27
+
28
+ - **pydantic**: [Documentation](https://pydantic.dev/docs/validation/latest/llms.txt)
29
+ - **pydantic-settings**: [Documentation](https://pydantic.dev/docs/validation/latest/llms.txt)
30
+ - **langfuse**: [Documentation](https://langfuse.com/llms-docs.txt)
31
+
32
+ ## Think Before Coding
33
+
34
+ **Don't assume. Don't hide confusion. Surface tradeoffs.**
35
+
36
+ Before implementing:
37
+ - State your assumptions explicitly. If uncertain, ask.
38
+ - If multiple interpretations exist, present them - don't pick silently.
39
+ - If a simpler approach exists, say so. Push back when warranted.
40
+ - If something is unclear, stop. Name what's confusing. Ask.
41
+
42
+ ## Simplicity First
43
+
44
+ **Minimum code that solves the problem. Nothing speculative.**
45
+
46
+ - No features beyond what was asked.
47
+ - No abstractions for single-use code.
48
+ - No "flexibility" or "configurability" that wasn't requested.
49
+ - No error handling for impossible scenarios.
50
+ - If you write 200 lines and it could be 50, rewrite it.
51
+
52
+ Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
53
+
54
+ ## Surgical Changes
55
+
56
+ **Touch only what you must. Clean up only your own mess.**
57
+
58
+ When editing existing code:
59
+ - Don't "improve" adjacent code, comments, or formatting.
60
+ - Don't refactor things that aren't broken.
61
+ - Match existing style, even if you'd do it differently.
62
+ - If you notice unrelated dead code, mention it - don't delete it.
63
+
64
+ When your changes create orphans:
65
+ - Remove imports/variables/functions that YOUR changes made unused.
66
+ - Don't remove pre-existing dead code unless asked.
67
+
68
+ The test: Every changed line should trace directly to the user's request.
69
+
70
+ ## Code Quality — Write It Right First Time
71
+
72
+ **Run `uv run ruff check . && uv run ruff format --check . && uv run pyright` before declaring done. Fix all errors before moving on.**
73
+
74
+ ### Type safety (Pyright strict)
75
+ - Annotate every function parameter and return type — no implicit `Any`.
76
+ - Use `X | Y` union syntax (Python 3.10+), never `Optional[X]` or `Union[X, Y]`.
77
+ - Prefer `X | None` over wrapping in `Optional`.
78
+ - Use `list[X]`, `dict[K, V]`, `tuple[X, ...]` (lowercase), not `List`, `Dict`, `Tuple` from `typing`.
79
+ - Only import from `typing` what has no builtin equivalent: `TypeVar`, `Protocol`, `TypedDict`, `Literal`, `overload`, `cast`, `TYPE_CHECKING`.
80
+ - Narrow types explicitly with `isinstance` checks or `assert` before use; don't cast blindly.
81
+ - Never use `# type: ignore` without a specific error code and a comment explaining why.
82
+
83
+ ### Ruff lint rules enforced (see pyproject.toml)
84
+ - **UP**: use modern Python syntax — `X | Y`, `type` aliases, `match` where appropriate.
85
+ - **I**: imports are sorted — stdlib → third-party → local, one blank line between groups.
86
+ - **F**: no unused imports or variables; remove them (don't comment them out).
87
+ - **B**: no mutable default arguments, no `assert` in production logic.
88
+ - **SIM**: simplify boolean returns, `if`/`else` chains, and `with` blocks.
89
+ - **C4**: prefer comprehensions over `map`/`filter`; avoid unnecessary `list()` wrapping.
90
+ - **ERA**: no commented-out code.
91
+ - **PL**: Pylint rules — avoid too-many-branches, too-many-return-statements, etc.
92
+
93
+ ### Formatting (ruff format)
94
+ - 88-character line limit (E501 is ignored so long lines won't error, but keep them readable).
95
+ - Use double quotes for strings.
96
+ - Trailing commas in multi-line collections.
97
+
98
+ ## Goal-Driven Execution
99
+
100
+ **Define success criteria. Loop until verified.**
101
+
102
+ Transform tasks into verifiable goals:
103
+ - "Add validation" → "Write tests for invalid inputs, then make them pass"
104
+ - "Fix the bug" → "Write a test that reproduces it, then make it pass"
105
+ - "Refactor X" → "Ensure tests pass before and after"
106
+
107
+ For multi-step tasks, state a brief plan:
108
+ ```
109
+ 1. [Step] → verify: [check]
110
+ 2. [Step] → verify: [check]
111
+ 3. [Step] → verify: [check]
112
+ ```
113
+
114
+ Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
@@ -0,0 +1 @@
1
+ AGENTS.md
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, Sebastian Eibl
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,32 @@
1
+ Metadata-Version: 2.4
2
+ Name: sim-atlas
3
+ Version: 0.0.1
4
+ Summary: Search and discovery platform for simulation nodes — Python functions, workflow definitions, and pyiron nodes used in scientific computing.
5
+ Author-email: Sebastian Eibl <sebastian.eibl@mpcdf.mpg.de>
6
+ Maintainer-email: Sebastian Eibl <sebastian.eibl@mpcdf.mpg.de>
7
+ License-Expression: BSD-3-Clause
8
+ License-File: LICENSE
9
+ Keywords: pyiron
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Web Environment
12
+ Classifier: Framework :: FastAPI
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Scientific/Engineering
21
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
+ Requires-Python: >=3.12
23
+ Requires-Dist: fastapi-mcp>=0.4.0
24
+ Requires-Dist: fastapi[standard]>=0.122.0
25
+ Requires-Dist: langfuse>=4.6.1
26
+ Requires-Dist: numpy>=1.21
27
+ Requires-Dist: openai>=2.8.1
28
+ Requires-Dist: pydantic-settings[toml]>=2.13.1
29
+ Requires-Dist: pyjwt>=2.12.1
30
+ Requires-Dist: python-workflow-definition>=0.1.2
31
+ Requires-Dist: tqdm>=4.67.3
32
+ Requires-Dist: voyageai>=0.3.7
File without changes
@@ -0,0 +1,101 @@
1
+ [project]
2
+ name = "sim-atlas"
3
+ version = "0.0.1"
4
+ description = "Search and discovery platform for simulation nodes — Python functions, workflow definitions, and pyiron nodes used in scientific computing."
5
+ authors = [
6
+ { name = "Sebastian Eibl", email = "sebastian.eibl@mpcdf.mpg.de"},
7
+ ]
8
+ maintainers = [
9
+ { name = "Sebastian Eibl", email = "sebastian.eibl@mpcdf.mpg.de"},
10
+ ]
11
+ readme = "README.md"
12
+ requires-python = ">=3.12"
13
+ license = "BSD-3-Clause"
14
+ license-files = ["LICEN[CS]E*"]
15
+ keywords = ["pyiron"]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Environment :: Web Environment",
19
+ "Framework :: FastAPI",
20
+ "Intended Audience :: Developers",
21
+ "Intended Audience :: Science/Research",
22
+ "Operating System :: OS Independent",
23
+ "Programming Language :: Python",
24
+ "Programming Language :: Python :: 3",
25
+ "Programming Language :: Python :: 3.12",
26
+ "Programming Language :: Python :: 3.13",
27
+ "Topic :: Scientific/Engineering",
28
+ "Topic :: Software Development :: Libraries :: Python Modules",
29
+ ]
30
+ dependencies = [
31
+ "fastapi-mcp>=0.4.0",
32
+ "fastapi[standard]>=0.122.0",
33
+ "langfuse>=4.6.1",
34
+ "numpy>=1.21",
35
+ "openai>=2.8.1",
36
+ "pydantic-settings[toml]>=2.13.1",
37
+ "pyjwt>=2.12.1",
38
+ "python-workflow-definition>=0.1.2",
39
+ "tqdm>=4.67.3",
40
+ "voyageai>=0.3.7",
41
+ ]
42
+
43
+ [dependency-groups]
44
+ dev = [
45
+ "coverage>=7.13.5",
46
+ "pyright>=1.1.407",
47
+ "pytest>=9.0.2",
48
+ "ruff>=0.14.6",
49
+ ]
50
+
51
+ [build-system]
52
+ requires = ["hatchling"]
53
+ build-backend = "hatchling.build"
54
+
55
+ [project.scripts]
56
+ sim-atlas-access-token = "sim_atlas.cli:token"
57
+ sim-atlas = "sim_atlas.cli:backend"
58
+
59
+ [tool.fastapi]
60
+ entrypoint = "sim_atlas.main:app"
61
+
62
+ [tool.ruff.lint]
63
+ select = [
64
+ # pycodestyle
65
+ "E",
66
+ # Pyflakes
67
+ "F",
68
+ # pyupgrade
69
+ "UP",
70
+ # flake8-bugbear
71
+ "B",
72
+ # flake8-simplify
73
+ "SIM",
74
+ # isort
75
+ "I",
76
+ # flake8-comprehensions
77
+ "C4",
78
+ # eradicate
79
+ "ERA",
80
+ # pylint
81
+ "PL",
82
+ ]
83
+ ignore = [
84
+ "E501", # line too long
85
+ "PLR0912", # Too many branches
86
+ "PLR0915", # Too many statements
87
+ "PLR0913", # Too many arguments in function definition
88
+ ]
89
+
90
+ [tool.pyright]
91
+ typeCheckingMode = "strict"
92
+ reportMissingTypeStubs = false
93
+
94
+ [pytest]
95
+ strict = true
96
+
97
+ [[tool.uv.index]]
98
+ name = "testpypi"
99
+ url = "https://test.pypi.org/simple/"
100
+ publish-url = "https://test.pypi.org/legacy/"
101
+ explicit = true
File without changes
@@ -0,0 +1,3 @@
1
+ from ._runner import run_agent_stream
2
+
3
+ __all__ = ["run_agent_stream"]