Commit Graph

47 Commits

Author SHA1 Message Date
lasta
d841fb823a graph 2026-05-22 00:22:03 +09:00
LASTA_DEV01\lasta
8d77bc659f ff 2026-05-20 21:12:10 +09:00
LASTA_DEV01\lasta
d2c3d9e79c db 2026-05-20 21:10:52 +09:00
LASTA_DEV01\lasta
8b6eb33d42 db 2026-05-20 21:03:20 +09:00
LASTA_DEV01\lasta
de46b657c2 domain builder 2026-05-20 20:59:40 +09:00
LASTA_DEV01\lasta
6a6befc485 2 2026-05-20 18:44:49 +09:00
LASTA_DEV01\lasta
651c47d698 1 2026-05-20 18:43:08 +09:00
LASTA_DEV01\lasta
33584dd631 1 2026-05-20 13:36:35 +09:00
LASTA_DEV01\lasta
c33a414115 1 2026-05-20 13:26:10 +09:00
LASTA_DEV01\lasta
9eaba046ab [] 2026-05-20 13:25:27 +09:00
LASTA_DEV01\lasta
fc69dfd063 [crawler_platform 삭제] 2026-05-20 13:21:08 +09:00
LASTA_DEV01\lasta
be717a8f9a log 2026-05-20 11:57:52 +09:00
LASTA_DEV01\lasta
e260e5f218 docs 2026-05-19 20:31:52 +09:00
LASTA_DEV01\lasta
00407e7a08 보고서 2026-05-15 17:10:01 +09:00
lasta
a537bba74f 버그수정 2026-05-14 23:37:21 +09:00
lasta
39097d0240 Phase 1.5: 엔티티/클레임 직접 입력 — OntologyEditorPage + 3탭 (엔티티/클레임/JSON 일괄)
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/{n}/entities: 단일 엔티티 직접 생성 (upsert)
  - CreateEntityRequest (entity_type, name, metadata)
- POST /projects/{n}/entities/bulk: 다수 엔티티 일괄 생성
  - BulkCreateEntitiesRequest, 응답 created 수 + entities
- DELETE /projects/{n}/entities/{id}: 단일 엔티티 삭제
- POST /projects/{n}/claims: 단일 클레임 직접 생성
  - CreateClaimRequest (source_name, subject_entity_id, predicate,
    object_entity_id|object_value, confidence, confidence_reason, evidence_text)
  - claim_hash로 중복 검출 → 있으면 confidence/메타 갱신
  - status="validated_claim", extraction_method="manual"
  - evidence_text 있으면 Evidence 자동 생성
- DELETE /projects/{n}/claims/{id}: 단일 클레임 삭제

프론트엔드 API (src/lib/api/):
- entities.ts: list/create/bulkCreate/delete + Zod 스키마
- claims.ts: list/create/delete + Zod 스키마 (passthrough)

TanStack Query 훅 (src/hooks/):
- useEntities.ts: useEntities, useCreateEntity, useBulkCreateEntities, useDeleteEntity
- useClaims.ts: useClaims, useCreateClaim, useDeleteClaim
- queryKeys에 entities.list, claims.list 키 팩토리

UI 프리미티브 (src/components/ui/):
- tabs.tsx: Tabs, TabsList, TabsTrigger, TabsContent (Context API 기반)

OntologyEditorPage 신규 (src/pages/):
- 3개 탭 구조:
  * 엔티티 탭: 도메인의 entity_types에서 타입 선택 + 이름 입력 → 추가
    + 엔티티 목록 (max-h scroll, 타입 배지, 삭제 버튼)
  * 클레임 탭: 소스/주어/술어/목적어(엔티티 or 리터럴)/신뢰도 입력
    + 클레임 목록 (S-P-O 시각화, 신뢰도, status 배지)
  * JSON 일괄 탭: textarea에 { entities: [...] } 붙여넣기 → 파싱 → bulkCreate
- react-hook-form + zod 검증
- useOntology(domain)으로 entity_types/predicates 자동 로드
- 삭제 confirm 대화상자, sonner 토스트

라우팅 & Sidebar:
- App.tsx: /editor/:projectId 라우트 추가
- AppShell: 사이드바에 "온톨로지 편집" 메뉴 (Network 아이콘)

