serviette 0.1.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 (51) hide show
  1. serviette/__init__.py +10 -0
  2. serviette/cli.py +93 -0
  3. serviette/config/__init__.py +49 -0
  4. serviette/config/schema.py +714 -0
  5. serviette/demo/__init__.py +250 -0
  6. serviette/demo/corpus/faq.md +12 -0
  7. serviette/demo/corpus/onboarding.md +12 -0
  8. serviette/demo/corpus/overview.md +10 -0
  9. serviette/demo/corpus/pricing.md +12 -0
  10. serviette/demo/corpus/release-notes.md +10 -0
  11. serviette/frontend/__init__.py +1 -0
  12. serviette/frontend/config.py +13 -0
  13. serviette/frontend/main.py +129 -0
  14. serviette/frontend/static/index.html +297 -0
  15. serviette/indexer/__init__.py +6 -0
  16. serviette/indexer/config.py +13 -0
  17. serviette/indexer/fingerprint.py +172 -0
  18. serviette/indexer/graph.py +799 -0
  19. serviette/indexer/main.py +79 -0
  20. serviette/indexer/prepare.py +380 -0
  21. serviette/indexer/sources.py +299 -0
  22. serviette/quickstart/__init__.py +5 -0
  23. serviette/quickstart/wizard.py +654 -0
  24. serviette/server/__init__.py +1 -0
  25. serviette/server/accessors/__init__.py +53 -0
  26. serviette/server/accessors/abstract.py +77 -0
  27. serviette/server/accessors/chroma.py +127 -0
  28. serviette/server/accessors/duckdb.py +194 -0
  29. serviette/server/accessors/milvus.py +147 -0
  30. serviette/server/accessors/mongodb.py +121 -0
  31. serviette/server/accessors/pgvector.py +134 -0
  32. serviette/server/accessors/pinecone.py +108 -0
  33. serviette/server/accessors/qdrant.py +126 -0
  34. serviette/server/accessors/weaviate.py +126 -0
  35. serviette/server/bm25.py +77 -0
  36. serviette/server/config.py +13 -0
  37. serviette/server/decompose.py +50 -0
  38. serviette/server/embedder.py +226 -0
  39. serviette/server/hybrid.py +116 -0
  40. serviette/server/llm.py +163 -0
  41. serviette/server/main.py +315 -0
  42. serviette/server/ranking.py +118 -0
  43. serviette/server/reranker.py +158 -0
  44. serviette/testing.py +38 -0
  45. serviette/up.py +264 -0
  46. serviette-0.1.0.dist-info/METADATA +516 -0
  47. serviette-0.1.0.dist-info/RECORD +51 -0
  48. serviette-0.1.0.dist-info/WHEEL +5 -0
  49. serviette-0.1.0.dist-info/entry_points.txt +2 -0
  50. serviette-0.1.0.dist-info/licenses/LICENSE +21 -0
  51. serviette-0.1.0.dist-info/top_level.txt +1 -0
