Omnigraph
그래프 엔진으로 컨텍스트를 조립하고, 객체 저장소 기반에서 에이전트가 코드처럼 그래프 데이터를 분기·타입·검토·병합·감사·거버넌스합니다
R-first orchestration for text vectorization (embeddings), embedding distance computation, and distance-based scoring workflows. Supports backend-neutral embedding providers (HF, OpenAI, TEI), prototy
데이터R · PythonGitHub @openalexPro온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기R package in the OpenalexPro ecosystem providin vector comparison functionality for works
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Embedding of Corpora, implemented in R.
hf, openai, tei).distance_ridge() + score_ridge()) + threshold calibration.The badges show the released version (r-universe, built from main) and the
development version (dev); what changed in each release is in
NEWS.md.
See DEVELOPMENT_CONTINUITY.md for design principles, architectural
decisions, and the required pre-commit update checklist that keeps development
context continuous for both humans and AI agents.
Released version, from the openalexPro r-universe:
install.packages(
"openalexVectorComp",
repos = c("https://openalexpro.r-universe.dev", "https://cloud.r-project.org")
)
Development version (the dev branch), from GitHub:
# install.packages("remotes")
remotes::install_github("openalexPro/openalexVectorComp", ref = "dev")
provider = "tei":
text-embeddings-router --model BAAI/bge-small-en-v1.5 --port 8080
provider = "hf" or "openai"), set
OVC_API_TOKEN in your environment.Start with vignettes/simplestart.qmd, then see:
vignettes/package-overview.qmdvignettes/openai-batch-async.qmdvignettes/abstract-cleaning.qmdvignettes/specter2-setup.qmd (academic-paper embeddings via TEI)Create a full demo in getwd()/demos/openalex (fixtures + Quarto analysis):
run_demo_openalex(
demo_dir = file.path(getwd(), "demos", "openalex"),
render = FALSE
)
Set render = TRUE to run quarto render directly. For hosted backends
(provider = "hf" or "openai"), set OVC_API_TOKEN first.
The Quarto file and backend YAML are placed in demo_dir, while all pipeline
artifacts are written under demo_dir/project/.
OpenAI-specific demo (same structure, explicit API key argument):
run_demo_openai(
api_key = Sys.getenv("OVC_API_TOKEN"),
demo_dir = file.path(getwd(), "demos", "openai"),
render = FALSE
)
The OpenAI demo now follows a two-phase async flow:
run_demo_openai(..., render = TRUE) submits batch and continues.demo_finalize_openai_batch(
demo_dir = file.path(getwd(), "demos", "openai"),
api_key = Sys.getenv("OVC_API_TOKEN"),
label = "corpus_batch"
)
This writes comparison outputs to:
project/openai_batch_comparison/label=corpus_batch/.
For long-running OpenAI embedding jobs, use the async batch helpers:
backend <- backend_config(
provider = "openai",
model = "text-embedding-3-small"
)
# 1) submit and return immediately
batch_submit_openai(
project_dir = "my_project",
backend = backend,
label = "corpus"
)
# 2) check job status
batch_status_openai(
project_dir = "my_project",
label = "corpus"
)
# 3) collect completed jobs and write canonical embeddings parquet
batch_collect_openai(
project_dir = "my_project",
backend = backend,
label = "corpus"
)
Preflight checks run before submission. Jobs are auto-split by size/count when needed. A single oversized request line stops with a clear error.
distance_reference_cosine() writes one parquet file:
distance_reference_cosine/model_id=<...>/corpus_label=<...>/reference_label=<...>/pairwise-cosine.parquetThis is a distance-only matrix with centroid axes:
id: corpus ids plus one row "centroid" (corpus centroid)"centroid" (reference centroid)1 - cosine)To convert this full distance matrix to scores:
score_reference_cosine(
distance_parquet = "my_project/distance_reference_cosine/model_id=.../corpus_label=.../reference_label=...",
method = "linear" # or "exponential"
)