semanticembed 0.7.2__tar.gz → 0.7.3__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 (95) hide show
  1. semanticembed-0.7.3/.github/ISSUE_TEMPLATE/bug_report.yml +67 -0
  2. semanticembed-0.7.3/.github/ISSUE_TEMPLATE/config.yml +10 -0
  3. semanticembed-0.7.3/.github/ISSUE_TEMPLATE/feature_request.yml +48 -0
  4. semanticembed-0.7.3/.github/workflows/ci.yml +59 -0
  5. semanticembed-0.7.3/.gitignore +22 -0
  6. {semanticembed-0.7.2 → semanticembed-0.7.3}/CHANGELOG.md +19 -0
  7. semanticembed-0.7.3/CODE_OF_CONDUCT.md +43 -0
  8. semanticembed-0.7.3/CONTRIBUTING.md +70 -0
  9. semanticembed-0.7.3/LICENSE-FAQ.md +106 -0
  10. {semanticembed-0.7.2 → semanticembed-0.7.3}/PKG-INFO +93 -45
  11. {semanticembed-0.7.2 → semanticembed-0.7.3}/README.md +91 -44
  12. semanticembed-0.7.3/SECURITY.md +39 -0
  13. {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/api_reference.md +242 -12
  14. semanticembed-0.7.3/docs/input_format.md +173 -0
  15. {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/license_keys.md +2 -1
  16. semanticembed-0.7.3/docs/validation_methodology.md +198 -0
  17. semanticembed-0.7.3/examples/README.md +64 -0
  18. semanticembed-0.7.3/examples/autogen_codereview.py +61 -0
  19. semanticembed-0.7.3/examples/crewai_content_pipeline.py +63 -0
  20. semanticembed-0.7.3/examples/langgraph_research_agent.py +74 -0
  21. semanticembed-0.7.3/huggingface/.gitignore +5 -0
  22. semanticembed-0.7.3/huggingface/DEPLOY.md +113 -0
  23. semanticembed-0.7.3/huggingface/README.md +97 -0
  24. semanticembed-0.7.3/huggingface/app.py +452 -0
  25. semanticembed-0.7.3/huggingface/build.sh +13 -0
  26. semanticembed-0.7.3/huggingface/examples/autogen_codereview.py +61 -0
  27. semanticembed-0.7.3/huggingface/examples/boutique.json +21 -0
  28. semanticembed-0.7.3/huggingface/examples/crewai_content.py +63 -0
  29. semanticembed-0.7.3/huggingface/examples/langgraph_research.py +74 -0
  30. semanticembed-0.7.3/huggingface/requirements.txt +3 -0
  31. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/04_bring_your_own.ipynb +8 -14
  32. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/05_ai_agent_pipelines.ipynb +1 -1
  33. {semanticembed-0.7.2 → semanticembed-0.7.3}/pyproject.toml +1 -1
  34. {semanticembed-0.7.2 → semanticembed-0.7.3}/skill/SKILL.md +5 -1
  35. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/__init__.py +1 -1
  36. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/README.md +8 -8
  37. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/extract.py +120 -62
  38. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract_ai.py +30 -0
  39. semanticembed-0.7.2/.gitignore +0 -11
  40. semanticembed-0.7.2/docs/input_format.md +0 -98
  41. {semanticembed-0.7.2 → semanticembed-0.7.3}/.claude/skills/analyze/SKILL.md +0 -0
  42. {semanticembed-0.7.2 → semanticembed-0.7.3}/.github/workflows/publish.yml +0 -0
  43. {semanticembed-0.7.2 → semanticembed-0.7.3}/LICENSE +0 -0
  44. {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/dimensions.md +0 -0
  45. {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/getting_started.md +0 -0
  46. {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/output_format.md +0 -0
  47. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/ai_agent_pipeline.json +0 -0
  48. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/cicd_pipeline.json +0 -0
  49. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/google_online_boutique.json +0 -0
  50. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/README.md +0 -0
  51. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/RadarChart.tsx +0 -0
  52. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/RiskTable.tsx +0 -0
  53. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/TopologySummary.tsx +0 -0
  54. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/useSemanticEmbed.ts +0 -0
  55. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/sample_pipeline.json +0 -0
  56. {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/weaveworks_sock_shop.json +0 -0
  57. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/01_quickstart.ipynb +0 -0
  58. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/02_dimensions.ipynb +0 -0
  59. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/03_drift_detection.ipynb +0 -0
  60. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/06_cicd_pipelines.ipynb +0 -0
  61. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/07_opentelemetry.ipynb +0 -0
  62. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/08_qwen_compression.ipynb +0 -0
  63. {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/qwen_compression_cookbook.py +0 -0
  64. {semanticembed-0.7.2 → semanticembed-0.7.3}/skill/SETUP.md +0 -0
  65. {semanticembed-0.7.2 → semanticembed-0.7.3}/skill/analyze.py +0 -0
  66. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/__init__.py +0 -0
  67. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/__main__.py +0 -0
  68. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/agent.py +0 -0
  69. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/gemini_agent.py +0 -0
  70. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/client.py +0 -0
  71. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/dedupe.py +0 -0
  72. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/exceptions.py +0 -0
  73. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/explain.py +0 -0
  74. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/find_edges.py +0 -0
  75. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/live.py +0 -0
  76. {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/models.py +0 -0
  77. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/__init__.py +0 -0
  78. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/autogen_app.py +0 -0
  79. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/cdk_app.py +0 -0
  80. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/crewai_app.py +0 -0
  81. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/docker-compose.yml +0 -0
  82. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/langgraph_app.py +0 -0
  83. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/pulumi_app.py +0 -0
  84. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/stack.yaml +0 -0
  85. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/trace_jaeger.json +0 -0
  86. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/trace_otlp.json +0 -0
  87. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/trace_zipkin.json +0 -0
  88. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_aclient.py +0 -0
  89. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_client.py +0 -0
  90. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_dedupe.py +0 -0
  91. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract.py +0 -0
  92. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract_iac.py +0 -0
  93. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract_otel.py +0 -0
  94. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_live.py +0 -0
  95. {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_skill.py +0 -0
@@ -0,0 +1,67 @@
1
+ name: Bug report
2
+ description: Report a bug in the SemanticEmbed SDK (parsers, client, live connectors, agent CLI).
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for taking the time to report a bug. Please fill in the fields below.
9
+ For algorithm/encoding/scoring questions, email jeffmurr@seas.upenn.edu — that
10
+ runs server-side and isn't part of this repository.
11
+
12
+ - type: input
13
+ id: version
14
+ attributes:
15
+ label: SDK version
16
+ description: Output of `python -c "import semanticembed; print(semanticembed.__version__)"`
17
+ placeholder: "0.7.2"
18
+ validations:
19
+ required: true
20
+
21
+ - type: input
22
+ id: python
23
+ attributes:
24
+ label: Python version
25
+ placeholder: "3.12"
26
+ validations:
27
+ required: true
28
+
29
+ - type: dropdown
30
+ id: surface
31
+ attributes:
32
+ label: Which part of the SDK?
33
+ options:
34
+ - encode / aencode (HTTP client)
35
+ - extract.from_* (deterministic parsers)
36
+ - live.from_* (Dynatrace / Honeycomb / Datadog)
37
+ - find_edges (LLM fallback)
38
+ - dedupe_edges
39
+ - semanticembed-agent / semanticembed-gemini-agent CLI
40
+ - explain / ask
41
+ - other
42
+ validations:
43
+ required: true
44
+
45
+ - type: textarea
46
+ id: reproduce
47
+ attributes:
48
+ label: Minimal reproduction
49
+ description: Smallest snippet that triggers the bug. Please include the input edges or the path to the file you're parsing.
50
+ render: python
51
+ validations:
52
+ required: true
53
+
54
+ - type: textarea
55
+ id: expected
56
+ attributes:
57
+ label: Expected behavior
58
+ validations:
59
+ required: true
60
+
61
+ - type: textarea
62
+ id: actual
63
+ attributes:
64
+ label: Actual behavior (with traceback)
65
+ render: shell
66
+ validations:
67
+ required: true
@@ -0,0 +1,10 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Algorithm / encoding / scoring questions
4
+ url: mailto:jeffmurr@seas.upenn.edu
5
+ about: |
6
+ The 6D encoding algorithm runs server-side and isn't part of this repository.
7
+ Email directly for questions about encoding math, risk thresholds, or scoring rules.
8
+ - name: License / commercial inquiries
9
+ url: mailto:jeffmurr@seas.upenn.edu
10
+ about: Pricing, paid-tier license keys, and commercial use questions.
@@ -0,0 +1,48 @@
1
+ name: Feature request
2
+ description: Request a new parser, live connector, or SDK improvement.
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Best fits for new features:
9
+ - **New `extract.from_*` parsers** — additional infrastructure formats, AI agent frameworks
10
+ - **New `live.from_*` connectors** — observability platforms (Lightstep, AppDynamics, New Relic, etc.)
11
+ - **Client improvements** — async, batching, caching, error handling
12
+
13
+ For changes to the encoding algorithm, risk thresholds, or scoring rules, please email
14
+ jeffmurr@seas.upenn.edu instead — those run server-side.
15
+
16
+ - type: dropdown
17
+ id: kind
18
+ attributes:
19
+ label: What kind of feature?
20
+ options:
21
+ - New extract.from_* parser
22
+ - New live.from_* connector
23
+ - Async / batching / caching improvement
24
+ - Error handling / retry behavior
25
+ - Documentation / example
26
+ - Other
27
+ validations:
28
+ required: true
29
+
30
+ - type: textarea
31
+ id: use_case
32
+ attributes:
33
+ label: Use case
34
+ description: What problem are you trying to solve? What's blocking you today?
35
+ validations:
36
+ required: true
37
+
38
+ - type: textarea
39
+ id: api_sketch
40
+ attributes:
41
+ label: Proposed API (optional)
42
+ description: A rough sketch of how you'd want to call it.
43
+ render: python
44
+
45
+ - type: textarea
46
+ id: alternatives
47
+ attributes:
48
+ label: Alternatives you've considered
@@ -0,0 +1,59 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ name: Test (${{ matrix.python-version }} on ${{ matrix.os }})
12
+ runs-on: ${{ matrix.os }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os: [ubuntu-latest]
17
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
18
+ include:
19
+ # Sanity check on Windows + macOS at one Python version
20
+ - os: windows-latest
21
+ python-version: "3.12"
22
+ - os: macos-latest
23
+ python-version: "3.12"
24
+
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+
28
+ - name: Set up Python ${{ matrix.python-version }}
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: ${{ matrix.python-version }}
32
+ cache: pip
33
+
34
+ - name: Install
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install -e '.[dev,extract]'
38
+
39
+ - name: Run pytest
40
+ run: pytest -q
41
+
42
+ build:
43
+ name: Build wheel + sdist
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+
48
+ - uses: actions/setup-python@v5
49
+ with:
50
+ python-version: "3.12"
51
+
52
+ - name: Install build tooling
53
+ run: python -m pip install --upgrade build twine
54
+
55
+ - name: Build
56
+ run: python -m build
57
+
58
+ - name: Twine check (verifies README renders on PyPI)
59
+ run: python -m twine check dist/*
@@ -0,0 +1,22 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.pyo
4
+ dist/
5
+ build/
6
+ *.egg-info/
7
+ .eggs/
8
+ .env
9
+ .venv/
10
+ *.egg
11
+ .ipynb_checkpoints/
12
+
13
+ # Local-only artifacts at repo root (canonical files are in docs/ or examples/)
14
+ /dimensions.md
15
+ /encoding_output.json
16
+ /*.html
17
+ /*.pdf
18
+
19
+ # Editor / OS noise
20
+ .idea/
21
+ .vscode/
22
+ .DS_Store
@@ -2,6 +2,25 @@
2
2
 
3
3
  All notable changes to the SemanticEmbed SDK.
4
4
 
5
+ ## 0.7.3 — Modern AutoGen + lenient edge parser
6
+
7
+ - `from_autogen` now recognizes the autogen-agentchat 0.4+ patterns:
8
+ `RoundRobinGroupChat([...])` (chain), `SelectorGroupChat([...])` (fully
9
+ connected), `Swarm([...])` (fully connected), and
10
+ `MagenticOneGroupChat([...])`. The legacy `GroupChat` + optional
11
+ `GroupChatManager` paths still work.
12
+ - `from_directory` auto-detects autogen-agentchat / autogen-core /
13
+ autogen-ext imports as well as the legacy `autogen` and `ag2` names.
14
+ - HF Space (`huggingface/app.py`):
15
+ - Edge-list parser now tolerates BOM, smart quotes, tabs / pipes /
16
+ semicolons as delimiters, comment lines, and arrow-list syntax
17
+ (`a -> b`, `a => b`, `a → b`).
18
+ - "No edges extracted" error is now mode-specific: lists exactly which
19
+ patterns the LangGraph / CrewAI / AutoGen parser detects, with a
20
+ pointer to the Edge-list mode as the fallback.
21
+ - README + Space landing copy: "Live dashboard" → "Demo dashboard"
22
+ (more accurate framing — it's a demo, not a production tool).
23
+
5
24
  ## 0.7.2 — Live-connector retry
6
25
 
7
26
  - All three live connectors (`from_dynatrace`, `from_honeycomb`, `from_datadog`)
@@ -0,0 +1,43 @@
1
+ # Code of Conduct
2
+
3
+ This project follows the [Contributor Covenant v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
4
+
5
+ ## Our Pledge
6
+
7
+ We pledge to make participation in this project a harassment-free
8
+ experience for everyone, regardless of age, body size, visible or
9
+ invisible disability, ethnicity, sex characteristics, gender identity
10
+ and expression, level of experience, education, socio-economic status,
11
+ nationality, personal appearance, race, religion, or sexual identity
12
+ and orientation.
13
+
14
+ ## Standards
15
+
16
+ Examples of behavior that contributes to a positive environment:
17
+
18
+ - Demonstrating empathy and kindness toward others
19
+ - Being respectful of differing opinions and viewpoints
20
+ - Giving and gracefully accepting constructive feedback
21
+ - Accepting responsibility for mistakes and learning from them
22
+
23
+ Examples of unacceptable behavior:
24
+
25
+ - Trolling, insulting, derogatory comments, or personal attacks
26
+ - Public or private harassment
27
+ - Publishing others' private information without permission
28
+ - Other conduct that could reasonably be considered inappropriate
29
+
30
+ ## Enforcement
31
+
32
+ Instances of unacceptable behavior may be reported to the maintainer at
33
+ **jeffmurr@seas.upenn.edu**. All complaints will be reviewed and
34
+ investigated promptly and fairly.
35
+
36
+ The maintainer is obligated to respect the privacy and security of the
37
+ reporter of any incident.
38
+
39
+ ## Scope
40
+
41
+ This Code of Conduct applies within all project spaces, including the
42
+ GitHub repository, issue tracker, pull requests, discussions, and any
43
+ public communication where an individual is representing the project.
@@ -0,0 +1,70 @@
1
+ # Contributing
2
+
3
+ Thanks for considering a contribution. The SDK is the public face of a
4
+ proprietary product, so contribution scope is intentionally narrow.
5
+
6
+ ## What we welcome
7
+
8
+ - **New edge extractors** in `extract.py` — additional infrastructure formats,
9
+ AI agent frameworks, CI/CD systems. Pure Python, ideally AST or text
10
+ parsing without runtime dependencies on the framework being parsed.
11
+ - **Live observability connectors** in `live.py` — third-party APIs that
12
+ expose service-to-service call relationships (Lightstep, AppDynamics,
13
+ New Relic, Grafana Tempo, Sentry, etc.).
14
+ - **Bug fixes** in `client.py`, `extract.py`, `live.py`, `dedupe.py`,
15
+ `find_edges.py`.
16
+ - **Documentation** — README clarifications, notebook improvements, new
17
+ example fixtures in `examples/`.
18
+ - **Test coverage** — additional respx-mocked test cases for edge cases.
19
+
20
+ ## What's out of scope
21
+
22
+ - The 6D encoding algorithm itself runs server-side and is not part of
23
+ this repository. Any PR proposing changes to encoding math, risk
24
+ thresholds, or scoring rules will be closed.
25
+ - Source-code modifications to the bundled console scripts that change
26
+ their published behavior require a coordinated release.
27
+ - License changes. The SDK is proprietary; the public source code is for
28
+ adoption velocity, not distribution rights.
29
+
30
+ ## Development setup
31
+
32
+ ```bash
33
+ git clone https://github.com/jmurray10/semanticembed-sdk
34
+ cd semanticembed-sdk
35
+ pip install -e '.[dev,extract]'
36
+ pytest
37
+ ```
38
+
39
+ The dev extras pull in `pytest`, `respx`, and `pyyaml`. All HTTP calls in
40
+ the test suite are respx-mocked — no live network or credentials needed.
41
+
42
+ ## Pull-request checklist
43
+
44
+ 1. **Tests** — every new public function ships with at least one test in
45
+ `tests/`. Use `respx` for any HTTP, never call live APIs.
46
+ 2. **Type hints** — public APIs annotate arguments and return types.
47
+ 3. **Docstrings** — public functions have a docstring with a usage
48
+ `Example::` block.
49
+ 4. **CHANGELOG.md** — add an entry under an "Unreleased" header (we'll
50
+ roll it into the next version on merge).
51
+ 5. **No new runtime deps** without prior discussion. The SDK keeps a
52
+ minimal footprint (currently just `httpx`).
53
+
54
+ ## Releasing (maintainers)
55
+
56
+ Tag pushes to `v*` trigger the `publish.yml` workflow, which uses PyPI
57
+ Trusted Publishing (no token to manage). Steps:
58
+
59
+ ```bash
60
+ # bump version in pyproject.toml AND src/semanticembed/__init__.py
61
+ git commit -am "vX.Y.Z: description"
62
+ git push
63
+ git tag -a vX.Y.Z -m "vX.Y.Z — short summary"
64
+ git push origin vX.Y.Z
65
+ # workflow builds + publishes within ~2 minutes
66
+ ```
67
+
68
+ ## Questions
69
+
70
+ Open a GitHub Discussion or email jeffmurr@seas.upenn.edu.
@@ -0,0 +1,106 @@
1
+ # License FAQ
2
+
3
+ Common questions about the SemanticEmbed SDK license. The license itself
4
+ is in [LICENSE](LICENSE).
5
+
6
+ ---
7
+
8
+ ## Is this open source?
9
+
10
+ **No.** The SDK is **proprietary software with public source code**. The
11
+ source is on GitHub for adoption velocity (so you can read it, fork it
12
+ locally, and integrate it without friction), but the license does not
13
+ grant the rights an OSI-approved open-source license would.
14
+
15
+ This is the same pattern Stripe, Snowflake (`snowflake-connector-python`),
16
+ and Anthropic (TypeScript SDK) use for their official client libraries.
17
+ It's "source-available", not "open source".
18
+
19
+ ---
20
+
21
+ ## Can I use it commercially?
22
+
23
+ **Yes — within the free tier.** Graphs up to 50 nodes per request are
24
+ free for any use including commercial. No signup, no API key required.
25
+
26
+ For graphs larger than 50 nodes, you need a paid license. Email
27
+ **jeffmurr@seas.upenn.edu** for pricing.
28
+
29
+ ---
30
+
31
+ ## Can I fork the repo? Modify the code?
32
+
33
+ You can fork the repo and modify your local copy for your own internal
34
+ use, debugging, integration, or to send a PR back. You can't redistribute
35
+ modified versions, package a derivative SDK, or relicense the source.
36
+ The upshot: hack on it freely; don't ship a fork as your own product.
37
+
38
+ ---
39
+
40
+ ## What's actually proprietary?
41
+
42
+ Two things:
43
+
44
+ 1. **The 6D encoding algorithm.** It runs server-side at the SemanticEmbed
45
+ cloud API; it's not in this repo. Patent application
46
+ [#63/994,075](#patent) covers the encoding method.
47
+ 2. **The SDK code in this repo.** All rights reserved per LICENSE.txt;
48
+ "All rights reserved" means the standard copyright defaults, modified
49
+ only by the explicit grants in the license.
50
+
51
+ The SDK is a thin HTTP client + edge parsers. Reading the SDK source
52
+ gives you no information about the encoding algorithm — that's the whole
53
+ point of the architecture.
54
+
55
+ ---
56
+
57
+ ## What if my company has a strict OSS-only policy?
58
+
59
+ Talk to us. The SDK is proprietary but not adversarial — we've been
60
+ through procurement reviews where the legal team's primary concern was
61
+ "is this going to disappear?" (answer: paid customers get an escrow
62
+ clause; free-tier doesn't but everything is also pinned on PyPI). Email
63
+ **jeffmurr@seas.upenn.edu**.
64
+
65
+ ---
66
+
67
+ ## <a name="patent"></a>Patent
68
+
69
+ US Provisional Patent Application **#63/994,075**, filed
70
+ **2 March 2026**, covers the 6D structural encoding method, the risk
71
+ classification rules, and the system architecture (thin client + cloud
72
+ encoding service).
73
+
74
+ The patent application is in prosecution — it has not yet issued. The
75
+ SDK is shipped and supported regardless of patent timing.
76
+
77
+ ---
78
+
79
+ ## Free tier specifics
80
+
81
+ - **Hard limit:** 50 unique nodes per `encode()` call. Fewer than 2
82
+ edges raises `ValueError`.
83
+ - **No rate limit on the wire** for the free path, but the SDK's
84
+ retry-once policy and the server's tier policy together cap practical
85
+ burst rate. If you're hitting rate limits, you're probably ready for
86
+ a paid license anyway.
87
+ - **No signup, no email collection.** The free path doesn't even know
88
+ who you are.
89
+
90
+ ---
91
+
92
+ ## Paid tier
93
+
94
+ - Larger graphs (configurable per license).
95
+ - Continuous monitoring (drift detection, scheduled re-encodes).
96
+ - CI/CD gating (block PRs that worsen structural risk past a threshold).
97
+ - Priority support, SLA, on-prem deployment options.
98
+
99
+ Pricing is bespoke depending on node count + monitoring frequency.
100
+ Email **jeffmurr@seas.upenn.edu** with your use case.
101
+
102
+ ---
103
+
104
+ ## More questions
105
+
106
+ Anything not covered here: **jeffmurr@seas.upenn.edu**.