mfs-server 0.4.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 (149) hide show
  1. mfs_server-0.4.0/.gitignore +11 -0
  2. mfs_server-0.4.0/PKG-INFO +159 -0
  3. mfs_server-0.4.0/README.md +57 -0
  4. mfs_server-0.4.0/openapitools.json +7 -0
  5. mfs_server-0.4.0/pyproject.toml +135 -0
  6. mfs_server-0.4.0/src/mfs_server/__init__.py +0 -0
  7. mfs_server-0.4.0/src/mfs_server/api/__init__.py +0 -0
  8. mfs_server-0.4.0/src/mfs_server/api/app.py +645 -0
  9. mfs_server-0.4.0/src/mfs_server/api/models.py +224 -0
  10. mfs_server-0.4.0/src/mfs_server/common/__init__.py +0 -0
  11. mfs_server-0.4.0/src/mfs_server/common/accel.py +125 -0
  12. mfs_server-0.4.0/src/mfs_server/common/converter.py +60 -0
  13. mfs_server-0.4.0/src/mfs_server/common/embedding.py +132 -0
  14. mfs_server-0.4.0/src/mfs_server/common/embeddings/__init__.py +85 -0
  15. mfs_server-0.4.0/src/mfs_server/common/embeddings/gemini.py +79 -0
  16. mfs_server-0.4.0/src/mfs_server/common/embeddings/local.py +79 -0
  17. mfs_server-0.4.0/src/mfs_server/common/embeddings/ollama.py +47 -0
  18. mfs_server-0.4.0/src/mfs_server/common/embeddings/onnx.py +196 -0
  19. mfs_server-0.4.0/src/mfs_server/common/embeddings/openai.py +85 -0
  20. mfs_server-0.4.0/src/mfs_server/common/embeddings/utils.py +33 -0
  21. mfs_server-0.4.0/src/mfs_server/common/embeddings/voyage.py +69 -0
  22. mfs_server-0.4.0/src/mfs_server/common/llm/__init__.py +77 -0
  23. mfs_server-0.4.0/src/mfs_server/common/llm/anthropic.py +72 -0
  24. mfs_server-0.4.0/src/mfs_server/common/llm/gemini.py +62 -0
  25. mfs_server-0.4.0/src/mfs_server/common/llm/openai.py +64 -0
  26. mfs_server-0.4.0/src/mfs_server/common/retrieval.py +125 -0
  27. mfs_server-0.4.0/src/mfs_server/common/summary.py +93 -0
  28. mfs_server-0.4.0/src/mfs_server/common/vlm.py +91 -0
  29. mfs_server-0.4.0/src/mfs_server/config.py +530 -0
  30. mfs_server-0.4.0/src/mfs_server/connectors/__init__.py +0 -0
  31. mfs_server-0.4.0/src/mfs_server/connectors/base.py +575 -0
  32. mfs_server-0.4.0/src/mfs_server/connectors/bigquery/__init__.py +4 -0
  33. mfs_server-0.4.0/src/mfs_server/connectors/bigquery/plugin.py +239 -0
  34. mfs_server-0.4.0/src/mfs_server/connectors/discord/__init__.py +4 -0
  35. mfs_server-0.4.0/src/mfs_server/connectors/discord/plugin.py +255 -0
  36. mfs_server-0.4.0/src/mfs_server/connectors/feishu/__init__.py +4 -0
  37. mfs_server-0.4.0/src/mfs_server/connectors/feishu/auth_login.py +132 -0
  38. mfs_server-0.4.0/src/mfs_server/connectors/feishu/oauth.py +207 -0
  39. mfs_server-0.4.0/src/mfs_server/connectors/feishu/plugin.py +659 -0
  40. mfs_server-0.4.0/src/mfs_server/connectors/file/__init__.py +4 -0
  41. mfs_server-0.4.0/src/mfs_server/connectors/file/plugin.py +589 -0
  42. mfs_server-0.4.0/src/mfs_server/connectors/gdrive/__init__.py +4 -0
  43. mfs_server-0.4.0/src/mfs_server/connectors/gdrive/plugin.py +251 -0
  44. mfs_server-0.4.0/src/mfs_server/connectors/github/__init__.py +4 -0
  45. mfs_server-0.4.0/src/mfs_server/connectors/github/plugin.py +327 -0
  46. mfs_server-0.4.0/src/mfs_server/connectors/gmail/__init__.py +4 -0
  47. mfs_server-0.4.0/src/mfs_server/connectors/gmail/plugin.py +214 -0
  48. mfs_server-0.4.0/src/mfs_server/connectors/hubspot/__init__.py +4 -0
  49. mfs_server-0.4.0/src/mfs_server/connectors/hubspot/plugin.py +181 -0
  50. mfs_server-0.4.0/src/mfs_server/connectors/jira/__init__.py +4 -0
  51. mfs_server-0.4.0/src/mfs_server/connectors/jira/plugin.py +210 -0
  52. mfs_server-0.4.0/src/mfs_server/connectors/linear/__init__.py +4 -0
  53. mfs_server-0.4.0/src/mfs_server/connectors/linear/plugin.py +196 -0
  54. mfs_server-0.4.0/src/mfs_server/connectors/mongo/__init__.py +4 -0
  55. mfs_server-0.4.0/src/mfs_server/connectors/mongo/plugin.py +217 -0
  56. mfs_server-0.4.0/src/mfs_server/connectors/mysql/__init__.py +4 -0
  57. mfs_server-0.4.0/src/mfs_server/connectors/mysql/plugin.py +276 -0
  58. mfs_server-0.4.0/src/mfs_server/connectors/notion/__init__.py +4 -0
  59. mfs_server-0.4.0/src/mfs_server/connectors/notion/plugin.py +239 -0
  60. mfs_server-0.4.0/src/mfs_server/connectors/postgres/__init__.py +4 -0
  61. mfs_server-0.4.0/src/mfs_server/connectors/postgres/plugin.py +303 -0
  62. mfs_server-0.4.0/src/mfs_server/connectors/registry.py +56 -0
  63. mfs_server-0.4.0/src/mfs_server/connectors/s3/__init__.py +4 -0
  64. mfs_server-0.4.0/src/mfs_server/connectors/s3/plugin.py +155 -0
  65. mfs_server-0.4.0/src/mfs_server/connectors/slack/__init__.py +4 -0
  66. mfs_server-0.4.0/src/mfs_server/connectors/slack/plugin.py +229 -0
  67. mfs_server-0.4.0/src/mfs_server/connectors/snowflake/__init__.py +4 -0
  68. mfs_server-0.4.0/src/mfs_server/connectors/snowflake/plugin.py +356 -0
  69. mfs_server-0.4.0/src/mfs_server/connectors/web/__init__.py +4 -0
  70. mfs_server-0.4.0/src/mfs_server/connectors/web/plugin.py +239 -0
  71. mfs_server-0.4.0/src/mfs_server/connectors/zendesk/__init__.py +4 -0
  72. mfs_server-0.4.0/src/mfs_server/connectors/zendesk/plugin.py +200 -0
  73. mfs_server-0.4.0/src/mfs_server/engine/__init__.py +0 -0
  74. mfs_server-0.4.0/src/mfs_server/engine/adapters.py +135 -0
  75. mfs_server-0.4.0/src/mfs_server/engine/engine.py +2984 -0
  76. mfs_server-0.4.0/src/mfs_server/engine/job_lane/__init__.py +318 -0
  77. mfs_server-0.4.0/src/mfs_server/engine/job_lane/queue.py +53 -0
  78. mfs_server-0.4.0/src/mfs_server/engine/job_lane/tree.py +105 -0
  79. mfs_server-0.4.0/src/mfs_server/engine/job_lane/worker.py +116 -0
  80. mfs_server-0.4.0/src/mfs_server/engine/job_watcher.py +120 -0
  81. mfs_server-0.4.0/src/mfs_server/engine/pipeline.py +409 -0
  82. mfs_server-0.4.0/src/mfs_server/engine/producers/__init__.py +79 -0
  83. mfs_server-0.4.0/src/mfs_server/engine/producers/base.py +195 -0
  84. mfs_server-0.4.0/src/mfs_server/engine/producers/image.py +52 -0
  85. mfs_server-0.4.0/src/mfs_server/engine/producers/message_stream.py +132 -0
  86. mfs_server-0.4.0/src/mfs_server/engine/producers/record_collection.py +125 -0
  87. mfs_server-0.4.0/src/mfs_server/engine/producers/render.py +156 -0
  88. mfs_server-0.4.0/src/mfs_server/engine/producers/table_schema.py +70 -0
  89. mfs_server-0.4.0/src/mfs_server/engine/producers/text.py +140 -0
  90. mfs_server-0.4.0/src/mfs_server/engine/state.py +79 -0
  91. mfs_server-0.4.0/src/mfs_server/processors/__init__.py +0 -0
  92. mfs_server-0.4.0/src/mfs_server/processors/text.py +75 -0
  93. mfs_server-0.4.0/src/mfs_server/server/__init__.py +0 -0
  94. mfs_server-0.4.0/src/mfs_server/server/__main__.py +155 -0
  95. mfs_server-0.4.0/src/mfs_server/server/connector_schemas.py +436 -0
  96. mfs_server-0.4.0/src/mfs_server/server/connector_wizard.py +802 -0
  97. mfs_server-0.4.0/src/mfs_server/server/setup_wizard.py +682 -0
  98. mfs_server-0.4.0/src/mfs_server/server/wizard_ui.py +223 -0
  99. mfs_server-0.4.0/src/mfs_server/storage/__init__.py +0 -0
  100. mfs_server-0.4.0/src/mfs_server/storage/artifact_cache.py +79 -0
  101. mfs_server-0.4.0/src/mfs_server/storage/file_state.py +103 -0
  102. mfs_server-0.4.0/src/mfs_server/storage/ids.py +64 -0
  103. mfs_server-0.4.0/src/mfs_server/storage/metadata/__init__.py +44 -0
  104. mfs_server-0.4.0/src/mfs_server/storage/metadata/base.py +234 -0
  105. mfs_server-0.4.0/src/mfs_server/storage/metadata/postgres.py +70 -0
  106. mfs_server-0.4.0/src/mfs_server/storage/metadata/sqlite.py +72 -0
  107. mfs_server-0.4.0/src/mfs_server/storage/milvus.py +468 -0
  108. mfs_server-0.4.0/src/mfs_server/storage/transformation_cache/__init__.py +45 -0
  109. mfs_server-0.4.0/src/mfs_server/storage/transformation_cache/base.py +137 -0
  110. mfs_server-0.4.0/src/mfs_server/storage/transformation_cache/postgres.py +86 -0
  111. mfs_server-0.4.0/src/mfs_server/storage/transformation_cache/sqlite.py +80 -0
  112. mfs_server-0.4.0/tests/.gitkeep +0 -0
  113. mfs_server-0.4.0/tests/_fakes.py +187 -0
  114. mfs_server-0.4.0/tests/test_api_auth.py +142 -0
  115. mfs_server-0.4.0/tests/test_artifact_adapter.py +117 -0
  116. mfs_server-0.4.0/tests/test_common_client_single_flight.py +103 -0
  117. mfs_server-0.4.0/tests/test_concurrency_gates.py +77 -0
  118. mfs_server-0.4.0/tests/test_config_toml_v04.py +186 -0
  119. mfs_server-0.4.0/tests/test_embedding_preload.py +38 -0
  120. mfs_server-0.4.0/tests/test_engine_chunkable_e2e.py +229 -0
  121. mfs_server-0.4.0/tests/test_engine_claim_global.py +221 -0
  122. mfs_server-0.4.0/tests/test_engine_connector_lifecycle.py +82 -0
  123. mfs_server-0.4.0/tests/test_engine_dir_summary_e2e.py +231 -0
  124. mfs_server-0.4.0/tests/test_engine_image_e2e.py +257 -0
  125. mfs_server-0.4.0/tests/test_engine_inspect_resolution.py +62 -0
  126. mfs_server-0.4.0/tests/test_engine_message_stream_e2e.py +225 -0
  127. mfs_server-0.4.0/tests/test_engine_record_collection_e2e.py +229 -0
  128. mfs_server-0.4.0/tests/test_engine_search_empty_scope.py +59 -0
  129. mfs_server-0.4.0/tests/test_engine_table_schema_e2e.py +193 -0
  130. mfs_server-0.4.0/tests/test_enumeration_since.py +136 -0
  131. mfs_server-0.4.0/tests/test_feishu_oauth.py +262 -0
  132. mfs_server-0.4.0/tests/test_file_connector_grep.py +61 -0
  133. mfs_server-0.4.0/tests/test_job_watcher.py +183 -0
  134. mfs_server-0.4.0/tests/test_milvus_filter_literals.py +56 -0
  135. mfs_server-0.4.0/tests/test_pipeline.py +380 -0
  136. mfs_server-0.4.0/tests/test_producers_base.py +115 -0
  137. mfs_server-0.4.0/tests/test_producers_image.py +67 -0
  138. mfs_server-0.4.0/tests/test_producers_message_stream.py +87 -0
  139. mfs_server-0.4.0/tests/test_producers_record_collection.py +120 -0
  140. mfs_server-0.4.0/tests/test_producers_table_schema.py +62 -0
  141. mfs_server-0.4.0/tests/test_producers_text.py +153 -0
  142. mfs_server-0.4.0/tests/test_reduce_coordinator.py +66 -0
  143. mfs_server-0.4.0/tests/test_reduce_queue.py +58 -0
  144. mfs_server-0.4.0/tests/test_reduce_tree.py +88 -0
  145. mfs_server-0.4.0/tests/test_reduce_worker.py +150 -0
  146. mfs_server-0.4.0/tests/test_setup_wizard_sections.py +92 -0
  147. mfs_server-0.4.0/tests/test_tx_cache_compute_lock.py +156 -0
  148. mfs_server-0.4.0/tests/test_upload_validation.py +105 -0
  149. mfs_server-0.4.0/uv.lock +6261 -0