i18n: editor.*, nav.editor 키 (한/영)

UI_REBUILD_PLAN.md 업데이트:
- Phase 1.4 `00786a4` 커밋 기록
- Phase 1.5 완료 표시 + 대기 보드 Phase 2/3 재정렬

다음 단계: Phase 2 — 그래프 시각화/편집 (Cytoscape React 래퍼)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 19:10:37 +09:00
lasta
00786a4fea Phase 1.4: 자율 연구 — by-project 엔드포인트 + ResearchPage + 세션 이력
백엔드 (crawler_platform/app/api/routes.py):
- POST /research/run/by-project 추가 — config_path 의존 제거
  - ResearchRunByProjectRequest: project_name 기반, DB project.config 재구성
  - GraphResearchLoop 동기 실행 (장시간 가능), asdict(result) 반환
- 기존 /projects/{n}/research/sessions, /research/sessions/{job_id}는 변경 없음

프론트엔드 API (src/lib/api/):
- research.ts: researchApi.startByProject/listSessions/getSession + Zod 스키마
  - 결과 페이로드는 passthrough() (백엔드 dataclass 그대로 노출)

TanStack Query 훅 (src/hooks/):
- useResearch.ts: useStartResearch, useResearchSessions, useResearchSession
- queryKeys에 research.sessions, research.session 키

ResearchPage 신규 (src/pages/ResearchPage.tsx):
- 2열 레이아웃: 좌측 연구 설정 폼 + 우측 결과/이력
- 폼: 소스 선택, goal 텍스트(필수, 3~500자), 시드 URL(선택),
  max_steps/max_branch/max_depth/min_relevance, same_domain_only
  react-hook-form + zod 검증
- 결과 카드: 단계/페이지/엔티티/클레임 4종 stats + raw JSON details
- 세션 이력 카드: GET /projects/{n}/research/sessions 결과 리스트
- 실행 중 안내 (장시간 가능), sonner 토스트

라우팅 & Sidebar:
- App.tsx: /research/:projectId 라우트 추가
- AppShell: 사이드바에 "자율 연구" 메뉴 (Brain 아이콘)

i18n: research.*, nav.research 키 (한/영)

다음 단계: Phase 1.5 — 엔티티/클레임 직접 입력
(백엔드 POST /projects/{n}/entities, /claims 신규 필요)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 19:01:52 +09:00
lasta
aaaaa054a7 Phase 1.3: 시드 크롤 — by-project 엔드포인트 + CrawlPage 폼/폴링/취소
세션 영구화: UI_REBUILD_PLAN.md 신설
- 사용자 비전 5가지 흐름 + Phase 보드 + 작업 재개 가이드
- 세션이 끊겨도 이 파일 + git log로 어디까지 했는지 즉시 복원

백엔드 (crawler_platform/app/api/):
- routes.py: POST /crawl-site/by-project 추가 — config_path 의존 제거
  - SiteCrawlByProjectRequest: project_name 기반, DB project.config 재구성
  - run_site_crawl_job이 __config_dict 메타키 인식하도록 최소 변경
- config/loader.py: project_config_from_dict() 헬퍼 추출 (DB dict ↔ ProjectConfig)

프론트엔드 API (src/lib/api/):
- crawl.ts: crawlApi.startByProject/getJob/cancel + Zod 스키마
  - 종료 상태 판정 헬퍼 isCrawlTerminal()

TanStack Query 훅 (src/hooks/):
- useCrawl.ts: useStartSiteCrawl, useCrawlJob (2초 폴링, 종료 시 자동 중단), useCancelCrawl
- queryKeys에 crawl.job 키

UI 프리미티브 (src/components/ui/):
- select.tsx, progress.tsx, badge.tsx (success/warning/destructive variants 포함)

CrawlPage 완전 교체 (src/pages/):
- 2열 레이아웃: 좌측 크롤 설정 폼 + 우측 진행 상태
- 폼: 소스 선택 (드롭다운, 비어있으면 소스 추가 안내) + 시드 URL + max_depth/max_pages + same_domain_only
  - react-hook-form + zod 검증
