Document and test claim support bridge
This commit is contained in:
parent
ef61366eea
commit
0f76e86000
|
|
@ -42,6 +42,7 @@ The adapter exposes JSON-serializable methods suitable for a local web bridge:
|
|||
- `expand_topic(...)`
|
||||
- `extract_text(text, backend="heuristic")`
|
||||
- `verify_strings(values, context="", limit=5)`
|
||||
- `support_claims(text, context="", limit=5, max_claims=8, min_claim_chars=90)`
|
||||
- `verify_bibtex(bibtex_text, context="", limit=5)`
|
||||
- `graph(seed_keys, relation_types=None, depth=1, review_status=None, missing_only=False)`
|
||||
|
||||
|
|
@ -64,6 +65,7 @@ window.citegeist = {
|
|||
expandTopic(topicSlug, opts) {},
|
||||
extractText(text, opts) {},
|
||||
verifyStrings(values, opts) {},
|
||||
supportClaims(text, opts) {},
|
||||
verifyBibtex(bibtexText, opts) {},
|
||||
graph(seedKeys, opts) {}
|
||||
}
|
||||
|
|
@ -122,6 +124,7 @@ This is sufficient to drive a demonstration app that can:
|
|||
- preview or apply topic expansion;
|
||||
- inspect one entry with BibTeX/provenance details;
|
||||
- run rough-reference extraction and verification;
|
||||
- rank support-worthy claims in a prose excerpt and inspect suggested references;
|
||||
- render local citation neighborhoods from `graph()` JSON payloads.
|
||||
|
||||
For a first demo, the strongest path is topic exploration rather than generic reference-manager behavior.
|
||||
|
|
|
|||
|
|
@ -839,6 +839,23 @@
|
|||
"max_expanded_entries": 100,
|
||||
"max_expand_seconds": 20
|
||||
}
|
||||
}</div>
|
||||
</div>
|
||||
<div class="endpoint-card">
|
||||
<div class="endpoint-head">
|
||||
<span class="endpoint-method">POST</span>
|
||||
<span class="endpoint-path">/api/call support_claims</span>
|
||||
</div>
|
||||
<p>Analyze a prose excerpt for support-worthy claims, rank them by <code>needs_support_score</code>, and return candidate references not already parsed from the excerpt.</p>
|
||||
<div class="code-block">{
|
||||
"method": "support_claims",
|
||||
"params": {
|
||||
"text": "Movement may not be modeled at all, but simply assigned a cost value ...",
|
||||
"context": "artificial life",
|
||||
"limit": 5,
|
||||
"max_claims": 5,
|
||||
"min_claim_chars": 80
|
||||
}
|
||||
}</div>
|
||||
</div>
|
||||
<div class="endpoint-card">
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ from types import SimpleNamespace
|
|||
|
||||
from citegeist import BibliographyStore
|
||||
from citegeist.app_api import LiteratureExplorerApi
|
||||
from citegeist.bibtex import BibEntry
|
||||
from citegeist.bootstrap import BootstrapResult
|
||||
from citegeist.app_server import (
|
||||
LiteratureExplorerAppServer,
|
||||
|
|
@ -9,6 +10,7 @@ from citegeist.app_server import (
|
|||
_request_is_authorized,
|
||||
create_request_handler,
|
||||
)
|
||||
from citegeist.verify import VerificationMatch, VerificationResult
|
||||
|
||||
|
||||
class FakeBootstrapper:
|
||||
|
|
@ -29,6 +31,38 @@ class FakeBootstrapper:
|
|||
]
|
||||
|
||||
|
||||
class FakeVerifier:
|
||||
def verify_strings(self, values, context="", limit=5):
|
||||
return []
|
||||
|
||||
def verify_string(self, value: str, context: str = "", limit: int = 5):
|
||||
return VerificationResult(
|
||||
query=value,
|
||||
context=context,
|
||||
status="high_confidence",
|
||||
confidence=0.88,
|
||||
entry=BibEntry(
|
||||
entry_type="article",
|
||||
citation_key="support2024",
|
||||
fields={"title": "Support Paper", "year": "2024"},
|
||||
),
|
||||
source_label="openalex:search:Support Paper",
|
||||
alternates=[
|
||||
VerificationMatch(
|
||||
entry=BibEntry(
|
||||
entry_type="article",
|
||||
citation_key="alt2023",
|
||||
fields={"title": "Alternate Support", "year": "2023"},
|
||||
),
|
||||
score=0.66,
|
||||
source_label="crossref:search:Alternate Support",
|
||||
)
|
||||
],
|
||||
input_type="string",
|
||||
input_key=None,
|
||||
)
|
||||
|
||||
|
||||
def test_literature_explorer_app_server_dispatch_search():
|
||||
store = BibliographyStore()
|
||||
try:
|
||||
|
|
@ -138,6 +172,35 @@ def test_literature_explorer_app_server_dispatch_bootstrap_with_new_caps():
|
|||
store.close()
|
||||
|
||||
|
||||
def test_literature_explorer_app_server_dispatch_support_claims():
|
||||
store = BibliographyStore()
|
||||
try:
|
||||
server = LiteratureExplorerAppServer(LiteratureExplorerApi(store, verifier=FakeVerifier()))
|
||||
|
||||
payload = server.dispatch(
|
||||
"support_claims",
|
||||
{
|
||||
"text": """
|
||||
Long claim text about agents evolving intelligent movement strategies in multiple computational settings without enough direct support [1].
|
||||
|
||||
References
|
||||
|
||||
[[1]]Earlier Cited Paper
|
||||
""",
|
||||
"context": "artificial life",
|
||||
"limit": 3,
|
||||
"max_claims": 2,
|
||||
"min_claim_chars": 40,
|
||||
},
|
||||
)
|
||||
|
||||
assert payload["context"] == "artificial life"
|
||||
assert payload["suggestion_count"] == 1
|
||||
assert payload["suggestions"][0]["suggested_references"][0]["citation_key"] == "support2024"
|
||||
finally:
|
||||
store.close()
|
||||
|
||||
|
||||
def test_literature_explorer_http_handler_class_can_be_created():
|
||||
store = BibliographyStore()
|
||||
try:
|
||||
|
|
|
|||
Loading…
Reference in New Issue