draft code for discovery script#15
Conversation
| if repo.get("archived"): | ||
| status = "archived" | ||
| elif repo.get("disabled"): | ||
| status = "not_available" |
There was a problem hiding this comment.
archived와 not_available 상태는 올려주신 코드 내에서 활용되는 부분이 없습니다. 오픈소스 여부를 판단하는 데 사용되는 지표로 해석되는데 활용되지 않는 이유 확인 부탁드려요.
There was a problem hiding this comment.
확인 감사합니다.
말씀해주신 것처럼 archived와 not_available 상태는 verify_github_url()에서 GitHub repository의 상태를 분류하기 위해 추가했지만, decide_recommendation()의 bad_links 판단에는 포함되어 있지 않아 recommendation 결정에는 직접 반영되지 않고 있었습니다.
의도상 archived repository나 disabled repository는 자동으로 available public artifact로 간주하면 안 되므로, bad_links 상태 집합에 archived와 not_available을 추가하는 방식으로 수정했습니다. 또한 해당 경우가 maintainer review 사유에 더 명확히 드러나도록 reason 문구도 함께 보완하겠습니다.
|
@NamsanMan |
report.md의 예시 이미지 첨부하였습니다.
예시 candidate 3개에 대한 판단 결과입니다. 1. AwareVLN: Reasoning with Self-awareness for Vision-Language Navigation
Verified links
2. GesVLA: Gesture-Aware Vision-Language-Action Model Embedded Representations
Verified links
3. Superhuman Safe and Agile Racing through Multi-Agent Reinforcement Learning
Verified links
위 결과에서 확인할 수 있듯이, 스크립트는 arXiv 후보를 수집한 뒤 relevance, recommendation, verified link status를 포함한 maintainer review report를 생성합니다. 실행 시점의 arXiv 최신 논문 및 네트워크/API 응답 상태에 따라 결과 후보와 링크 검증 결과는 달라질 수 있습니다. 하지만 실제로 reject된 "AwareVLN: Reasoning with Self-awareness for Vision-Language Navigation"를 확인해 보면, Physical AI계열의 논문이 맞으나, keyword의 한계로 reject된 것을 확인하였습니다. 따라서 keyword의 보완이 필요합니다. |
|
@NamsanMan |
| if "huggingface.co/datasets/" in url: | ||
| return "hf_dataset" | ||
| if "huggingface.co/" in url: | ||
| return "hf_model" |
There was a problem hiding this comment.
huggingface.co/datasets/ 외에도 아래 같은 url 패턴이 있어서 dataset 외에는 hf_model로 처리하는 게 맞을지는 잘 모르겠네요. 한 번 고민해 봐주시면 좋을 것 같습니다!
- huggingface.co/spaces/org/demo
- huggingface.co/papers/...
There was a problem hiding this comment.
반영했습니다. Hugging Face URL 분류를 hf_dataset, hf_space, paper, hf_model 순서로 세분화하여 spaces나 papers 링크가 hf_model로 잘못 분류되지 않도록 수정했습니다.
|
이번 commit에서는 저번 주 회의 내용을 반영하여 discovery script의 후보 분류, artifact 검증, LLM-assisted review 흐름을 정리했습니다. 핵심 방향은 다음과 같습니다.
주요 변경사항1. Hugging Face URL 분류 세분화기존에는
이를 통해 Hugging Face Spaces나 Papers 링크가 model release처럼 잘못 해석되지 않도록 했습니다. 2. verified artifact availability 분리후보의 link status만 보는 것이 아니라, 실제로 어떤 종류의 verified artifact가 있는지 별도 필드로 정리했습니다.
이렇게 분리한 이유는, project page만 있는 후보가 공식 model/code/dataset release처럼 처리되는 것을 막기 위함입니다. 특히 이번 workflow에서는 verified model link를 가장 강한 positive signal로 보고, project page는 concrete artifact와 분리해서 다룹니다. 3. Rule-based discovery flow 유지
여기까지는 LLM 없이도 동작합니다. python scripts/discover_new.py --days 7 --max-arxiv 10 --llm-review-mode off --output report_rule.md4. Optional LLM reviewer 추가LLM review는 즉, 5. LLM이 수행하는 기능LLM reviewer는 candidate JSON을 입력으로 받아 다음 정보를 판단/생성합니다.
특히
LLM은 최종 결정을 강제하지 않고, maintainer가 판단할 수 있도록 보조 정보를 제공합니다. 6. LLM-assisted flowLLM을 사용하는 경우 전체 흐름은 다음과 같습니다. Example command: python scripts/discover_new.py --days 7 --max-arxiv 10 --max-ambiguous 5 --llm-review-mode ambiguous --llm-review-command "python scripts/llm_reviewer_gemini.py" --output report_gemini.md7. Gemini wrapper
사용 시에는 아래가 필요합니다. pip install -U google-genaiPowerShell 기준: $env:GEMINI_API_KEY="API_KEY"LLM review는 optional이므로, API key가 없거나 LLM을 사용하지 않는 환경에서는 기존 rule-based report만 생성할 수 있습니다. 실행 예시는 아래와 같습니다. Execution examplepython scripts/discover_new.py --days 7 --max-arxiv 10 --max-ambiguous 5 --llm-review-mode ambiguous --llm-review-command "python scripts/llm_reviewer_gemini.py" --output report_gemini.md
# Physical AI Discovery Report
This report is for maintainer review. No GitHub issues were created.
| Recommendation | Count |
|---|---:|
| `needs_review` | 9 |
| `reject` | 1 |
| Review bucket | Count |
|---|---:|
| `normal` | 0 |
| `ambiguous` | 9 |
| `reject` | 1 |
| LLM review | Count |
|---|---:|
| `selected` | 5 |
| `completed` | 5 |
### 1. Beyond Binary: Sim-to-Real Dexterous Manipulation with Physics-Grounded Contact Representation
- Relevance: `high`
- Recommendation: `needs_review`
- Review bucket: `ambiguous`
- Has verified model link: `False`
- Has verified artifact link: `False`
- LLM decision: `needs_review`
- LLM entry type: `model`
- LLM reason: The candidate is relevant to physical AI, but no verified model or artifact link was found.
**LLM entry summary**
This work introduces Center-of-Pressure (CoP), a physics-grounded tactile representation for sim-to-real transfer in dexterous manipulation tasks.
**LLM maintainer summary**
This paper is highly relevant to Physical AI, but no verified model or code link is available, so it remains `needs_review`.
다만, 너무 잦은 실행을 하면 arxiv에서 접속을 차단하거나, llm의 token 제한이 걸리는 것 같습니다.
확인해보시고 review 해 주시면 issue 자동생성도 진행하겠습니다. |
jih0-kim
left a comment
There was a problem hiding this comment.
리뷰 남겨드린 내용 확인 부탁드립니다. 수정 사항 반영해 리퀘스트 주신 점 감사합니다~!
| status = "private_or_gated" if gated else "available" | ||
| if len(files) <= 1: | ||
| status = "placeholder" |
There was a problem hiding this comment.
private 모델은 실제로는 웨이트 파일이 공개되어 있기는 하지만 사이트 상에서 terms에 동의하거나 해야 접근 가능한 경우라 placeholder로 두는 게 고민이 되기는 하네요. 🤔
There was a problem hiding this comment.
gated=True인 경우에는 파일 수와 관계없이 private_or_gated 상태를 유지하고, non-gated repository에 대해서만 파일 수를 기준으로 placeholder를 판정하도록 수정했습니다.
| reasons.append("requires maintainer review") | ||
| return "needs_review", reasons, "normal" |
There was a problem hiding this comment.
relevance의 값이 ["low", "medium", "high"] 중 하나일 것 같습니다. 위에서 if 문을 타고 내려오면 이 두 줄에는 도달할 일이 없을 것 같은데 삭제해도 괜찮으려나요?
There was a problem hiding this comment.
말씀대로 정상 평가 흐름에서는 low, medium, high가 모두 앞에서 처리됩니다. 기존 fallback은 제거하고, 예상하지 못한 relevance 값이 들어오는 경우를 명확히 확인할 수 있도록 ValueError를 발생시키도록 수정했습니다.
| "is_physical_ai": {"type": "boolean"}, | ||
| "is_official": {"type": "boolean"}, |
There was a problem hiding this comment.
이 두 가지 필드는 LLM이 생성하지만, 코드 내에서 이 두 필드를 활용하는 부분이 없습니다. 사용되지 않는 값이라면 삭제해서 LLM 호출 비용을 줄이는 게 좋을 것 같습니다.
There was a problem hiding this comment.
@NamsanMan
이 부분 삭제하신다고 의견 주셨던 것 같은데 확인 한 번 더 부탁드릴게요~!
There was a problem hiding this comment.
사용되지 않는 is_physical_ai, is_official 필드를 Gemini 응답 스키마의 properties와 required에서 모두 제거했습니다.
| f"- Has verified model link: `{availability.get('has_verified_model_link', False)}`", | ||
| f"- Has verified artifact link: `{availability.get('has_verified_artifact_link', False)}`", | ||
| f"- Has verified project page: `{availability.get('has_verified_project_page', False)}`", | ||
| ]) | ||
| if candidate.llm_review: | ||
| lines.append(f"- LLM review status: `{candidate.llm_review.get('status', 'unknown')}`") | ||
| if candidate.llm_review.get("decision"): | ||
| lines.append(f"- LLM decision: `{candidate.llm_review.get('decision')}`") | ||
| if "has_verified_model_link" in candidate.llm_review: | ||
| lines.append(f"- LLM has verified model link: `{candidate.llm_review.get('has_verified_model_link')}`") | ||
| if "has_verified_artifact_link" in candidate.llm_review: | ||
| lines.append(f"- LLM has verified artifact link: `{candidate.llm_review.get('has_verified_artifact_link')}`") |
There was a problem hiding this comment.
룰베이스로도 링크를 검증하고 LLM으로도 검증하는 것 같습니다. 둘 중 어떤 값을 유효값으로 보게 되나요?
There was a problem hiding this comment.
링크 검증값은 rule-based checker의 결과를 source of truth로 두겠습니다. LLM의 has_verified_model_link, has_verified_artifact_link는 ambiguous candidate에 대한 보조 검토 annotation으로만 사용하고, artifact_availability나 rule-based verified link field를 override하지 않도록 유지하겠습니다. 이 점은 report 또는 PR 설명에 명시하겠습니다.
위 내용 댓글로 남겨주신 것 확인했습니다. 혹시 현재 코드상 LLM 평가 결과가 참고용인 게 report에 작성되고 있나요?
There was a problem hiding this comment.
기존 report에서는 rule-based 결과와 LLM 결과가 구분되어 출력되었지만, LLM 결과가 참고용이라는 설명은 명시적이지 않았습니다. 이번 수정에서 report 상단에 rule-based 링크 검증이 source of truth이며 LLM 링크 평가는 참고용 annotation으로만 사용되고 rule-based 결과를 override하지 않는다는 안내를 추가했습니다. 각 출력 필드도 Rule-based와 LLM ... (reference only)로 구분했습니다.
|
@NamsanMan |
|
Keyword-based relevance 분류 기준
Exclusion keyword는 Physical AI keyword보다 먼저 검사됩니다. 따라서 |
|
@NamsanMan 코드 라인에 인라인 코멘트로 남긴 부분에 대해서는, 가능하면 해당 코멘트 스레드 안에서 답변해주실 수 있을까요? |
|
@NamsanMan |