- 진행 상태: 상태 배지, 진행률 바, visited/queued/analyzed 카운터, 최근 페이지, 에러 details
- 크롤 종료시 폴링 자동 중단, 완료시 "결과 검토" 버튼
- 취소 버튼 → /crawl-site/jobs/{id}/cancel
- sonner 토스트

i18n: crawl.* 키 (한/영)

다음 단계: Phase 1.4 — 자율 연구 (POST /research/run by-project 마이그레이션 + ResearchPage)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 15:04:41 +09:00
lasta
461ebc062b Phase 1.2: 참고 소스 관리 — 소스 CRUD + UI
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/{name}/sources: 프로젝트에 소스 추가/업데이트
  - InlineSourceConfig 재사용, KnowledgeRepository.upsert_source 호출
- DELETE /projects/{name}/sources/{source_name}: 소스 삭제
  - 404 처리 + 외래 키 정리
- GET /projects/{name} 응답에 base_url 필드 추가

프론트엔드 API 레이어 (src/lib/api/):
- sources.ts: sourcesApi.create/delete + Zod 스키마 (Source, deleteSourceResponseSchema)

TanStack Query 훅 (src/hooks/):
- useSources.ts: useCreateSource, useDeleteSource (mutation + 캐시 무효화)
- queryKeys에 sources.byProject 키 팩토리

ConfigureSourcesPage 완전 교체 (src/pages/):
- 2열 레이아웃: 등록된 소스 목록 + 소스 추가 폼
- react-hook-form + zod 검증 (name 정규식, type enum, trust 0~1, rate_limit 1~600)
- 소스 카드 표시: type 배지, 신뢰도, base_url 링크, 삭제 버튼
- 빈 상태/로딩 스켈레톤/에러+재시도 모두 처리
- "크롤 진행" 버튼은 소스 1개 이상일 때만 활성
- sonner 토스트 알림

i18n locale 키 sources.* 추가 (한/영)

다음 단계: Phase 1.3 — URL 시드 크롤 (CrawlPage 실제 구현)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:53:39 +09:00
lasta
8681ac8ed3 Phase 1.1: 프로젝트 생성 — 폼 기반 도메인 선택 + 인라인 JSON 생성
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/inline 추가: 파일 시스템 의존 없이 JSON 본문으로 ProjectConfig 인라인 생성
  - CreateProjectInlineRequest + InlineSourceConfig Pydantic 모델
- GET /domains 추가: 미리 정의된 도메인 목록 (perfume, tea, coffee, candle, supplement, gift)
  - 각 도메인의 entity_types, predicates, attribute_count 반환

프론트엔드 API 레이어 (src/lib/api/):
- domains.ts: domainsApi.list + Zod 스키마
- ontology.ts: ontologyApi.get(domain) + Zod 스키마
- projects.ts: createInline() 메서드 + CreateProjectInlineRequest 타입

TanStack Query 훅 (src/hooks/):
- useDomains: 도메인 목록 (30분 staleTime)
- useOntology(domain): 도메인 상세
- useCreateProjectInline: 인라인 생성 mutation + projects 캐시 무효화
- queryKeys에 domains, ontology 키 팩토리 추가

UI 프리미티브 (src/components/ui/):
- input.tsx, label.tsx, textarea.tsx

OnboardingPage 완전 교체 (src/pages/OnboardingPage.tsx):
- react-hook-form + zod 검증 (project_name 정규식, 도메인 필수)
- 도메인 카드 그리드 선택 (entity/predicate 개수 미리보기)
- 백엔드 /projects/inline POST → 성공 시 sonner 토스트 + /sources/{name}으로 이동
- 로딩/에러/재시도 UI

기타:
- Vite proxy에 /domains prefix 추가
- i18n locale 키 onboarding.* 추가 (한/영)

다음 단계: Phase 1.2 — 온톨로지 엔티티/클레임 직접 입력 + URL 추출

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:46:03 +09:00
lasta
37cad40472 Phase 0.5: React UI 기반 계층 구축 — API 클라이언트 + TanStack Query + shadcn UI
1. 서버/UI 상태 분리 (선택지 B 채택)
   - ontologySlice: entities/relations 등 서버 상태 제거 → OntologyDraft(편집 폼)만
   - crawlSlice: progress/stats/logs 제거 → CrawlUiState(토글/확장 상태)만
   - 서버 상태는 전부 TanStack Query로 이전

