provekit 0.5.0__tar.gz → 0.6.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 (78) hide show
  1. {provekit-0.5.0 → provekit-0.6.0}/PKG-INFO +1 -1
  2. provekit-0.6.0/provekit/demo.py +118 -0
  3. {provekit-0.5.0 → provekit-0.6.0}/provekit.egg-info/PKG-INFO +1 -1
  4. {provekit-0.5.0 → provekit-0.6.0}/provekit.egg-info/SOURCES.txt +1 -0
  5. {provekit-0.5.0 → provekit-0.6.0}/provekit.egg-info/entry_points.txt +1 -0
  6. {provekit-0.5.0 → provekit-0.6.0}/pyproject.toml +4 -2
  7. {provekit-0.5.0 → provekit-0.6.0}/README.md +0 -0
  8. {provekit-0.5.0 → provekit-0.6.0}/provekit/__init__.py +0 -0
  9. {provekit-0.5.0 → provekit-0.6.0}/provekit/auto.py +0 -0
  10. {provekit-0.5.0 → provekit-0.6.0}/provekit/config.py +0 -0
  11. {provekit-0.5.0 → provekit-0.6.0}/provekit/database.py +0 -0
  12. {provekit-0.5.0 → provekit-0.6.0}/provekit/eval.py +0 -0
  13. {provekit-0.5.0 → provekit-0.6.0}/provekit/main.py +0 -0
  14. {provekit-0.5.0 → provekit-0.6.0}/provekit/mcp.py +0 -0
  15. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/env.py +0 -0
  16. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/script.py.mako +0 -0
  17. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/versions/9d2c06bfa4e6_baseline.py +0 -0
  18. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/versions/a1b2c3d4e5f6_feedback_sessions.py +0 -0
  19. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/versions/b2c3d4e5f6a7_datasets.py +0 -0
  20. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/versions/c3d4e5f6a7b8_experiments.py +0 -0
  21. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/versions/d4e5f6a7b8c9_alerts.py +0 -0
  22. {provekit-0.5.0 → provekit-0.6.0}/provekit/migrations/versions/e5f6a7b8c9d0_admin.py +0 -0
  23. {provekit-0.5.0 → provekit-0.6.0}/provekit/models.py +0 -0
  24. {provekit-0.5.0 → provekit-0.6.0}/provekit/observability.py +0 -0
  25. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/__init__.py +0 -0
  26. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/admin.py +0 -0
  27. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/alerts.py +0 -0
  28. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/apikeys.py +0 -0
  29. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/auth.py +0 -0
  30. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/datasets.py +0 -0
  31. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/experiments.py +0 -0
  32. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/metrics.py +0 -0
  33. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/projects.py +0 -0
  34. {provekit-0.5.0 → provekit-0.6.0}/provekit/routers/traces.py +0 -0
  35. {provekit-0.5.0 → provekit-0.6.0}/provekit/scorers.py +0 -0
  36. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/__init__.py +0 -0
  37. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/apikey.py +0 -0
  38. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/auth.py +0 -0
  39. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/deploy.py +0 -0
  40. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/email.py +0 -0
  41. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/limits.py +0 -0
  42. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/netguard.py +0 -0
  43. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/otel.py +0 -0
  44. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/redact.py +0 -0
  45. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/sealing.py +0 -0
  46. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/share.py +0 -0
  47. {provekit-0.5.0 → provekit-0.6.0}/provekit/services/workspace.py +0 -0
  48. {provekit-0.5.0 → provekit-0.6.0}/provekit/trace.py +0 -0
  49. {provekit-0.5.0 → provekit-0.6.0}/provekit.egg-info/dependency_links.txt +0 -0
  50. {provekit-0.5.0 → provekit-0.6.0}/provekit.egg-info/requires.txt +0 -0
  51. {provekit-0.5.0 → provekit-0.6.0}/provekit.egg-info/top_level.txt +0 -0
  52. {provekit-0.5.0 → provekit-0.6.0}/setup.cfg +0 -0
  53. {provekit-0.5.0 → provekit-0.6.0}/tests/test_account_recovery.py +0 -0
  54. {provekit-0.5.0 → provekit-0.6.0}/tests/test_admin.py +0 -0
  55. {provekit-0.5.0 → provekit-0.6.0}/tests/test_alerts.py +0 -0
  56. {provekit-0.5.0 → provekit-0.6.0}/tests/test_apikeys.py +0 -0
  57. {provekit-0.5.0 → provekit-0.6.0}/tests/test_auth.py +0 -0
  58. {provekit-0.5.0 → provekit-0.6.0}/tests/test_auth_hardening.py +0 -0
  59. {provekit-0.5.0 → provekit-0.6.0}/tests/test_autoinstrument.py +0 -0
  60. {provekit-0.5.0 → provekit-0.6.0}/tests/test_cov_limits_auth.py +0 -0
  61. {provekit-0.5.0 → provekit-0.6.0}/tests/test_coverage_extra.py +0 -0
  62. {provekit-0.5.0 → provekit-0.6.0}/tests/test_datasets.py +0 -0
  63. {provekit-0.5.0 → provekit-0.6.0}/tests/test_eval.py +0 -0
  64. {provekit-0.5.0 → provekit-0.6.0}/tests/test_experiments.py +0 -0
  65. {provekit-0.5.0 → provekit-0.6.0}/tests/test_feedback.py +0 -0
  66. {provekit-0.5.0 → provekit-0.6.0}/tests/test_hardening.py +0 -0
  67. {provekit-0.5.0 → provekit-0.6.0}/tests/test_key_read_api.py +0 -0
  68. {provekit-0.5.0 → provekit-0.6.0}/tests/test_mcp.py +0 -0
  69. {provekit-0.5.0 → provekit-0.6.0}/tests/test_metrics.py +0 -0
  70. {provekit-0.5.0 → provekit-0.6.0}/tests/test_netguard.py +0 -0
  71. {provekit-0.5.0 → provekit-0.6.0}/tests/test_observability.py +0 -0
  72. {provekit-0.5.0 → provekit-0.6.0}/tests/test_otel.py +0 -0
  73. {provekit-0.5.0 → provekit-0.6.0}/tests/test_projects.py +0 -0
  74. {provekit-0.5.0 → provekit-0.6.0}/tests/test_redact.py +0 -0
  75. {provekit-0.5.0 → provekit-0.6.0}/tests/test_scorers.py +0 -0
  76. {provekit-0.5.0 → provekit-0.6.0}/tests/test_share.py +0 -0
  77. {provekit-0.5.0 → provekit-0.6.0}/tests/test_trace_sdk.py +0 -0
  78. {provekit-0.5.0 → provekit-0.6.0}/tests/test_traces_tree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: provekit
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: Drop-in agent tracing — add one decorator, get a project key, review every run your agent makes.
5
5
  Author: ProveKit contributors