관련이슈 #8
arXiv
cs.RO논문을 기준으로 신규 Physical AI 후보를 찾는scripts/discover_new.py를 추가했습니다.기존 draft에서 우려되었던 HuggingFace broad scraping 방식은 제외하고, 논문 메타데이터/초록에서 발견된 공식 후보 링크만 검증하는 방향으로 구현했습니다. 또한 후보를 바로 GitHub Issue로 등록하지 않고, 관리자 검토용 리포트를 먼저 생성하도록 했습니다.
주요 변경 사항
scripts/discover_new.py신규 Physical AI 후보를 찾고 검토용 리포트를 생성하는 스크립트입니다.
주요 흐름은 다음과 같습니다.
cs.RO에서 최근 논문 수집data/models.yaml,data/datasets.yaml,data/tools.yaml와 중복 여부 확인이 PR에서는 GitHub Issue 자동 생성 기능은 포함하지 않았습니다.
tests/test_discover_new.pydiscover_new.py의 핵심 로직을 검증하는 단위 테스트를 추가했습니다.검증하는 항목은 다음과 같습니다.
--no-verify옵션 동작구현 상세
논문 중심 discovery
HuggingFace의
robotics태그를 직접 수집하지 않습니다.대신 arXiv
cs.RO논문을 먼저 수집하고, 해당 논문 메타데이터나 초록에서 발견된 링크만 검증합니다. 이를 통해 개인 fine-tune, 비공식 conversion, community model 등이 후보로 들어오는 가능성을 줄였습니다.링크 검증
GitHub 링크는 GitHub API를 통해 다음 정보를 확인합니다.
HuggingFace 링크는 HuggingFace API를 통해 다음 정보를 확인합니다.
Project page는 HTTP 응답과 페이지 본문을 기준으로 검증합니다.
후보 상태
링크 검증 결과는 다음과 같은 상태로 기록됩니다.
available: 접근 가능하고 실질 내용이 있어 보이는 경우placeholder: repo/page는 있으나 아직 코드가 공개되지 않았거나 내용이 부족한 경우not_found: 404private_or_gated: 비공개 또는 gated resourceunofficial: unofficial, reimplementation, fine-tuned 등 비공식 흔적이 있는 경우unknown: 네트워크/API 오류 등으로 판단 불가중복 검사
기존 YAML 데이터와 다음 기준으로 중복 여부를 확인합니다.
github_urlpaper_urlhf_urlproject_url중복으로 판단되면 리포트에 근거를 남기고
reject로 분류합니다.Physical AI 관련성 필터
제목과 초록을 기반으로 1차 키워드 필터를 적용합니다.
관련 키워드 예시는 다음과 같습니다.
반대로 autonomous driving only로 보이는 후보는 제외합니다.
예시 제외 키워드:
관리자 검토 우선
후보가 발견되더라도 자동 승인하지 않습니다.
검증된 공개 링크가 있는 경우에도
needs_review로 남기고, 관리자가 먼저 리포트를 확인할 수 있도록 했습니다. 이는 자동으로 다수의 GitHub Issue가 생성되기 전에 후보를 한 번 추려내기 위한 목적입니다.선택적 LLM 리뷰 인터페이스
특정 LLM provider에 의존하지 않도록, 외부 command를 연결하는 방식으로 구현했습니다.
선택적으로 외부 LLM 리뷰 command를 연결할 수 있는 인터페이스만 추가했습니다. 특정 LLM provider 연동이나 reviewer script는 이 PR에 포함하지 않았습니다.
LLM 활용 가능 영역은 세 가지로 말할 수 있습니다.
사용 방법
기본 실행:
python3 scripts/discover_new.py
최근 14일, 최대 50개 논문 확인:
python3 scripts/discover_new.py --days 14 --max-arxiv 50
Markdown 리포트 저장:
python3 scripts/discover_new.py
--days 7
--max-arxiv 20
--output discovery-report.md
JSON 리포트 저장:
python3 scripts/discover_new.py
--format json
--output discovery-report.json
JSONL 리포트 저장:
python3 scripts/discover_new.py
--format jsonl
--output discovery-report.jsonl
링크 검증 없이 실행:
python3 scripts/discover_new.py --no-verify
테스트
python3 -m pytest tests/ -v --tb=short
결과:
70 passed
Notes