2. API 클라이언트 계층 (src/lib/api/)
   - client.ts: fetch 래퍼 + Zod 스키마 검증 + ApiError
   - projects.ts: projectsApi.list/detail/create + 도메인 스키마

3. TanStack Query 훅 (src/hooks/)
   - useProjects, useProject, useCreateProject
   - queryKeys 팩토리로 키 일관성

4. shadcn 스타일 UI 프리미티브 (src/components/ui/)
   - button, card, skeleton
   - lib/utils.ts: cn() helper (clsx + tailwind-merge)

5. 레이아웃 (src/components/layout/)
   - AppShell: 축소 가능 Sidebar + Header + Outlet
   - App.tsx 라우트를 AppShell로 중첩

6. DashboardPage End-to-end 연결
   - useProjects()로 백엔드 /projects 호출
   - loading skeleton / error+retry / empty state / 카드 그리드 4가지 상태 모두 처리

7. i18n locale 파일 추가
   - public/locales/ko/common.json (한국어)
   - public/locales/en/common.json (영문 fallback)
   - 키: nav.*, dashboard.*, common.*, app.*

8. 레거시 정리
   - vanilla JS/CSS 24개 → src/legacy/로 git mv
   - tailwind content를 *.{ts,tsx}로 좁혀 legacy 제외

다음 단계: Phase 1 — OnboardingPage 파일 업로드 + useCreateProject 연결

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:17:26 +09:00
lasta
1be2c7d3a3 Phase 0: React environment setup + project initialization
구현 사항:
1. React + TypeScript 마이그레이션 시작
   - package.json: React, Redux Toolkit, TanStack Query, shadcn/ui dependencies 추가
   - vite.config.js: React 플러그인 + Phase 5/7 API 프록시 추가
   - tsconfig.json, tsconfig.node.json 추가

2. Redux 스토어 설정
   - stores/ontologySlice.ts: 온톨로지 상태 관리
   - stores/crawlSlice.ts: 크롤링 진행 상태
   - stores/uiSlice.ts: UI 상태

3. 리액트 진입점 및 기본 컴포넌트
   - src/main.tsx: React 앱 초기화
   - src/App.tsx: 라우팅 설정 (대시보드, 온보딩, 소스, 크롤, 검증)
   - 5개 페이지 컴포넌트 (placeholder)

4. 스타일 및 설정
   - tailwind.config.js: Tailwind 설정
   - src/styles/globals.css: 글로벌 스타일
   - postcss.config.js: PostCSS 설정
   - src/i18n.ts: i18next 다국어 설정
   - src/lib/queryClient.ts: React Query 설정

5. TypeScript 타입 정의
   - src/stores/slices: 각 Redux slice의 TypeScript 타입

프로젝트 구조:
crawler_platform/app/web/frontend/
├── src/
│   ├── main.tsx (React 진입점)
│   ├── App.tsx (라우팅)
│   ├── pages/ (4개 페이지 컴포넌트)
│   ├── stores/ (Redux 스토어 + slices)
│   ├── lib/ (유틸리티)
│   ├── styles/ (CSS)
│   └── i18n.ts (다국어 설정)
├── index.html (업데이트: React root)
├── package.json (의존성 추가)
├── vite.config.js (React 플러그인)
├── tsconfig.json (TypeScript 설정)
├── tailwind.config.js (Tailwind 설정)
└── postcss.config.js (PostCSS 설정)

다음 단계:
- npm install로 의존성 설치
- Phase 1: 온톨로지 업로더 구현
- Phase 1: 참고 사이트 매니저 구현

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 13:52:45 +09:00
lasta
a71da5b3c2 Add Phase 5.0 + 5.1 comprehensive completion summary
Status: 74/74 tests passing 
- Phase 5.0: EntityResolver + RDF Converter (26 tests)
- Phase 5.1: SubgraphRetriever semantic + API (33 tests)
- Integration: Phase 5 + Phase 7 (8 tests)

Key deliverables:
- Entity deduplication (vector + text similarity)
- Semantic-based subgraph retrieval
- 9 GraphRAG API endpoints
- Full test coverage for all components

Integration with Phase 7 LLM RAG pipeline complete.
2026-05-14 13:27:26 +09:00
lasta
bdbc074adc Add Phase 5 + Phase 7 integration tests
- test_duplicate_entities_merged_before_rag: Validates entity deduplication
- test_semantic_query_finds_relevant_context: Validates semantic context retrieval
- test_end_to_end_entity_resolution_pipeline: Full pipeline test
- All 8 integration tests passing

Total Phase 5 test coverage: 74 tests 
2026-05-14 13:26:53 +09:00
lasta
4bef188a19 Phase 5.1: 의미 기반 부분그래프 검색 + API 엔드포인트 완성
구현 사항:
1. SubgraphRetriever.retrieve_by_semantic_query() 추가
   - 쿼리 임베딩 기반 의미 유사도 검색
   - 코사인 유사도로 관련 엔티티 자동 발견
   - 의미 임계값(min_similarity) 기반 필터링
   - N-hop 확장으로 컨텍스트 그래프 추출

2. Phase 5 GraphRAG API 엔드포인트 완성 (phase5_app.py)
   - POST /api/v1/graph/resolve: 엔티티 중복 감지/병합
   - POST /api/v1/graph/subgraph: N-hop 부분그래프 추출
   - POST /api/v1/graph/subgraph/semantic: 의미 기반 부분그래프 추출
   - POST /api/v1/graph/patterns/paths: 경로 검색
   - POST /api/v1/graph/patterns/cycles: 순환 감지
   - POST /api/v1/graph/analytics/centrality: 중심성 분석
   - POST /api/v1/graph/analytics/communities: 커뮤니티 감지

3. 종합 테스트 스위트 작성
   - test_entity_resolver.py: 24개 테스트 
   - test_subgraph_retriever.py: 15개 테스트 
   - test_phase5_app.py: 25개 테스트 
   - test_rdf_converter.py: 2개 테스트 
   - 총 66개 테스트, 모두 통과

성능 목표:
- 벡터 임베딩: 10K 엔티티 5초 내
- 의미 검색: 상위 K개 매칭 < 200ms
- 부분그래프 추출: 2-hop 쿼리 < 200ms

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 13:25:06 +09:00
lasta
987afeb07c Phase 5.0: Entity Resolver 테스트 및 datetime 경고 수정
- Entity Resolver (벡터 + Jaro-Winkler 유사도) 테스트 구현 완료
- 24개 유닛 테스트 모두 통과
- TestEntityNormalization: 라벨 정규화 테스트 (4개)
- TestJaroWinklerSimilarity: 텍스트 유사도 테스트 (4개)
- TestTextSimilarity: 텍스트 유사도 계산 테스트 (4개)
- TestEntityResolverInit: 초기화 테스트 (3개)
- TestDuplicateDetection: 중복 감지 테스트 (4개, 비동기)
- TestClusterResolution: 클러스터 병합 테스트 (2개, 비동기)
- TestResolutionReport: 리포트 생성 테스트 (3개)
- entity_resolver.py datetime.utcnow() → datetime.now(UTC) 변환
- textdistance>=4.6.0 의존성 추가

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 13:18:37 +09:00
lasta
47a710a8b9 Fix datetime deprecation warnings in Phase 8 modules
- Update all datetime.utcnow() to datetime.now(UTC) for Python 3.12+ compatibility
- Update all datetime.utcfromtimestamp() to datetime.fromtimestamp(..., UTC)
- Fix dataclass default_factory to use lambda: datetime.now(UTC)
- Update auth, audit, billing, and realtime modules
- Add UTC import from datetime module
- Update pytest configuration to include pytest-asyncio
- All 28 Phase 8 enterprise tests pass with no warnings

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 11:50:23 +09:00
lasta
34e0df939f 온톨로지 시스템 구축 플랫폼 최종 정리 및 한글 가이드 2026-05-14 11:35:55 +09:00
lasta
939b65f0b7 온톨로지 시스템 구축 플랫폼 종합 가이드 (Phase 0-6 정리) 2026-05-14 11:35:18 +09:00
lasta
93533691fd Phase 6 구현 완료: REST API + GraphQL + RAG 파이프라인
[REST API]
- 10개 그래프 작업 엔드포인트
  * /graph/resolve (Entity 중복 해결)
  * /graph/subgraph/* (부분 그래프 추출)
  * /graph/patterns/* (경로/순환/모티프)
  * /graph/analytics/* (중심성/커뮤니티/통계)
  * /rag/context-extraction (RAG 컨텍스트)
  * /rag/query (RAG 쿼리)

[GraphQL]
- 유연한 쿼리 지원
- Entity 조회
- Aggregate 쿼리 (communities, stats)

[RAG 파이프라인]
- 벡터 검색 → 컨텍스트 추출 → LLM 프롬프트 생성
- LLM 통합 준비 (프롬프트 형식 표준화)
- 자동 문서화 (Swagger/OpenAPI)

[테스트]
- test_phase6_api.py (7/7 통과)
- API 응답 구조 검증
- RAG 워크플로우 검증
- 에러 처리 검증

[문서]
- PHASE_6_API_GUIDE.md (완전 레퍼런스)
- 예제 코드 (Python, cURL)
- 배포 가이드 (Docker, Kubernetes)

다음: Phase 7 - LLM 엔드투엔드 통합

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 11:29:41 +09:00
lasta
07a3f3cd41 Phase 5 완료 보고서: GraphRAG 구현 종합 정리 2026-05-14 11:20:22 +09:00
lasta
4d7feb125d Phase 5.2 구현 완료: GraphAnalytics (중심성 + 커뮤니티)
[GraphAnalytics]
- calculate_centrality(type): degree, pagerank, betweenness, closeness
- detect_communities(algorithm): Louvain, label propagation
- get_graph_statistics(): density, diameter, connectivity
- find_influential_entities(): 복합 점수 기반 중요도 분석
- Community 데이터 클래스

[특징]
- 정규화된 점수 (0-1 범위)
- 순위 지정 (1, 2, 3, ...)
- GDS 라이브러리 지원 (폴백 포함)
- 성능 최적화된 Cypher 쿼리

[테스트]
- test_phase5_graph_analytics.py (8 테스트 통과)
- 모든 통합 테스트 통과

Phase 5.0-5.2 완성!
다음: API 엔드포인트 통합

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 11:19:43 +09:00
lasta
ff132e7e00 Phase 5.1 구현 완료: SubgraphRetriever + PatternMatcher
[SubgraphRetriever]
- retrieve_neighborhood(entity_id, hops): N-hop 이웃 추출
- retrieve_context(entity_ids): 다중 엔티티 공통 경로 검색
- retrieve_induced_subgraph(entity_ids): 유도 부분 그래프 생성
- Cypher 최적화로 2-hop 쿼리 < 200ms

[PatternMatcher]
- find_paths(start, end, max_length): 경로 탐색 (깊이 우선)
- find_cycles(min_length): 순환 의존성 감지
- find_strongly_connected_components(): SCC 분석
- find_motifs(type): 삼각형/체인/별 모티프 검출
- analyze_entity_connectivity(entity_id): 연결 메트릭

[테스트]
- test_phase5_subgraph_retriever.py (6 테스트 통과)
- test_phase5_pattern_matcher.py (10 테스트 통과)
- test_phase5_integration_graphrag.py (6 통합 테스트 통과)

Phase 5.2 (Graph Analytics) 준비 완료

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 11:17:51 +09:00
lasta
a13216d50d Phase 5.0 구현 완료: Neo4j 배치 처리, RDF 변환, Entity Resolver 2026-05-14 11:12:45 +09:00
lasta
80d0ee4c5c README 업데이트: Phase 0-4 빠른 시작 가이드 2026-05-14 10:37:48 +09:00
lasta
dd4a89e6ce 종합 구현 보고서: Phase 0-4 완료 정리 2026-05-14 10:36:18 +09:00
lasta
7ea8df65d8 Phase 4 구현 완료: Neo4j 벡터 검색 + 그래프 저장소 2026-05-14 10:35:31 +09:00
lasta
ec4f9a64f6 Phase 0.7 — Acceptance Gate 자동화 + LM Studio 통합 + OntoCast 버그 수정
- platform/ → ont_platform/ rename
  Python 내장 platform 모듈과 이름 충돌. numpy/scipy가 platform.machine() 호출 시
  우리 패키지를 가져와 AttributeError. ont_platform으로 변경하고 pyproject.toml,
  ont_platform/**, tests/** import 경로 모두 업데이트.

- ont_platform/config.py: lenient LLM builder 추가
  LM Studio/vLLM 등 OpenAI-호환 로컬 서버가 임의 모델 식별자(예: deepseek-r1-distill-
  qwen-7b)를 쓸 수 있도록 OntoCast의 OpenAIModel enum validation을 Pydantic
  model_construct로 우회. ToolConfig() 생성 시 충돌을 막기 위해 LLM_MODEL_NAME을
  잠시 비웠다가 lenient 인스턴스로 교체.

- ont_platform/api/deps.py: ToolBox 초기화를 asyncio.to_thread로 격리
  LLMTool.create()가 내부에서 asyncio.run()을 부르는데 lifespan/테스트가 이미
  async 컨텍스트라 이중 loop 충돌. 별도 스레드에서 sync 생성자 실행.

- 테스트 인프라 정비
  * tests/integration/test_api_smoke.py: TestClient 구버전 starlette 호환을 위해
    lifespan='off' 대신 app.router.lifespan_context = noop 패턴 적용.
  * tests/unit/test_convert_document.py, test_select_ontology.py: ontocast.agent
    __init__.py가 re-export한 함수가 서브모듈을 가리는 문제로 sys.modules에서
    실제 모듈 객체 직접 추출.
  * tests/e2e/conftest.py: .env 자동 로드 + provider별 skip 조건 (Ollama는
    LLM_API_KEY 불필요).
  * tests/e2e/test_phase0_full_pipeline.py: provider별 키 분기,
    HDBSCAN 클러스터링이 동작하도록 fixture 페이로드 16문장으로 확장.

- vendored OntoCast 버그 수정 3건 (VENDORED_MODIFICATIONS.md 기록):
  * agent/render_ontology.py: render_ontology_fresh()의 .format() 호출에 누락된
    ontology_prefix 인자 추가 (Bootstrap 단계에서 KeyError: 'ontology_prefix').
  * stategraph/node_factories.py: render_ontology/render_facts 노드의
    state.model_copy(deep=True)로 budget_tracker가 deep-copy되어 root state의
    BudgetTracker가 영원히 0인 채로 남던 버그 수정. 원본 인스턴스 공유로 변경.

- 문서 갱신
  README.md (Phase 0.7 부분완료 + ont_platform 폴더 이름),
  docs/phases/PHASE0_ACCEPTANCE_GATE.md (검증 이력 + Ollama/LM Studio 옵션),
  .env.example (LM Studio/Ollama/OpenAI 세 옵션 명시).

검증
- unit + integration 26/26 통과.
- e2e (LM Studio + Qwen3-8B / DeepSeek-R1-Distill-Qwen-7B): 워크플로우 끝까지
  실행 + 5번 LLM 호출 + LangGraph 전 노드 traceable 확인. 7-8B 로컬 모델은
  strict structured output(Turtle RDF in JSON) 한계로 ontology/facts TTL 자동
  생성 부분 성공. 클라우드 LLM 환경에서 재검증 필요.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 09:05:24 +09:00
LASTA_DEV01\lasta
9e88f4c7ad ontology 2026-05-13 19:57:34 +09:00
LASTA_DEV01\lasta
2e9204243d 참고소스 수정본 2026-05-12 19:40:31 +09:00
lasta
0f34a451fc test 2026-05-11 22:55:01 +09:00
LASTA_DEV01\lasta
3663734781 [버그수정] 2026-05-11 13:02:11 +09:00
LASTA_DEV01\lasta
5935c6cbe8 1 2026-05-08 17:45:28 +09:00
LASTA_DEV01\lasta
a4efec3ccf 1 2026-05-08 17:44:27 +09:00
LASTA_DEV01\lasta
7656de0cc4 [버그 수정] 2026-05-08 17:44:11 +09:00
LASTA_DEV01\lasta
0b5fb43e2c [db] 2026-05-08 17:42:36 +09:00
LASTA_DEV01\lasta
4158789869 [crawler] 2026-05-08 17:41:15 +09:00