6
6
  License: MIT
@@ -0,0 +1,118 @@
1
+ """`provekit-demo` — a zero-setup smoke test.
2
+
3
+ Sends a small gallery of traces to your portal so a fresh install + project key can be
4
+ verified in ~10 seconds. No LLM key needed: the model is mocked, but recorded as a real
5
+ gen_ai LLM span (model, tokens, temperature) so the portal renders it as a proper chat call.
6
+
7
+ pip install "provekit[trace]"
8
+ export PROVEKIT_API_KEY=pk_... # a project key from the portal
9
+ export PROVEKIT_ENDPOINT=https://your-provekit-host
10
+ provekit-demo
11
+
12
+ For richer, framework-native examples (LangGraph, a deep multi-agent orchestrator) see the
13
+ examples/ folder: https://github.com/MobirizerServices/ProveKit/tree/main/examples
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import argparse
18
+ import logging
19
+ import os
20
+ import time
21
+
22
+ from . import trace as pk
23
+
24
+ log = logging.getLogger("provekit-demo")
25
+
26
+ _KB = {
27
+ "refund": "I've started your refund — it lands in 3–5 business days.",
28
+ "vpn": "Forget the VPN profile and re-add it; that clears the stale auth token.",
29
+ "pricing": "The Pro plan is $49/seat/mo; annual billing saves ~15%.",
30
+ "export": "Settings → Data → Export builds a downloadable JSON of your workspace.",
31
+ }
32
+
33
+
34
+ def _mock_llm(span, model: str, prompt: str, temperature: float = 0.7) -> str:
35
+ """A deterministic, offline stand-in for an LLM — recorded as a real gen_ai LLM span."""
36
+ key = next((k for k in _KB if k in prompt.lower()), None)
37
+ answer = _KB.get(key, "Thanks for reaching out — a teammate will follow up shortly.")
38
+ if span:
39
+ span.set_attribute("gen_ai.request.model", model)
40
+ span.set_attribute("gen_ai.request.temperature", temperature)
41
+ span.set_attribute("gen_ai.input.messages", prompt)
42
+ span.set_attribute("gen_ai.usage.input_tokens", 40 + len(prompt) // 4)
43
+ span.set_attribute("gen_ai.usage.output_tokens", 12 + len(answer) // 4)
44
+ span.set_attribute("gen_ai.output.messages", answer)
45
+ span.set_attribute("gen_ai.response.finish_reasons", "stop")
46
+ time.sleep(0.01)
47
+ return answer
48
+
49
+
50
+ @pk.trace(name="support-agent")
51
+ def _support_agent(question: str, model: str = "gpt-4o") -> str:
52
+ with pk.span("retrieve") as s:
53
+ if s:
54
+ s.set_attribute("gen_ai.tool.name", "kb_search")
55
+ s.set_attribute("gen_ai.input.messages", question)
56
+ log.info("retrieved 3 candidate docs")
57
+ with pk.span("chat") as s:
58
+ answer = _mock_llm(s, model, question)
59
+ pk.score("helpfulness", score=0.9, comment="demo auto-score")
60
+ return answer
61
+
62
+
63
+ @pk.trace(name="support-agent", session_id="conv-demo-1")
64
+ def _support_turn(question: str) -> str:
65
+ with pk.span("chat") as s:
66
+ return _mock_llm(s, "gpt-4o-mini", question)
67
+
68
+
69
+ @pk.trace(name="flaky-agent")
70
+ def _flaky_agent(question: str) -> str:
71
+ with pk.span("call-upstream") as s:
72
+ if s:
73
+ s.set_attribute("gen_ai.tool.name", "billing_api")
74
+ raise RuntimeError("upstream billing_api returned 503")
75
+
76
+
77
+ def main(argv=None) -> None:
78
+ p = argparse.ArgumentParser(
79
+ prog="provekit-demo",
80
+ description="Send a small gallery of demo traces to your ProveKit portal (no LLM key needed).")
81
+ p.add_argument("--api-key", default=os.environ.get("PROVEKIT_API_KEY"),
82
+ help="project key (default: $PROVEKIT_API_KEY)")
83
+ p.add_argument("--endpoint", default=os.environ.get("PROVEKIT_ENDPOINT"),
84
+ help="portal URL (default: $PROVEKIT_ENDPOINT)")
85
+ args = p.parse_args(argv)
86
+ logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
87
+
88
+ if not (args.api_key and args.endpoint):
89
+ raise SystemExit("Set PROVEKIT_API_KEY and PROVEKIT_ENDPOINT (or pass --api-key / --endpoint).\n"
90
+ "Grab a key from your portal → Project keys.")
91
+ if not pk.configure(api_key=args.api_key, endpoint=args.endpoint):
92
+ raise SystemExit("ProveKit could not start — check your key/endpoint.")
93
+
94
+ for q, model in (("I want a refund for my order", "gpt-4o"),
95
+ ("VPN won't connect after the update", "gpt-4o"),
96
+ ("What's your pricing for a 20-person team?", "claude-sonnet-5"),
97
+ ("How do I export my data?", "gpt-4o-mini")):
98
+ print("→", _support_agent(q, model=model)[:60])
99
+
100
+ # a two-turn conversation (same session) so sessions light up
101
+ _support_turn("Is the Pro plan monthly?")
102
+ _support_turn("And does annual billing save money?")
103
+
104
+ # a failed run so the dashboard error-rate + a red trace show up
105
+ try:
106
+ _flaky_agent("charge dispute")
107
+ except RuntimeError as exc:
108
+ print("✗ flaky-agent failed as designed:", exc)
109
+
110
+ from opentelemetry import trace as _t
111
+ provider = _t.get_tracer_provider()
112
+ if hasattr(provider, "force_flush"):
113
+ provider.force_flush()
114
+ print("\nDone — open your ProveKit portal:", args.endpoint.rstrip("/") + "/traces")
115
+
116
+
117
+ if __name__ == "__main__":
118
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: provekit
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: Drop-in agent tracing — add one decorator, get a project key, review every run your agent makes.
5
5
  Author: ProveKit contributors
6
6
  License: MIT
@@ -4,6 +4,7 @@ provekit/__init__.py
4
4
  provekit/auto.py
5
5
  provekit/config.py
6
6
  provekit/database.py
7
+ provekit/demo.py
7
8
  provekit/eval.py
8
9
  provekit/main.py
9
10
  provekit/mcp.py
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
+ provekit-demo = provekit.demo:main
2
3
  provekit-mcp = provekit.mcp:main
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "provekit"
3
- version = "0.5.0"
3
+ version = "0.6.0"
4
4
  description = "Drop-in agent tracing — add one decorator, get a project key, review every run your agent makes."
5
5
  requires-python = ">=3.11"
6
6
  readme = "README.md"
@@ -34,6 +34,8 @@ dependencies = [
34
34
  [project.scripts]
35
35
  # The MCP debug server. Needs the [mcp] extra installed to run.
36
36
  provekit-mcp = "provekit.mcp:main"
37
+ # A zero-setup smoke test: `provekit-demo` sends a gallery of traces to your portal.
38
+ provekit-demo = "provekit.demo:main"
37
39
 
38
40
  [project.urls]
39
41
  Homepage = "https://github.com/MobirizerServices/ProveKit"
@@ -125,7 +127,7 @@ provekit = [
125
127
  source = ["provekit"]
126
128
  # Migrations are one-shot schema DDL replayed by Alembic, not application logic; they live
127
129
  # inside the package so wheels ship them, which would otherwise drag them into the report.
128
- omit = ["provekit/migrations/*"]
130
+ omit = ["provekit/migrations/*", "provekit/demo.py"]
129
131
 
130
132
  [tool.coverage.report]
131
133
  # CI gates on this. Set below the current ~97% to leave headroom for cross-interpreter
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes