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.
- semanticembed-0.7.3/.github/ISSUE_TEMPLATE/bug_report.yml +67 -0
- semanticembed-0.7.3/.github/ISSUE_TEMPLATE/config.yml +10 -0
- semanticembed-0.7.3/.github/ISSUE_TEMPLATE/feature_request.yml +48 -0
- semanticembed-0.7.3/.github/workflows/ci.yml +59 -0
- semanticembed-0.7.3/.gitignore +22 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/CHANGELOG.md +19 -0
- semanticembed-0.7.3/CODE_OF_CONDUCT.md +43 -0
- semanticembed-0.7.3/CONTRIBUTING.md +70 -0
- semanticembed-0.7.3/LICENSE-FAQ.md +106 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/PKG-INFO +93 -45
- {semanticembed-0.7.2 → semanticembed-0.7.3}/README.md +91 -44
- semanticembed-0.7.3/SECURITY.md +39 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/api_reference.md +242 -12
- semanticembed-0.7.3/docs/input_format.md +173 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/license_keys.md +2 -1
- semanticembed-0.7.3/docs/validation_methodology.md +198 -0
- semanticembed-0.7.3/examples/README.md +64 -0
- semanticembed-0.7.3/examples/autogen_codereview.py +61 -0
- semanticembed-0.7.3/examples/crewai_content_pipeline.py +63 -0
- semanticembed-0.7.3/examples/langgraph_research_agent.py +74 -0
- semanticembed-0.7.3/huggingface/.gitignore +5 -0
- semanticembed-0.7.3/huggingface/DEPLOY.md +113 -0
- semanticembed-0.7.3/huggingface/README.md +97 -0
- semanticembed-0.7.3/huggingface/app.py +452 -0
- semanticembed-0.7.3/huggingface/build.sh +13 -0
- semanticembed-0.7.3/huggingface/examples/autogen_codereview.py +61 -0
- semanticembed-0.7.3/huggingface/examples/boutique.json +21 -0
- semanticembed-0.7.3/huggingface/examples/crewai_content.py +63 -0
- semanticembed-0.7.3/huggingface/examples/langgraph_research.py +74 -0
- semanticembed-0.7.3/huggingface/requirements.txt +3 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/04_bring_your_own.ipynb +8 -14
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/05_ai_agent_pipelines.ipynb +1 -1
- {semanticembed-0.7.2 → semanticembed-0.7.3}/pyproject.toml +1 -1
- {semanticembed-0.7.2 → semanticembed-0.7.3}/skill/SKILL.md +5 -1
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/__init__.py +1 -1
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/README.md +8 -8
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/extract.py +120 -62
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract_ai.py +30 -0
- semanticembed-0.7.2/.gitignore +0 -11
- semanticembed-0.7.2/docs/input_format.md +0 -98
- {semanticembed-0.7.2 → semanticembed-0.7.3}/.claude/skills/analyze/SKILL.md +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/.github/workflows/publish.yml +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/LICENSE +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/dimensions.md +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/getting_started.md +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/docs/output_format.md +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/ai_agent_pipeline.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/cicd_pipeline.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/google_online_boutique.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/README.md +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/RadarChart.tsx +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/RiskTable.tsx +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/TopologySummary.tsx +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/react/useSemanticEmbed.ts +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/sample_pipeline.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/examples/weaveworks_sock_shop.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/01_quickstart.ipynb +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/02_dimensions.ipynb +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/03_drift_detection.ipynb +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/06_cicd_pipelines.ipynb +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/07_opentelemetry.ipynb +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/08_qwen_compression.ipynb +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/notebooks/qwen_compression_cookbook.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/skill/SETUP.md +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/skill/analyze.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/__init__.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/__main__.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/agent.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/agent/gemini_agent.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/client.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/dedupe.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/exceptions.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/explain.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/find_edges.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/live.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/src/semanticembed/models.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/__init__.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/autogen_app.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/cdk_app.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/crewai_app.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/docker-compose.yml +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/langgraph_app.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/pulumi_app.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/stack.yaml +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/trace_jaeger.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/trace_otlp.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/fixtures/trace_zipkin.json +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_aclient.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_client.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_dedupe.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract_iac.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_extract_otel.py +0 -0
- {semanticembed-0.7.2 → semanticembed-0.7.3}/tests/test_live.py +0 -0
- {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**.
|