serviette/__init__.py ADDED
@@ -0,0 +1,10 @@
1
+ """serviette — a universal, no-code RAG server built on the Pathway Live Data Framework.
2
+
3
+ The project name is intentionally kept in a single constant so a rename only
4
+ requires a find-and-replace across files plus updating ``APP_NAME`` here.
5
+ """
6
+
7
+ APP_NAME = "serviette"
8
+ __version__ = "0.1.0"
9
+
10
+ __all__ = ["APP_NAME", "__version__"]
serviette/cli.py ADDED
@@ -0,0 +1,93 @@
1
+ """Single ``serviette`` entrypoint dispatching all subcommands.
2
+
3
+ Subcommands:
4
+ serviette indexer --config FILE Build & run the Pathway indexing graph
5
+ serviette server --config FILE Start the FastAPI retrieval/RAG server
6
+ serviette up --config FILE Run indexer + server together (dev/demo)
7
+ serviette quickstart Interactive config-generation wizard
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import argparse
13
+ import sys
14
+
15
+ from serviette import APP_NAME, __version__
16
+
17
+ _OLD_PATHWAY_HINT = (
18
+ "Your installed pathway ({version}) predates the vector-store connectors "
19
+ "serviette needs (pathway >= 0.32.1). Upgrade it in this environment:\n\n"
20
+ " pip install -U 'pathway>=0.32.1'\n"
21
+ )
22
+
23
+
24
+ def _ensure_pathway_connectors() -> None:
25
+ """Fail with instructions, not an AttributeError, on an old pathway.
26
+
27
+ Engine-facing commands (indexer/up/demo) need the vector-store output
28
+ connectors that shipped in pathway 0.32.1; on an older install the first
29
+ symptom used to be an opaque crash deep in the stack.
30
+ """
31
+
32
+ import pathway as pw
33
+
34
+ if not hasattr(pw.io, "duckdb"):
35
+ raise SystemExit(_OLD_PATHWAY_HINT.format(version=pw.__version__))
36
+
37
+
38
+ def main(argv: list[str] | None = None) -> None:
39
+ argv = list(sys.argv[1:] if argv is None else argv)
40
+
41
+ parser = argparse.ArgumentParser(prog=APP_NAME, description=__doc__)
42
+ parser.add_argument("--version", action="version", version=f"{APP_NAME} {__version__}")
43
+ sub = parser.add_subparsers(dest="command", required=True)
44
+ sub.add_parser("indexer", add_help=False, help="Run the indexer")
45
+ sub.add_parser("server", add_help=False, help="Run the server")
46
+ sub.add_parser("up", add_help=False, help="Run indexer + server together")
47
+ sub.add_parser("demo", add_help=False, help="Zero-to-chat demo on a bundled corpus")
48
+ sub.add_parser("frontend", add_help=False, help="Run the web chat frontend")
49
+ sub.add_parser("quickstart", add_help=False, help="Interactive config wizard")
50
+
51
+ # Parse only the first token so each subcommand owns the rest of argv.
52
+ args, rest = parser.parse_known_args(argv)
53
+
54
+ if args.command in ("indexer", "up", "demo"):
55
+ _ensure_pathway_connectors()
56
+ if args.command == "indexer":
57
+ from serviette.indexer.main import main as indexer_main
58
+
59
+ indexer_main(rest)
60
+ elif args.command == "server":
61
+ from serviette.server.config import load_server_config
62
+ from serviette.server.main import run
63
+
64
+ server_args = _parse_config_arg("server", rest)
65
+ run(load_server_config(server_args.config))
66
+ elif args.command == "up":
67
+ from serviette.up import main as up_main
68
+
69
+ up_main(rest)
70
+ elif args.command == "demo":
71
+ from serviette.demo import main as demo_main
72
+
73
+ demo_main(rest)
74
+ elif args.command == "frontend":
75
+ from serviette.frontend.config import load_frontend_config
76
+ from serviette.frontend.main import run
77
+
78
+ frontend_args = _parse_config_arg("frontend", rest)
79
+ run(load_frontend_config(frontend_args.config))
80
+ elif args.command == "quickstart":
81
+ from serviette.quickstart.wizard import main as quickstart_main
82
+
83
+ quickstart_main(rest)
84
+
85
+
86
+ def _parse_config_arg(prog: str, rest: list[str]) -> argparse.Namespace:
87
+ p = argparse.ArgumentParser(prog=f"{APP_NAME} {prog}")
88
+ p.add_argument("--config", required=True, help="Path to the YAML config file")
89
+ return p.parse_args(rest)
90
+
91
+
92
+ if __name__ == "__main__":
93
+ main()
@@ -0,0 +1,49 @@
1
+ """Shared configuration package for serviette."""
2
+
3
+ from serviette.config.schema import (
4
+ ChromaConfig,
5
+ DuckDbConfig,
6
+ EmbedderConfig,
7
+ FrontendConfig,
8
+ FsSource,
9
+ GDriveSource,
10
+ LLMConfig,
11
+ MilvusConfig,
12
+ MongoDbConfig,
13
+ PersistenceConfig,
14
+ PgVectorConfig,
15
+ PineconeConfig,
16
+ QdrantConfig,
17
+ S3Source,
18
+ ServerConfig,
19
+ ServietteConfig,
20
+ SharePointSource,
21
+ Source,
22
+ SplitterConfig,
23
+ WeaviateConfig,
24
+ load_config,
25
+ )
26
+
27
+ __all__ = [
28
+ "ChromaConfig",
29
+ "DuckDbConfig",
30
+ "EmbedderConfig",
31
+ "FrontendConfig",
32
+ "FsSource",
33
+ "GDriveSource",
34
+ "LLMConfig",
35
+ "MilvusConfig",
36
+ "MongoDbConfig",
37
+ "PersistenceConfig",
38
+ "PgVectorConfig",
39
+ "PineconeConfig",
40
+ "QdrantConfig",
41
+ "S3Source",
42
+ "ServerConfig",
43
+ "ServietteConfig",
44
+ "SharePointSource",
45
+ "Source",
46
+ "SplitterConfig",
47
+ "WeaviateConfig",
48
+ "load_config",
49
+ ]