@@ -0,0 +1,11 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.pyc
4
+ *.db
5
+ *.db-wal
6
+ *.db-shm
7
+ .pytest_cache/
8
+ .ruff_cache/
9
+ *.egg-info/
10
+ dist/
11
+ build/
@@ -0,0 +1,159 @@
1
+ Metadata-Version: 2.4
2
+ Name: mfs-server
3
+ Version: 0.4.0
4
+ Summary: MFS server — Multi-source File-like Search (heavy side: connectors, ingest, retrieval, storage)
5
+ Project-URL: Homepage, https://github.com/zilliztech/mfs
6
+ Project-URL: Repository, https://github.com/zilliztech/mfs
7
+ Project-URL: Issues, https://github.com/zilliztech/mfs/issues
8
+ Author-email: Cheney Zhang <chen.zhang@zilliz.com>
9
+ License-Expression: Apache-2.0
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Requires-Python: >=3.10
17
+ Requires-Dist: aiomysql>=0.3.2
18
+ Requires-Dist: aiosqlite>=0.20
19
+ Requires-Dist: chonkie>=0.4
20
+ Requires-Dist: fastapi>=0.110
21
+ Requires-Dist: httpx>=0.27
22
+ Requires-Dist: huggingface-hub>=0.20
23
+ Requires-Dist: markitdown[all]>=0.0.1
24
+ Requires-Dist: milvus-lite>=3.0
25
+ Requires-Dist: numpy>=1.24
26
+ Requires-Dist: onnxruntime>=1.17
27
+ Requires-Dist: openai>=1.40
28
+ Requires-Dist: pathspec>=1.1.1
29
+ Requires-Dist: pydantic-settings>=2.2
30
+ Requires-Dist: pydantic>=2.6
31
+ Requires-Dist: pymilvus>=2.5
32
+ Requires-Dist: pymongo>=4.13
33
+ Requires-Dist: python-multipart>=0.0.9
34
+ Requires-Dist: questionary>=2
35
+ Requires-Dist: rich>=13
36
+ Requires-Dist: tiktoken>=0.7
37
+ Requires-Dist: tokenizers>=0.15
38
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
39
+ Requires-Dist: uvicorn[standard]>=0.27
40
+ Provides-Extra: all-connectors
41
+ Requires-Dist: aioboto3>=13.0; extra == 'all-connectors'
42
+ Requires-Dist: aiohttp>=3.9; extra == 'all-connectors'
43
+ Requires-Dist: asyncpg>=0.29; extra == 'all-connectors'
44
+ Requires-Dist: atlassian-python-api>=3.41; extra == 'all-connectors'
45
+ Requires-Dist: beautifulsoup4>=4.12; extra == 'all-connectors'
46
+ Requires-Dist: google-api-python-client>=2.120; extra == 'all-connectors'
47
+ Requires-Dist: google-auth>=2.29; extra == 'all-connectors'
48
+ Requires-Dist: google-cloud-bigquery>=3.20; extra == 'all-connectors'
49
+ Requires-Dist: hubspot-api-client>=11.0; extra == 'all-connectors'
50
+ Requires-Dist: lark-oapi>=1.2; extra == 'all-connectors'
51
+ Requires-Dist: notion-client>=2.2; extra == 'all-connectors'
52
+ Requires-Dist: slack-sdk>=3.27; extra == 'all-connectors'
53
+ Requires-Dist: snowflake-connector-python>=3.10; extra == 'all-connectors'
54
+ Provides-Extra: all-providers
55
+ Requires-Dist: anthropic>=0.40; extra == 'all-providers'
56
+ Requires-Dist: google-genai>=0.3; extra == 'all-providers'
57
+ Requires-Dist: ollama>=0.4; extra == 'all-providers'
58
+ Requires-Dist: voyageai>=0.3; extra == 'all-providers'
59
+ Provides-Extra: anthropic
60
+ Requires-Dist: anthropic>=0.40; extra == 'anthropic'
61
+ Provides-Extra: bigquery
62
+ Requires-Dist: google-cloud-bigquery>=3.20; extra == 'bigquery'
63
+ Provides-Extra: dev
64
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
65
+ Requires-Dist: pytest>=8.0; extra == 'dev'
66
+ Requires-Dist: ruff>=0.6; extra == 'dev'
67
+ Provides-Extra: embedding-onnx
68
+ Provides-Extra: feishu
69
+ Requires-Dist: lark-oapi>=1.2; extra == 'feishu'
70
+ Provides-Extra: gemini
71
+ Requires-Dist: google-genai>=0.3; extra == 'gemini'
72
+ Provides-Extra: github
73
+ Requires-Dist: httpx>=0.27; extra == 'github'
74
+ Provides-Extra: google
75
+ Requires-Dist: google-api-python-client>=2.120; extra == 'google'
76
+ Requires-Dist: google-auth>=2.29; extra == 'google'
77
+ Provides-Extra: hubspot
78
+ Requires-Dist: hubspot-api-client>=11.0; extra == 'hubspot'
79
+ Provides-Extra: jira
80
+ Requires-Dist: atlassian-python-api>=3.41; extra == 'jira'
81
+ Provides-Extra: local
82
+ Requires-Dist: einops>=0.8; extra == 'local'
83
+ Requires-Dist: sentence-transformers>=3.0; extra == 'local'
84
+ Provides-Extra: notion
85
+ Requires-Dist: notion-client>=2.2; extra == 'notion'
86
+ Provides-Extra: ollama
87
+ Requires-Dist: ollama>=0.4; extra == 'ollama'
88
+ Provides-Extra: pg
89
+ Requires-Dist: asyncpg>=0.29; extra == 'pg'
90
+ Provides-Extra: s3
91
+ Requires-Dist: aioboto3>=13.0; extra == 's3'
92
+ Provides-Extra: slack
93
+ Requires-Dist: slack-sdk>=3.27; extra == 'slack'
94
+ Provides-Extra: snowflake
95
+ Requires-Dist: snowflake-connector-python>=3.10; extra == 'snowflake'
96
+ Provides-Extra: voyage
97
+ Requires-Dist: voyageai>=0.3; extra == 'voyage'
98
+ Provides-Extra: web
99
+ Requires-Dist: aiohttp>=3.9; extra == 'web'
100
+ Requires-Dist: beautifulsoup4>=4.12; extra == 'web'
101
+ Description-Content-Type: text/markdown
102
+
103
+ # mfs-server
104
+
105
+ The server side of **MFS — Multi-source File-like Search**: a context engine
106
+ that turns code, docs, messages, databases, and object stores into one
107
+ file-like, searchable namespace for AI agents and developers.
108
+
109
+ `mfs-server` is the heavy half of MFS. It owns the connectors, the ingest
110
+ pipeline, the vector index, and the storage — and exposes everything over an
111
+ HTTP `/v1` control plane. The thin [`mfs` CLI](https://crates.io/crates/mfs-cli)
112
+ and the generated SDKs are just clients of this server.
113
+
114
+ - **Project & docs:** https://zilliztech.github.io/mfs/
115
+ - **Source:** https://github.com/zilliztech/mfs
116
+
117
+ ## Install
118
+
119
+ ```bash
120
+ pip install mfs-server # core + local ONNX embeddings, Milvus Lite, SQLite
121
+ pip install "mfs-server[all-connectors]" # add every connector's SDK
122
+ pip install "mfs-server[pg,s3,slack]" # or just the connectors you need
123
+ ```
124
+
125
+ `pipx install mfs-server` works too if you want it isolated. The defaults run
126
+ fully offline: local ONNX (BGE) embeddings, Milvus Lite, and SQLite, with no
127
+ cloud account or API key.
128
+
129
+ ## Run
130
+
131
+ ```bash
132
+ mfs-server setup # optional: write $MFS_HOME/server.toml (defaults to ~/.mfs)
133
+ mfs-server run # all-in-one: API + inline task processing on 127.0.0.1:13619
134
+ ```
135
+
136
+ For a horizontally scaled deployment, split the roles:
137
+
138
+ ```bash
139
+ mfs-server api # HTTP control plane only
140
+ mfs-server worker --concurrency auto # queue worker(s)
141
+ ```
142
+
143
+ Point the `mfs` CLI (or an SDK) at the server and you're ready to
144
+ `mfs add` a source and `mfs search` it. See the
145
+ [Quickstart](https://zilliztech.github.io/mfs/getting-started/) for the full
146
+ first run.
147
+
148
+ ## Optional native acceleration
149
+
150
+ A few hot paths — the gitignore directory walk, parallel content hashing,
151
+ linear grep, and `tail` — have an optional PyO3 extension (`mfs-server-rs`). The
152
+ server falls back to a pure-Python implementation when it isn't installed, so it
153
+ is never required; it only makes large inputs faster. See
154
+ [Deployment](https://zilliztech.github.io/mfs/deployment/) for how to build it
155
+ in.
156
+
157
+ ## License
158
+
159
+ Apache-2.0.
@@ -0,0 +1,57 @@
1
+ # mfs-server
2
+
3
+ The server side of **MFS — Multi-source File-like Search**: a context engine
4
+ that turns code, docs, messages, databases, and object stores into one
5
+ file-like, searchable namespace for AI agents and developers.
6
+
7
+ `mfs-server` is the heavy half of MFS. It owns the connectors, the ingest
8
+ pipeline, the vector index, and the storage — and exposes everything over an
9
+ HTTP `/v1` control plane. The thin [`mfs` CLI](https://crates.io/crates/mfs-cli)
10
+ and the generated SDKs are just clients of this server.
11
+
12
+ - **Project & docs:** https://zilliztech.github.io/mfs/
13
+ - **Source:** https://github.com/zilliztech/mfs
14
+
15
+ ## Install
16
+
17
+ ```bash
18
+ pip install mfs-server # core + local ONNX embeddings, Milvus Lite, SQLite
19
+ pip install "mfs-server[all-connectors]" # add every connector's SDK
20
+ pip install "mfs-server[pg,s3,slack]" # or just the connectors you need
21
+ ```
22
+
23
+ `pipx install mfs-server` works too if you want it isolated. The defaults run
24
+ fully offline: local ONNX (BGE) embeddings, Milvus Lite, and SQLite, with no
25
+ cloud account or API key.
26
+
27
+ ## Run
28
+
29
+ ```bash
30
+ mfs-server setup # optional: write $MFS_HOME/server.toml (defaults to ~/.mfs)
31
+ mfs-server run # all-in-one: API + inline task processing on 127.0.0.1:13619
32
+ ```
33
+
34
+ For a horizontally scaled deployment, split the roles:
35
+
36
+ ```bash
37
+ mfs-server api # HTTP control plane only
38
+ mfs-server worker --concurrency auto # queue worker(s)
39
+ ```
40
+
41
+ Point the `mfs` CLI (or an SDK) at the server and you're ready to
42
+ `mfs add` a source and `mfs search` it. See the
43
+ [Quickstart](https://zilliztech.github.io/mfs/getting-started/) for the full
44
+ first run.
45
+
46
+ ## Optional native acceleration
47
+
48
+ A few hot paths — the gitignore directory walk, parallel content hashing,
49
+ linear grep, and `tail` — have an optional PyO3 extension (`mfs-server-rs`). The
50
+ server falls back to a pure-Python implementation when it isn't installed, so it
51
+ is never required; it only makes large inputs faster. See
52
+ [Deployment](https://zilliztech.github.io/mfs/deployment/) for how to build it
53
+ in.
54
+
55
+ ## License
56
+
57
+ Apache-2.0.
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
3
+ "spaces": 2,
4
+ "generator-cli": {
5
+ "version": "7.22.0"
6
+ }
7
+ }
@@ -0,0 +1,135 @@
1
+ [project]
2
+ name = "mfs-server"
3
+ version = "0.4.0"
4
+ description = "MFS server — Multi-source File-like Search (heavy side: connectors, ingest, retrieval, storage)"
5
+ readme = "README.md"
6
+ license = "Apache-2.0"
7
+ authors = [
8
+ { name = "Cheney Zhang", email = "chen.zhang@zilliz.com" },
9
+ ]
10
+ requires-python = ">=3.10"
11
+ classifiers = [
12
+ "Programming Language :: Python :: 3.10",
13
+ "Programming Language :: Python :: 3.11",
14
+ "Programming Language :: Python :: 3.12",
15
+ "Programming Language :: Python :: 3.13",
16
+ "License :: OSI Approved :: Apache Software License",
17
+ "Operating System :: OS Independent",
18
+ ]
19
+ dependencies = [
20
+ "pymilvus>=2.5",
21
+ "openai>=1.40",
22
+ "fastapi>=0.110",
23
+ "uvicorn[standard]>=0.27",
24
+ "pydantic>=2.6",
25
+ "pydantic-settings>=2.2",
26
+ "httpx>=0.27",
27
+ "aiosqlite>=0.20",
28
+ "tomli>=2.0; python_version < '3.11'",
29
+ "tiktoken>=0.7",
30
+ "python-multipart>=0.0.9",
31
+ "chonkie>=0.4",
32
+ "markitdown[all]>=0.0.1",
33
+ "milvus-lite>=3.0",
34
+ "pathspec>=1.1.1",
35
+ "aiomysql>=0.3.2",
36
+ "pymongo>=4.13",
37
+ # Default embedding backend is local ONNX (BGE) — no API key required.
38
+ # See config.py EmbeddingConfig defaults. Provider can be switched to
39
+ # "openai" / etc via the setup wizard.
40
+ "onnxruntime>=1.17",
41
+ "huggingface-hub>=0.20",
42
+ "tokenizers>=0.15",
43
+ "numpy>=1.24",
44
+ # Wizard UI (mfs-server setup / connector add): colored panels, hints
45
+ # via rich; arrow-key selects + validators via questionary. Both have
46
+ # auto-detect for TTY/non-TTY and fall back gracefully.
47
+ "rich>=13",
48
+ "questionary>=2",
49
+ ]
50
+
51
+ [project.optional-dependencies]
52
+ pg = ["asyncpg>=0.29"]
53
+ web = ["aiohttp>=3.9", "beautifulsoup4>=4.12"]
54
+ github = ["httpx>=0.27"]
55
+ # SaaS / message / object-store connectors (each pulls its official SDK)
56
+ slack = ["slack_sdk>=3.27"]
57
+ notion = ["notion-client>=2.2"]
58
+ jira = ["atlassian-python-api>=3.41"]
59
+ hubspot = ["hubspot-api-client>=11.0"]
60
+ bigquery = ["google-cloud-bigquery>=3.20"]
61
+ snowflake = ["snowflake-connector-python>=3.10"]
62
+ s3 = ["aioboto3>=13.0"]
63
+ google = ["google-api-python-client>=2.120", "google-auth>=2.29"] # gdrive + gmail
64
+ feishu = ["lark-oapi>=1.2"]
65
+ # discord/linear/zendesk use httpx only (already a core dep)
66
+ all-connectors = [
67
+ "asyncpg>=0.29", "aiohttp>=3.9", "beautifulsoup4>=4.12",
68
+ "slack_sdk>=3.27", "notion-client>=2.2", "atlassian-python-api>=3.41",
69
+ "hubspot-api-client>=11.0",
70
+ "google-cloud-bigquery>=3.20", "snowflake-connector-python>=3.10",
71
+ "aioboto3>=13.0", "google-api-python-client>=2.120", "google-auth>=2.29",
72
+ "lark-oapi>=1.2",
73
+ ]
74
+ dev = [
75
+ "pytest>=8.0",
76
+ "pytest-asyncio>=0.23",
77
+ "ruff>=0.6",
78
+ ]
79
+ # Kept as an alias for back-compat; the ONNX embedding stack is now a core
80
+ # dep so this extra is effectively a no-op. Existing
81
+ # `pip install mfs-server[embedding-onnx]` commands still work.
82
+ embedding-onnx = []
83
+
84
+ # Alternate embedding providers (each lazily imported by
85
+ # mfs_server.common.embeddings).
86
+ gemini = ["google-genai>=0.3"] # gemini embedding + LLM (vision-capable)
87
+ voyage = ["voyageai>=0.3"] # voyage-3-lite etc.
88
+ ollama = ["ollama>=0.4"] # local LLM/embedding via Ollama server
89
+ local = ["sentence-transformers>=3.0", "einops>=0.8"] # CPU/GPU sentence-transformers
90
+
91
+ # Alternate LLM providers for summary / VLM (mfs_server.common.llm).
92
+ anthropic = ["anthropic>=0.40"] # claude-sonnet-* (text + vision)
93
+
94
+ # Convenience bundle: every provider (text + vision LLMs and remote embeddings).
95
+ # Excludes 'local' (sentence-transformers pulls torch ~2 GB).
96
+ all-providers = [
97
+ "google-genai>=0.3",
98
+ "voyageai>=0.3",
99
+ "ollama>=0.4",
100
+ "anthropic>=0.40",
101
+ ]
102
+
103
+ [project.scripts]
104
+ mfs-server = "mfs_server.server.__main__:main"
105
+
106
+ [project.urls]
107
+ Homepage = "https://github.com/zilliztech/mfs"
108
+ Repository = "https://github.com/zilliztech/mfs"
109
+ Issues = "https://github.com/zilliztech/mfs/issues"
110
+
111
+ [build-system]
112
+ requires = ["hatchling"]
113
+ build-backend = "hatchling.build"
114
+
115
+ [tool.hatch.build.targets.wheel]
116
+ packages = ["src/mfs_server"]
117
+
118
+ [tool.ruff]
119
+ line-length = 100
120
+ target-version = "py310"
121
+
122
+ [tool.pytest.ini_options]
123
+ asyncio_mode = "auto"
124
+ testpaths = ["tests"]
125
+
126
+ # Native hot-path acceleration lives in server-rs/ (PyO3, built with maturin:
127
+ # `cd server-rs && maturin develop --release`). It is OPTIONAL at runtime —
128
+ # mfs_server.common.accel falls back to pure Python when the wheel isn't installed.
129
+ # It is not published to PyPI; build it locally to opt in (see docs/deployment.md).
130
+
131
+ [dependency-groups]
132
+ dev = [
133
+ "fpdf2>=2.8.7",
134
+ "maturin>=1.13.3",
135
+ ]
File without changes
File without changes