EVA Agent Release Note
v2.7.0 (Apr 17, 2026)
Highlights
- VM recommendation 흐름 추가: 런타임 맥락에 맞는 모델 추천을 위해 전용 VM recommendation agent, API route, graph, schema, 버전별 설정을 추가했습니다.
- Langfuse retention 지원: Langfuse trace/media 정리를 위한 retention 도구와 런타임 지원을 추가하고, 관련 환경 변수 및 배포 기본값을 정비했습니다.
- Parser 파이프라인 리팩터링: 기존 parser 경로를 pre-parse, post-parse, output normalization 유틸로 재구성하여 structured/plain-text node 처리 일관성을 높였습니다.
- 시나리오/영역 계약 업데이트: scenario/image와 area 관련 스키마를 정비하여 list 기반 image 입력과 list 기반 area naming을 enrich 메타데이터에 반영했습니다.
- 멀티 프레임/전처리 개선: MFM trace/state 처리, polygon 영역 전처리, manager/bootstrap 경로의 DI 구성을 확장했습니다.
- 릴리즈 라인 갱신: 패키지와 배포 기본값을
2.7.0라인으로 상향하고 compose/chart 기본값을 최신 릴리즈에 맞췄습니다.
Breaking Changes
- Scenario image 계약 변경: scenario image 입력이 list 기반 값을 허용하므로, 단일 문자열만 가정하던 연동 로직은 요청 생성 방식을 갱신해야 합니다.
- Area 필드 전환: 영역 메타데이터가 기존 단일 필드 대신 list 중심 필드(
area_names,areas)를 사용하므로 downstream schema binding 점검이 필요합니다. - Brightness 명령 동작 강화: 채팅 기반 brightness 변경은 더 엄격하게 제한되며, brightness mode는
none같은 문자열 값을 명시적으로 사용합니다.
Features
- VM recommendation agent: Exaone4.0, Qwen3-VL, Qwen3.5-VL용 버전별 설정과 함께 새로운 recommendation API/graph 경로를 추가했습니다.
- Langfuse retention 도구: trace/media cleanup을 위한 retention script, observability helper, secret/env 지원을 추가했습니다.
- Custom parser 스택: output parser, pre-parse, post-parse, normalization 유틸을 도입해 node 출력 처리를 표준화했습니다.
- Polygon area 전처리: polygon 기반 영역 전처리와 area-name 처리 로직을 추 가해 scenario/region 처리를 개선했습니다.
- MFM trace/queue 가시성: 멀티 프레임 요청에 대해 frame 단위 trace 분리, queue state trace, early-return span 처리를 추가했습니다.
- Bootstrap/API 정리: bootstrap 관심사를 전용 API bootstrap 모듈로 옮기고, MFM manager를 직접 생성하지 않고 DI로 주입하도록 정리했습니다.
Fixes
- Chat 스키마 정리: chat history 처리, scenario typing, plain-text node parsing을 보완해 chat 파이프라인 안정성을 높였습니다.
- Area/스키마 보정: area type 처리와 area naming을 보정하고 brightness/scenario payload 기본값을 정리했습니다.
- 모니터링 제어 수정: turn-off 동작과 brightness 설정 예외를 수정하고
none/None계열 값 처리를 명확히 했습니다. - Visual agent 안정화: VLM priority, scenario wording, preprocessing 동작을 계속 조정해 응답 일관성을 개선했습니다.
Config & Deployment
- 릴리즈 버전 상향: package metadata, chart 기본값, docker-compose 기본값을
2.7.0으로 상향했습니다. - 기본 런타임 로그 레벨 추가: EVA Agent chart 기본 values에
LOGURU_LEVEL=INFO를 추가해 기본 런타임 로그 기준을 명확히 했습니다. - 환경 샘플 갱신:
.env.sample,.env.eva-agent.sample을 현재 runtime 분리 구조와 observability 설정에 맞게 갱신했습니다. - vLLM router 지원: 여러 static engine과 함께 사용할 수 있도록 공식 vLLM router 지원 코드와 설정을 추가했습니다.
Changelog (selected commits)
펼쳐보기
c59bf2a3feat: new area preprocess logic(polygon)33393045Hotfix/chat history schemafa0143d4fix area typeb8f60168fix turn-off mode8bfbec43add: dynamic pydantic model description utilsad851737add type of the scenario list713e1bdachange scenario.image (str) to (list)9570e267(ban) change brightness via chatcb4884a3feat: add vm recommendation agent26ccb7d8feat: meta_core's area to area_names (field name: areas, list of area name)5e500f81feat: frame별 trace 분리 + mask function 적용 (timeout 이슈)47275b59feature: add mfm_early_return span and mfm queue state for each requestd6edb736update: bright setting schema to allow string 'none' and allow None for offset5486a5b7update: api schema5da8f586feat: langfuse retention temp commit69a98726refactor: applied custom parser to remaining nodes, reqplaced StructuredOutputParser to Pydanticed016eb4feat: custom parser w/ output normalization04cc7e01upgrade VLM prioirty1f040747add tag folder3a2d307fupgrade VAa75cf8dfrefactor: inject MFMManager using DI (not instantiate at router directly)16b73492chore: change folder name service to bootstrap (API layer)17980ed3chore: add LOGURU_LEVEL as 'init' for default chart values (EVA Agent)90b60d9aadd: vllm router for multiple static vllm engines (official vllm router from vllm production stack)
v2.6.0 (Mar 17, 2026)
Highlights
- Visual Agent 모드 분리: 시나리오 계약에
detection_mode를 추가하고vm_only경로를 분리하여 그래프 선택을 모드 기반으로 전환했습니다. - 멀티 프레임 추론 확장: multi-frame manager/queue 경로를 도입·확장하고 vm-only 및 timeline 계열 감지 간격 제어를 강화했습니다.
- Feedback 파이프라인 재구성: feedback record/apply 흐름을 전용 graph로 분리하고 분석 단위 vector search 메타데이터를 후속 처리에 활용할 수 있게 정리했습니다.
- Chat/Enrich 계약 정렬:
lang전환을 이어가고 capture/priority/query 처리 규칙을 정리하면서 enrich/visual 스키마를 앱 계약과 맞췄습니다. - 모델/배포 구성 갱신: Qwen3.5-VL 설정을 추가하고 기본 vLLM 이 미지를
0.17.1로 갱신했으며, downstreameva-agent-vllmchart와 Qdrant 운영 유틸을 확장했습니다.
Breaking Changes
- 시나리오 요청 계약 변경: Visual request의
scenario_list항목에detection_mode가 포함되며, 실제 그래프 선택도 이 필드에 따라 결정됩니다. - Enrich 출력 계약 변경: Enrich 결과에도
detection_mode가 포함되며, capture mode 의미가 기존 temporal 표현에서Timeline중심 의미로 정리되었습니다. - 응답 스키마 조정:
AnalysisItem.label은 optional이 되었고, 분석 항목별로agent_meta.vector_search_info가 포함될 수 있으므로 응답 소비 측 로직 점검이 필요합니다. - 언어 필드 전환:
app_lang는lang로 전환되었으므로 기존 필드에 의존하던 클라이언트는 요청/응답 처리 로직을 갱신해야 합니다.
Features
- Detection mode 지원:
vm_only와multi_step를 구분하는 schema/config를 추가하고 앱 계약과 맞춘 detection mode 분류를 도입했습니다. - Multi-frame manager 지원: timeline 계열 추론을 위해 multi-frame manager/queue 구성과 detection interval 기반 package control을 추가했습니다.
- Vector search 메타데이터 노출: 분석 단위 vector search 메타데이터를 저장하고 visual-agent 응답에 포함해 feedback/app 후속 처리에 활용할 수 있게 했습니다.
- Feedback graph 분리: feedback record/apply API를 전용 feedback graph와 service-layer node로 분리했습니다.
- 모델 커버리지 확장: Qwen3.5-VL 프롬프트/설정 변형을 추가하고 Qwen3.5 계열용 vLLM instruction-mode
extra_body를 지원했습니다. - Enrich 로직: 멀티 프레임 기반으로 동작할 수 있는 시나리오로 enrich 하도록 업데이트 했습니다..
- Chat 로직: 새로 추가된 사항 및 변경된 동작에 맞는 답변을 하도록 업데이트 했습니다.
Fixes
- VM-only 라우팅 안정화: graph-name 해석 및 vm-only 스키마/프롬프트 불일치를 수정해 잘못된 그래프 경로로 빠지는 문제를 보완했습니다.
- Threshold/interval 튜닝: monitoring 경로의 오동작을 줄이기 위해 vm-only threshold와 detection interval 제어를 여러 차례 조정했습니다.
- Schema/parser 보강:
AnalysisItem.labeloptional 처리, detection mode/capture mode 스키마 정렬, 파싱/정규화 예외 처리를 보강했습니다. - Chat/Enrich 요청 정리:
chatstate -> chatinput처리, language normalization, user query normalization, 프롬프트/설정 불일치를 다수 정리했습니다.
Config & Deployment
- 배포 버전 상향: chart/image/docker-compose 기본값을
2.6.0릴리즈 라인에 맞췄습니다. - vLLM 스택 업데이트: 기본 vLLM 이미지를
0.17.1로 올리고 shared PV 배포 패턴을 위한 downstreameva-agent-vllmHelm chart를 추가했습니다. - Qdrant 운영 도구 확장: Qdrant migration, snapshot, restore, backup, vector rebuild/update 유틸을 추가·확장했습니다.
- Helm/runtime 정리: Helm PV 동작을 보정하고 S3 sync init container를 flag 기반으로 제어하며, 이전 deploy override 파일들을 새 chart 구조에 맞게 정리했습니다.
Changelog (non-chore, 167 commits)
펼쳐보기
d002689update: default image tag to 2.6.0cbad2e7update: chart version to 2.6.08b18017add: extra_body for vllm's instruction mode (Qwen3.5 VL model only)933737badd: qwen3.5-vl-9b model confif yaml files4397cf5update: vllm default image tag to 0.17.1 to use qwen3.5 family33f33d7upgrade message50df0e3change prompt for set target8bd2573update: docker compose yaml file50f0935add: span + trace level score at feedback apply graph (node-level)72ba9e2modify config & fix node utilsc96065fmodify config0c93142rm filesb832ab0upgrade configs09dfc37upgrade chat/alert message8fca3beadd: trace metadata for mfm early returned requestsd6000eaupdate functionbb063a6apply MR commnets7bb5fe1fix lang14dc255fix capture mode to lower4d1bb3cfix: apply updated img description schema for vm-only graph6f6ce6drm logs5c2d24bupgrade chat4eaaf58update: trace name for each mode for visual agent API0d1fce2fix: apply mfm for vm_only to control detection intervale4c5602update: set vm_only mode's threshold value to 0.98 (from 0.99)099c895upgrade vision model info for chat agentd49f405fix code based on the MR's commentc51e1bahotfix: update vm_only threshold value to 0.99d59a67cfix normalize function643fbe5fix normalize function326131fclean enrich state1b02e35fix chatstate->chatinput for the chat api requestc410b75change get language function name26bce9cfix: _resolve_graph_name always return vm_graph7d5b4b7Applied parallel2c8b12fChanged description abatch -> ainvoke2824baarm Exceptions1723047update chat messages0c9dd5frm lines from mfm preprocessa324013rm configs (exaone-vlm)11fe760upgrade enricher3ef75adAdded VmState & Seperated VmGraph54d5f9aupgrade configs(Exaone)728ada2upgrade multi step362deebEdit get_output.py420dc60fix codes based on Merge Review's commentsb2ed805add enricher's edge20ebaacEdit v2.5.0.yaml52cfaaaFormated vm_only detection messagef904b8dchange order of the complied graph's input0533f24change priority list687af55add edgecc51307update normalize ndoee8e81e6add function type and capitalize to the frame modeff87870add var4cad6beupgrade priority chat1a01befupdate context29a63b4change the name of the context schema16015ddadd logic233a3e1del test code4be6474update enricher;'s capture modeee7430bchange capture mode6632b88fixed bug6f5471dAdded detection mode node3c6b98eupgrade temporal logic4ee6805upgrade enrich promptff668e4upgrade prioritycf8065aupgrade chat12de6c6echange priority;s default value to standardd911b68change low state to standard statef3cf1e7change str type3c181e4rm priority from enrich12e794bupgrade multi framee372aa0update img_description and check user query sectionf2635a2upgrade the exception logic5e84ce4reverse upgrade7431ed3fix parsing bug33741c8fix: update AnalysisItem.label as optional7d9f6bcfeat(schema): align detection mode and app-level config contractd63c599update enrich schema and rm debug log630ef2afeat(visual-agent): persist per-analysis vector search meta8402a86rm logs83fcbd7updage enrich fewshot0c35698update multi image agent logic and preprocessing logic1ebd4a2rm priority from enriched input7e2c806clean states(enrich/chat)676cf0fchange configs to llm(Exaone)36068farm logs; solve bugs96c4499update english fewshotsf166d91update english logitsd78a8b4update configsd944ec9update configs0f83ff9update configsb477b7fupdate enrich5b46dc4upgrade configsd0e4009update configscf778e5upgrade enricher4c4ad0fupgrade enrich5038f2achange exception_condition_per_exception to exception_condition_per_scenariof23160dadd annotations; chataca1994add annotations; enricherf3eafcfrefactor; enricher stateab0657brefactor; chat state; change input state3ad9ac1refactor; chat state1593ed4update logic3971f8bupdate configs6ece08dupdate english fewshot24e5f5cupdate enrichc252985rm logs92bcab2revert complete(collab upload version5c8752frevert 2ab7f3608e53e3e1a4141cfa32e76fb5aafcf518e27216drevert 2ab7f3608e53e3e1a4141cfa32e76fb5aafcf51833b391frevert 2ab7f3608e53e3e1a4141cfa32e76fb5aafcf518ec44b6fupdate detection performancec0fcf41revoke the exception upgrade37d924eupgrade detection logic(exception upgrade)6f3d1dbupgrade schema0189600update schemaefbd365upgrade enrichb49d619update mask situation24014fdupdate schema and enrich fewshot44e7bf1upgradec789218update multi framedd7081dupdate prompt2ab7f36update va schema8f21536upgrade enrichbd891c3upgrade logic88594b5upgrade fewshot97d1c00fix bug58f2fe2fix errorce0212fupdate VA logicf3fbb5aupgrade schema414a98crm logs8a99abdupgrade exception logic (change to it to batch logic)619e0e5change exceptions to excluded situations427ca0bapp_lang->lang3c0bddcstyle: camera package log8eceb78rm videos8d0bb2bresolve conflictfea49c9fix check user query bug1aa0d08feat(graph_runtime): GraphExecutor를 CompiledStateGraph cache 중심 구조로 전환392e5e1refactor(config): normalize YAML discovery + path parsing helpers (no behavior change)76d50a3refactor(visual-api): delegate feedback apply stage to ApplyFeedbackGraph920426drefactor(feedback-api): route record endpoint through RecordFeedbackGraphd4534b5refactor(feedback-pipeline): extract feedback graph/node service layer foundation14ba636refactor(graph-runtime): fix decorator typing + tighten graph instance types14cfcb9fix(helm): gate s3 sync init container by flag5a854c3feat: qdrant migration & backup helper utilsa57a346remove: deprecated files59ba357fix: chart behaviour (allow dynamic pv with values)f2ff678add: downstream custom vllm chart (allow dynamic shared pv + helm annotation)6cfa020remove: helm values override yaml files07e5b04feat: Package Control based on Detection Interval (Alert-Interval)31c9e9brefactor: minor changes2c41451update eng fewshota781edfupdate pyproject925e488upgrade agent logicaf8d6e3fix last frame3aef014add TODO57f8b51update VA and EA for multi frame7a7665erefact: mfm refactor5bfeec4fix: request param error60d25ebupdate: early return if no package181638dupdate: package class for visual agentf830971feat: add multi-frame manager and queues7f44c07merge: save router as snapshot to merge develop branch (reflect latest)68f4eb1merge: save router as snapshot to merge develop branch (reflect latest)
운영 영향 chore
7189158minor version 기준을2.6.0으로 상향8da76ce.dockerignore에deploy/폴더 추가
v2.5.0 (Feb 12, 2026)
Highlights
- 채팅 인터페이스 정리:
chat_lang에서lang중심으로 전환을 시작하고,MetaBase도입으로 공통 메타 스키마를 재정렬했습니다. - Visual-RAG 파이프라인 고도화:
detection_scenario와detection_case를 분리해 임베딩/업서트/검색 흐름의 정확도를 높였습니다. - RAG 검색 품질 개선:
weighted_sum_power점수 방식을 추가하고 텍스트 임베딩 모델intfloat/multilingual-e5-small을 도입했습니다. - 배포 런타임 업데이트: Python 3.12 기반으로 전환하고 Qdrant 이미지를 공식 이미지로 정리했습니다.
- 운영 자동화 강화: AWS/Kubectl/Qdrant 운영 스크립트를 확장하고 모델/프롬프트 동기화 유틸을 개선했습니다.
Breaking Changes
- 채팅 언어 필드 전환:
chat_lang는 향후(v2.6.0) 제거 예정이며lang사용이 권장됩니다. - 메타 스키마 변경:
MetaBase기반으로 메타 구조가 재편되어 기존 메타 파싱 로직 점검이 필요합니다. - 컨테이너/환경 구성 변경: Ollama/Qdrant 관련 env 파일이 제거되고 Qdrant 컨테이너/헬스체크 방식이 변경되었습니다.
Features
- 파서 개선: 포맷 지시를 단순화하는 커스텀 Pydantic 파서를 추가했습니다.
- RAG 유사도 측정 metric 추가:
weighted_sum_power기반 스코어 조합 로직을 추가했습니다. - Logit 레지스트리 완화: 미등록 키 조회 시 빈 dict를 반환하도록 정책을 완화했습니다.
- Visual-RAG 구분 임베딩: detection scenario/case 분리 임베딩과 공통 지연 측정 로깅을 추가했습니다.
Fixes
- Enrich API 안정화: Enrich 요청에서 발생하던 422 오류를 수정했습니다.
- Chat 라우팅/히스토리 보강:
get_history, 에러 경로, 라우터 값 전달, parser 방어 로직을 다수 보강했습니다. - 벡터 임베딩 경로 정리: Visual Agent 벡터 임베딩/업서트/검색 경로의 공유 흐름을 정비했습니다.
Config & Deployment
- 기반 버전 업그레이드:
Dockerfile/pyproject.toml/uv.lock을 Python 3.12 기준으로 정렬했습니다. - Qdrant 런타임 전환: 커스텀 Qdrant 이미지를 제거하고 공식 이미지 + bash 기반 헬스체크로 변경했습니다.
- 모델/프롬프트 설정 동기화:
model_config_util.sh를 agent 스코프와model_type동기화까지 확장했습니다.
Changelog (non-chore, 35 commits)
펼쳐보기
97b69eeDate: 2025-02-xx Scope: Visual agent vector embedding pipeline (shared embeddings, upsert/search flow)012e504upgrade chat historye2a2930upgrade chate3fae36update configb81fd83add: intfloat/multilingual-e5-small (text) embedding model9beba0cfeat: custom parser for simpler format instructiond55a20cfeat(rag): add weighted_sum_power scoringabbf149feat(visual-rag): split detection_scenario vs detection_case for embedding + ChatState validation + traceback logging + shared embed latency debug9fa158brm _ infront of function's name15cd4ebadd TODOc078393rm redundent logic1c90f1dadd edge for handle error81d9f6aadd get_history nodeeda1c7frefactor format_history52fa1c7refactor format_history7ab2689add todo2721184rm error log045738bupgrade handel_error promptd7f8124exaone prompt30e7c6dupdate: change chat_lang to lang (chat-lang will be deprecated from 2.6.0)98ca11crefactor(api): MetaBase 도입으로 Meta 분리1972859fix: request 422 error17a503cupdate: base python version to 3.12 from 3.119ba03d6deprecate: ollama docker configse2bf6ddremove: custom qdrant and use official image5d8b641update: qdrant healthcheck to use bash only (official image doesn't install curl)983ffe5docs: update READMEe115bc9docs: update README1a097e3docs: update .env.sample comment unnecessary fields & remove deprecated variableef9a6e1remove: ollama related env filese5f1950remove: qdrant env files96d5f57feat: loosen logit registry get policy (return empty dict if not exist)7212dcbremove: Exaone 4.0 configs from vlm relate agents37550bfupdate: config files to sync prompt & model_typef288f47feat(config): extend model_config_util with agent scoping and model_type update
운영 영향 chore
6b81e03deploy 유틸 스크립트(AWS/S3/Kubectl/Qdrant) 추가f0f16b5deploy 스크립트 실행 권한 정리
v2.4.3 (Feb 09, 2026)
Highlights
- EVA App 기준에 맞춰
set_target_threshold범위를 서버와 일치시켰습니다.
Breaking Changes
- 외부 인터페이스 브레이킹 변경은 없습니다.
Features
- 신규 기능 추가 없음(정합성 핫픽스 릴리즈).
Fixes
set_target_threshold허용 범위를[0.1, 1)로 고정하여 앱/에이전트 동작 불일치를 수정했습니다.
Config & Deployment
- 액션 노드/설정 파일의 임계치 검증 조건을 동기화했습니다.
Upgrade Notes
- 기존에
1.0또는0.1미만 값을 보내던 클라이언트는[0.1, 1)범위로 조정해야 합니다.
Changelog (non-chore, 1 commit)
펼쳐보기
4d894e3fix: match target threshold range to EVA App [0.1, 1)
v2.4.2 (Feb 04, 2026)
Highlights
- Chat 라우팅 체계 재정리:
router_values전달 기반으로 action/qna 라우터 흐름을 정비했습니다. - 히스토리 처리 개편:
get_history경로와 상태 타입을 재정렬하여 QnA/에러 처리 연계를 강화했습니다. - Visual/Enrich 출력 정합성 강화:
detection_case반영, 우선순위/캡처 모드 표현 보정 등 스키마/출력 동기화를 진행했습니다.
Breaking Changes
- Chat 내부 라우팅 계약 변경: pre-chat → router → action/qna로 전달되는 state 필드가 조정되어, 커스텀 노드 확장 시 재확인이 필요합니다.
- 출력 스키마 보정: enrich/visual 일부 필드명/출력 값 정규화가 반영되었습니다.
Features
- Chat QnA/Router 프롬프트와 가이드 문구를 확대하고, 경로별 방어 로직을 추가했습니다.
- Exaone/Qwen 설정 파일을 대량 갱신하여 chat 흐름과 프롬프트 버전을 맞췄습니다.
Fixes
- QnA 라우터 반환값,
task_type전달, parser 예외 처리를 연속 수정했습니다. get_history누락/오동작과 에러 핸들링 경로를 보완했습니다.- Visual/Enrich 출력 타입 및 값 정규화를 통해 후속 파싱 오류를 줄였습니다.
Config & Deployment
config/chat_agent/**중심으로 액션/라우터/검증기 설정을 업데이트했습니다.
Changelog (non-chore, 50 commits)
펼쳐보기
a4dc6fdchange translation state to Anyf9f45b2update route_task function and rm route_brightness functiond229cecchange get_history0be5635change chat_history 's typecb42b84change get_history function78c1fe7set language08009b4change set_target.pyc039bc7rm () from keysd3909d3update promptse12d8faadd guidefbf027erefactor chat llm772e98aupdate configs83fdb81update configs(Exaone)7744092add router value48fb79cadd router value to router functionsf76bd93fix error; action_router returns router_values0116c54fix error; qna_router returns router_values9e5af87fix error; give task_type to qna router573396bfix error; get_history47a0a8badd promptcabbf8erm files and change history length31f05a2update configs9975060update configsd5126afupgrade chat llm3d5c675(fin) upgrade chat agent for 2.5.0d9ae263rm logs814c530del Low in priority7536580add detection case in visual agent schema472b70fchange get output function53fd05aadd lower to prioritybb98fd6add lower to capture mode3b844a4change outputaa3e3c6update VAd2c7bceupdate agent810ba76fix bug8d967f6change schemas658dbeaadd defence logic4395b58change get_history8ed689afix parsersad25013fix error5f1f606upgrade chataace1cerm false positive feedback7d0feeeupdate configs1079d55change logs44924edchange camera2be4746rm foldersbdc5782rm varsf2ff78achange settings596ebbcclean codes1790751resolve conflict
v2.4.1 (Feb 01, 2026)
Highlights
- Visual 그래프/노드 리팩토링:
one_step/two_step을single_step/multi_step으로 재정렬하고 체인 빌더/메시지 빌더를 공통화했습니다. - Enrich 파이프라인 확장:
pre_enrich/enrich_scenario구조 정리,meta_core/priority/window 처리 강화, 번역 그래프 연계를 추가했습니다. - Chat 구조 고도화: BaseModel 상태 전환, build_chain 통일, history 관리, 방어 로직 강화가 대규모로 반영되었습니다.
- Helm 배포 개선: model cache(PVC/S3) 및 ECR refresh 경로를 추가하고 서비스 구성 변경을 반영했습니다.
Breaking Changes
- 그래프/노드 명칭 변경: visual graph 및 일부 노드 명칭 변경으로 내부 import/설정 경로를 재점검해야 합니다.
- Enrich 설정 경로 변경:
multi_scenario→pre_enrich,single_scenario→enrich_scenario로 구조가 바뀌었습니다.
Features
- Visual/Enrich 노드에서 입력 리스트/메시지 구성 유틸을 도입해 공통 처리 기반을 마련했습니다.
- Translation graph/node를 추가해 enrich 흐름 내 번역 처리 경로를 명확히 분리했습니다.
- Chat에서 방어 로직/메시지/프롬프트/스키마를 연속 개편했습니다.
Fixes
- Visual feedback metadata의 Pydantic 검증 오류를 핫픽스로 수정했습니다.
- Visual Agent 요청 이미지 타입을 보정하고, enrich/translation 경로의 타입/로깅 이슈를 다수 정리했습니다.
Config & Deployment
- Helm chart에 model cache 관련 설정을 반영하고 chart 버전을 갱신했습니다.
- Chat/Visual/Enrich/Translation 설정 파일을 v2.4.1/v2.5.0 기준으로 대규모 동기화했습니다.
Changelog (non-chore, 141 commits)
펼쳐보기
bf2be72add utils.py and build_messages function within110d6deadd build_messages function to two step and fix bug in build_messages function6142c38add build_messages function to one step nodebf18573add build_messages function to img_description nodeff655b2add build_messages function to alert_message nodee80bc6fadd get_input_list function in utils.py9077a91add get_input_list function to one_step node74615f1fix typo18786e3add get_input_list function to two_step node366c967add get_input_list and build_message function to two_step node(exception node)c7f4119rm get_input_list function9cebc30rm get_input_list function2f7afecadd build_visual_llm_runnable6ca40e5apply build_visual_llm_runnablec39f0adchange build_llm_runner to chain builder20692f6refactor build vlm chain82a7805refactor basic_graph.py and base graph28d253brefactor base.pye9d1f4arefactor one_step, two_step graphs2dbd6d8change the one-step graph;s name to single-step9ff5916change the two-step graph's name to multi-step6c407c5change result to pluralc1a3803clean state0db9caerm area stated116b54seperate multi step graph's node500b6c4clean node level python files6425524change exception to exception condition18f41dcchange exception to exception condition93eaadarm print and refactor check user query23efe54refactor image processor656e124add english to the language conditione1a9ee4apply get_vlm_chain function to enrich agent's node0da0953refactor enrich-agentb5fc250seperate kor/eng fewshot6a6d75afix error5d89744rm translation node and rm logs354e95crm logs1ea5fc4rm unused fieldsed0f7c4rm unused module04c60e3add required translation402fbe3refactor get_output.py3b27e9cchange the folder level of enrich agent446747fchange the node config for enrich agent"4cfd8f2change the path of the configs for enrich agent(multi_scenario to pre_enrich and single_scenario to enrich_scenariob047a39update version of the configs10bcc08update config version to 2.4.1c71d44dchange metadata to meta_core for adding the meta_priority and duration53b7780add priority node and apply to overall enrich pipeline0d28fd6add int>string convertion logic for priority680a197add temporal scope node and apply to overall enrich pipeline596b4d6upgrade priority prompt and fewshote14dd2bupgrade enrich priority's fewshot / prompt79398dfupdate temporal scope descriptione3e9cd3change temporal_scope to windowb4c5895rm annotationsf3a29d3change window logice6840bbchange window logic900a59bchange window to monitoring and add monitoring rangec1a43abrm korean examples from monitoring schemae3f7cabchange output format0171d90update config versions"799b871update check user query logic476b556upgrade config's version53c9bearm logger.errord9e15d5PR Title feat(helm): eva-agent에 model cache PVC 도입 + Service를 ClusterIP로 전환 (Chart/App 2.4.0)cd05124update utils.py3a7a218update image type for Visual Agent requestc1992e0upgrade utils.pyc39ecf4rm getattr in single_enricher.pyeaec6acrm useless getattr in this branch37ca4bfchange output type of route_by_translation function(in single enricher)29ac7e8change required_translation field to boolen type8e278bfrm logger in multi_step graph147a04aadd START nodef109434change enricher's logger (dict->pydantic)b09224drm translator-related functions from base.pye73ef2echange output type of build_graphcb2faf8add translation nodes/and graph2189664rm getattrfced1d2rm none2b69797clean logsf5ad44fadd assert and clean enrich agentfbb922dadd defend logicae56d1cchange type of the fewshotexample's payload17195beadd language option to build_vlm_chain79bd30fapply defense logicefad507assign response's type98eed36rm importing the time module for every nodec994878update get_output0574a2aadd defense logic97871b8change the type of the content888586dallow more ascii chars in translation utils894e933rm image_b64 from build_vlm_chain';s outputa355e7drm assert scneario_list208b265change type of the vars0daf8e0clean enrich state(sep fewhsgot state89bb455update utils.py7dbd221clean states196a721rm logseb53946rm list type from images335f14eadd mode/priority to agent logicbae1e17add defense logic for priority4a3fcf6change logic for mode/prioirty8bab795change camera settings to detection settingsd659fcdchange logic to detection settingsca7b2e8change mod_str->monitoring_str7b0783cchange monitoring to capture3bd66fbadd type for parser8bdd7dachange build_vlm_chain to build_chaine7e3398change state type from dict to basemodel6a13c29change typed dict state to basemodel state6e391d3add defense logic ( task_type=state.task_type or None, )dc68000add defense logicc22ef3dapply build_chain(to classify task type nodef647832replace codelines to the build_chain functions6d13a88add is_vlm var to build_chainc155a6arm unused modules56e6cc9limit chat historyba2cecfclean configs and add src for chat_history88231d6change prompt2269815error fixed3a05ad3clean promptc4e9475upgrade chat llm5014a52upgrade chat1d1f6deupgrade chat agent9c43e96upgrade chate972f6dupgrade chat884e3e1upgrade configs385ec25add eng descriptions66649a0add annotations32b2cd7add schemas59e82d2refactor llm agent9ed6f57add defense logicd5363cachange debugger's port7d7acafupdate messagesd7dd0b2update messagesdd79a12update messagesb926f35add defense logic5aeba08update configs56b764efeat(chart): add ECR refresh + S3 model cachee45f304fix: visual agent feedback's metadata pydantic model validation
운영 영향 chore (선별)
3637012모델 설정 보조 스크립트(model_config_util.sh) 추가3565456deprecated Helm chart(ollama) 제거
v2.4.0 (Jan 21, 2026)
Highlights
- 피드백-벡터 루프 강화:
analysis_id기반 피드백 upsert와 Visual 결과 연계 메타데이터 흐름을 추가했습니다. - RAG/Qdrant 검색 정교화: metadata filter 확장, 유사도 threshold 반영, Qdrant 연동 옵션을 강화했습니다.
- API 부트스트랩 구조화: router 패키지화, DI 및 lifecycle 분리, graph registry bootstrap을 도입했습 니다.
- 언어/출력 품질 보정: visual/enrich/translation의 언어 처리 및 출력 스키마 정합성을 다수 개선했습니다.
Breaking Changes
- Qdrant 환경 변수 전환:
QDRANT_HOST/QDRANT_PORT가 제거되고QDRANT_BASE_URL중심으로 변경되었습니다. - 벡터스토어 팩토리 인자 정리: host/port 분리 인자 제거에 따라 초기화 코드를 점검해야 합니다.
- 출력 필드 변화: detection scenario/case 관련 출력 구조가 점진적으로 보정되었습니다.
Features
analysis_id/image_id를 포함한 feedback payload 확장 및 analysis 단위 upsert를 지원합니다.- alert=True 결과의 자동 벡터 upsert를 추가해 후속 검색/보정 흐름을 강화했습니다.
- KO/EN logit bias 레지스트리 및 Qwen3-VL-8B용 언어 편향 설정을 추가했습니다.
- provider/model 카탈로그 조회 병렬화 및 기본 타임아웃 정비를 진행했습니다.
Fixes
- provider 옵션 캐시 누수, dictionary unbound, camera context nullable 검증 실패를 수정했습니다.
- enrich classifier 예외 처리, language 강제 처리, 번역 전처리(숫자 단어 포함) 등 다수 보정이 반영되었습니다.
- Visual/Enrich 상태 및 스키마 정리로 불필요 필드/로그를 제거하고 안정성을 높였습니다.
Config & Deployment
- docker build/compose 경로 및 런타임 env 분리를 정리하고, vLLM endpoint 분리를 반영했습니다.
.env.eva-agent.sample과 Qdrant 관련 환경변수 문서를 최신 구조에 맞춰 갱신했습니다.
Tests & Quality
- 대규모 리팩토링 과정에서 포맷팅/타입 캐스팅 정리와 함께 테스트 구조 변경이 동반되었습니다.
- 이 구간에는 단위 테스트 제거 커밋이 포함되어 있으므로 후속 테스트 보강이 필요합니다.
Upgrade Notes
- 배포 구성에서
QDRANT_BASE_URL을 사용하도록 반드시 전환하십시오. - feedback/visual 연동 시
analysis_id및 확장 메타 필드를 처리하도록 클라이언트를 갱신하십시오. - API bootstrap 구조 변경에 따라 앱 초기화/DI 의존 경로를 재확인하십시오.
Changelog (non-chore, 132 commits)
펼쳐보기
7c56352fix(providers): probe model catalog concurrentlyde528a5change the schema of the detection_results77e07ebfix sort_dictionary function9e0ef08fix sort_dictionary function in validator0fd63bdfix bug; add cls var in sort_dictionary in validator function65254cefix bug; update exceptions242752cadd comments1c5ed86rm print func87a969fchange the func name (sort_dictionary to sort_list)1b9f369Add grouping node0773dedAdd grouping schema4cf20c1add fewshot examples for multi-scenario grouping function068d600add situation explaination to collapsed person fewshot examplef2ecf1arefact: apply LLM registry's llm call pattern for each nodesf0aa8c4Add: build-system to .toml0cc3c57remove: deprecated visual-agent codeb7b777bRefactor: move /app/api to /src/eva_agent/api and resolve import path3b48a63remove: deprecated chat-agent related code70b548bRefact: move /src/rag to /src/eva_agent/core/rag to follow src layout8b2d111Refact: move langfuse related to /src/eva_agent/o11y/langfuse9f00230Remove: unused app/provider (replaced by src/providers)b88aeb5Refact: move src/providers to src/eva_agent/core/providers to follow src layout48a58f9remove: init from src(src is not module)8f3c0cerefact: move /app/core to corresponing name (graph / config) under eva_agent module's coref55deefRefact: move app/node & app/schemas under src/eva_agent/nodes/ src/eva_agent/schemas89e39d2Refact: move app/graph under src/eva_agent/graph5bd9e2dremove: main.py's path config (decouple import path dependency)274bdbfremove: deprecated app's module init.py50e1dc3Refact: move src/agents/models.py to src/eva_agent/core/providers/models.py548883eRefact: move src/vision/schemas.py to schemas/common.py & feedback.py22c7f12Remove: deprecated vision directory1afa147Update: build stage (copy src code first for uv build)c52b990Update: exclude READMD.md from docker ignore (toml's readme section added)af91b46fix: type7ebafa6add logs and prompt line for translation nodea733a2echange log level(info->debug)698f8abchange lang var flexible444b039change lang var non-flexible8956f80update translation promptbccae6fupdate translation logic83406edUpdate: default kv-cache-dtype for vllm to auto not fp8aadc86eUpdate: image tag for docker-image to 2.3-a3.1d70fefbUpdate: bump patch version (hotfix for translation logic)7843db1fix data type of area_num to intd436177update translation configdfb944eupdate the config(max_tokens) of enrich-agent7550ca3update the config(max_tokens) of enrich-agent(detection step)2f002a2Refact: visual agent API typinga756edaadd optional to enrich schema55b4425update visual agent(detection,exception) config0d3aabdfeat(docker): make venv copy deterministic and scope compile step to app code2dd23aaupdate: image tag version bump (patch)b7d7451update: proejct package version bump to 2.3.2e7fa623refact: add "model_type" key in registry and yaml9824398docs: create Exaone4.0 yaml files in chat agentd9dccd7update: fall-back to prompt and metadata part for configs1f69838update: add new seperated vllm endpoint for vlm/llm respectively to dockker-compose.yml4de7e72update: .env.eva-agent.sample to reflect env(runtime) splita53d754fix: raise timeout 5s(default) to 10s for langfuse clientc5c6793update: add timeout(30s) to each provider's default llm invoke parameter814a8dbremove: deprecated qdrant related env vars6d4025bRemove: QDRANT_HOST, QDRANT_PORT and replace them by QDRANT_BASE_URL4d4b72cRefact: stricter output validation for enrich agent output13631ccremove: host & port from vector store factory method (AsyncVectorStoreEngine)5dfefb8refactor(api): split enrich agent into package + router modulef546af2refactor(api): wire visual agent router via package export in main800eccfrefactor(api): convert chat_agent v1 endpoint into package85530d9refactor(api): convert feedback v1 endpoint into package9b90658refactor(api): extract FastAPI app + lifecycle out of main0dc6befrefactor(api): centralize router/graph registries7001c89Refactor GraphExecutor wiring to FastAPI DI (app.state + Depends)0555e5aRefactor: extract visual-agent RAG bootstrap into lifecycle service09f3842Add graph bootstrap registry loader (register_graphs) and update lifecycle/docsc5ecaefadd scenario_case in ScenarioList Schemae8af38badd scenario_case in function classyfiy steps9323b65change detection scenario to case in function get_output7a8948bconsider the situation when the case is None143e914feat(rag): broaden Qdrant metadata filtering2be4c71refactor(rag): widen metadata_filter signature to accept MetadataFilterSpec (keep dict)9968272Apply similarity score threshold in Qdrant store (preserve retrieved points)d9e9e9eadd analysis id into analysisItem schemac5d857aadd analysis id into get_output functionc5aa82bfeat(feedback): add analysis-scoped identifiers to visual feedback payloadffdc927feat(visual-agent): auto-upsert vectors for alert=True analysis items3aee412fix(visual-agent): preserve analysis_id and use UUID type end-to-end5e434edfeat(feedback): upsert feedback by analysis_id and carry image_id in metadata3446d62first commit6d3e4f5fix: make camera_context allow None (validation fails)346f803add: qwen3-vl-8b model logit_bias for KO/ENf38c7b7Add: logit_bias registry classc60aaebadd language settings and multi-processing nodes8c3385badd language logic20b81deadd logit bias to img description nodee351885update translation agent and rm useless function19d69beupdate enrich agent(logic bias851eef5update alert responseaca6df2change print->logger.debug and rm useless debugsef505ccrm scenario list and detection resultsd12f235rm current stepa57581arm non-used field in the visual agent's state73573a1rm useless lines2bf101crm logs111ca63rm unnessesary code7e4f01fadd description for the functions and rm unnessesary function in translator6393597add docstring3753d22add node config253ed34change the location of the image description6293746add description edge to basic grapha1627d6clean visual agent's state0fad732allow numeric words for translator pre-check logic8f5a997rm useless edgefc2b633re-name two-step graph's nodef36d0b5update the description of the alert message schemaacda558refact: language correctioncfa43f4rm non-used configsf152b1frm logs475f552modify lang setting for visual agent46e651amodify lang setting for enrich agent41f37a8modify lang setting for visual agent(change upper to lower letter05a25a6change the folder level of alert_message and img_description nodec3af090change the graph nome for alert_message and image_description nodes61ee3a4change llm_runnable for alert_message and image_description nodesd694a77change llm_runners for enrich agentab9adc8fix dictionary unbound prob2435467add logit for exaone13675fcfix(providers): ignore config options to prevent cached default leakagea43d256Docs: update REAMD.md to reflect latest version (v2.4.0)878c3efdocs: remove unnecessary sentenceseef0f0badd language force lines to the config filse0327e30add language to the human messagee66d470add try/except to the enrich classifier7ad7397modify visual agent's prompt
운영 영향 chore (선별)
870b36cDockerfileuv버전 pin1a54b1cunit test 제거(후속 보강 필요)
v2.3+a3.0 (Dec 26, 2025)
Highlights
- LangGraph 기반 아키텍처로 대규모 리팩토링: 새로운
app/레이어(API/Core/Graph/Node/Provider/Schema) 도입,GraphRegistry/GraphExecutor추가, 버전 해석 기능이 포함된 YAMLConfigLoader구현. - Visual Agent v1 전면 개편:
basic_graph에서 1단계 및 2단계 서브 그래프를 병렬로 실행하여 결과를 통합하며, 선택적으로 번역 및 이미지 설명 생성을 단일 엔드투엔드 파이프라인으로 실행하도록 개선. - 강력해진 Feedback ↔ RAG 루프:
/api/v1/agents/feedback/record추가, 벡터 저장소 헬퍼/의 존성 주입(DI) 추출, Visual 쿼리 후 벡터 검색을 수행하여 과거 피드백을 기반으로 알림을 교정하는 기능 추가. - 설정 시스템 재설계:
config/{agent}/{graph}/{node}/{model}/{version}.yaml구조로 표준화하고, Qwen3-VL (FP8) 설정을 추가했으며 호환성을 위해 기존 별칭(qwen2.5-vl-32b-awq) 유지. - 패키징 및 배포 기본값 업데이트: docker-compose의 기본 모델을
Qwen3-VL-8B-Instruct-FP8으로 변경하고 vLLM 성능 플래그 추가; eva-agent 이미지 태그를2.3-a3.0으로 업데이트.
Breaking Changes
-
API 스키마 및 페이로드 변경 (중요)
-
Visual 쿼리가 기존의 단일
vision.schemas.VisualQueryRequest/Response흐름에서app.schemas.visual_agent.VisualAgentRequest/Response로 이동 (scenario_list 기반, 통합meta모델 사용). -
피드백 기록 요청 스키마가 통합
meta를 중심으로 정렬되었으며, 엔드포인트가/api/v1/agents/feedback/record로 노출됨. -
통합
meta스키마가app/schemas/common.py에서 Pydantic 모델로 강제 적용됨에 따라 클라이언트의meta페이로드 형식이 엄격하게 검증됨. -
설정 경로 및 파일 레이아웃 변경 (중요)
-
config/vlm/**,config/enrich_scenario/**,config/llm/prompts/conversational_agent_system_prompt.md와 같은 기존 설정 트리가 제거되거나 교체됨; 서버는 새로운ConfigLoader경로 규칙을 따름. -
환경 변수 정리
-
더 이상 사용되지 않는 프로바이더/환경 변수(
LLM_PROVIDER,LLM_MODEL,OLLAMA_BASE_URL등)가.env.eva-agent.sample에서 제거됨; 배포 시 업데이트된 샘플에 맞춰야 함. -
내부 모듈 경로 변경
-
src/messages/**및src/vision/detection_scenario/**와 같은 기존 코드가 제거되고 새로운 app 레이어로 교체됨; 내부 임포트 경로가 크게 변경됨. -
인프라 엔드포인트 제거
-
기존의
/infra/models엔드포인트가 제거됨 (main.py 리팩토링).
Features
-
API 레이어
-
라우터 모듈화 및 문서화:
app/api/v1/{visual,chat,enrich,feedback}및app/api/dependency.py를 통한 RAG 엔진 및 벡터 저장소 설정 매핑 의존성 주입. -
422 검증 예외 처리기 추가 및
health/healthz엔드포인트 제공. -
Visual Agent
-
다중 시나리오 요청:
scenario_list입력 및analysis_list를 통한 시나리오별 결과 반환. -
벡터 검색 기반 알림 교정: 피드백 기반 퓨샷(few-shot) 데이터를 검색하여 알림을 조정; Langfuse 스팬(span)에 임베딩/검색/교정 단계를 기록.
-
번역 파이프라인: 알림이 발생하면 이미지 설명 생성과 병렬로
TranslatorGraph를 통해 후보군만 번역 수행. -
Enrich Agent
-
Enrich 그래프를 비동기 노드로 리팩토링하고, 출력 스키마/필드를 강화하며 영역(area) 및 메타데이터를 더 일관되게 반영.
-
(실험적) 다중 시나리오 보강: 분류기/분해기 기반의 케이스 분리 기능 추가.
-
프로바이더 및 모델 카탈로그
-
(내부) 프로바이더별 모델 목록 개선 및 카탈로그 유틸리티 통합.
-
관측 가능성 (Observability)
-
Visual-Agent/Feedback/Chat-Agent를 위한 강력한 Langfuse 트레이싱: 계층적 스팬, 트레이스 메타데이터 업데이트, 시나리오 컨텍스트 전파.
-
콘텐츠 인식 이미지 마스킹: base64/데이터 URL뿐만 아니라 알려진 이미지 바이트 시그니처로 디코딩되는 페이로드까지 스크러빙 처리.
-
문서화
-
README_DEV.md추가 및 App/Core/Graph/Node 각 레이어별 가이드 제공.
Fixes
-
Visual Agent 안정성 및 정확성
-
2단계 인퍼런스 예외 상황, 정렬, 출력 스키마 문제 수정; 시나리오 순서 안정화.
-
None영역 처리 및 언어 관련 문제 수정 (예: 영역 문자열에 영어 강제 적용). -
번역 로직(중복 생성/업데이트 버그) 및 출력 형식 수정.
-
Chat Agent UX 및 일관성
-
지원되지 않는 요청 흐름 개선 및 시스템 답변에 작업 유형이 유출되는 문제 방지.
-
감지 간격 단위/메시지 명확화, 오탐지 컷오프 범위 조정, 타겟 추출 및 검증 수정.
-
RAG/Qdrant
-
Qdrant URL/환경 변수 처리 및 관련 유틸리티(예: 베이스 URL 지원) 개선.
Config & Deployment
-
Docker Compose
-
vLLM 기본 모델을 Qwen3-VL (FP8)로 교체하고 KV 캐시 데이터 타입, 청크 단위 프리필(prefill), 프리픽스 캐싱 등 플래그 추가.
-
eva-agent 이미지 버전을
eva-agent:2.3-a3.0으로 업데이트. -
Config
-
새로운 경로 규칙에 따라 Visual/Chat/Enrich/Translation Agent를 위한 대규모 버전별 YAML 설정 추가.
Tests & Quality
- Pre-commit 포맷팅 및 스타일 수정 적용 (black/isort, 공백 제거 등).
Upgrade Notes
-
API 클라이언트
-
Visual 쿼리/피드백/보강/채팅 페이로드가 이제 통합
meta모델을 기반으로 함;app/schemas/*.py를 기준으로 클라이언트를 업데이트해야 함. -
Visual 쿼리는 이제
analysis_list를 통해 시나리오별 결과를 반환함; 기존의 단일 시나리오 응답 파싱 로직 업데이트 필요. -
Config
-
기존
config/vlm/**및config/enrich_scenario/**설정을 새로운 규칙인config/{agent}/{graph}/{node}/{model}/{version}.yaml로 마이그레이션 필요. -
환경 변수 및 Docker
-
환경 변수를
.env.eva-agent.sample에 맞추고(지원 중단 변수 제거), docker-compose 기본 모델/옵션 변경에 따른 vLLM/Agent 설정 재검토 필요. -
로컬 실행(
python main.py) 시 기본 포트는8888임; 기존 포트나 헬스체크 설정을 확인해야 함.
v2.2+a2.0 (Oct 2, 2025)
Highlights
- Visual, 시나리오 보강, 피드백 흐름 전반에 걸쳐 타입이 지정된 엔벨로프(envelope)와 Langfuse v3 관측 가능성을 적용한 Vision API v2 엔드투엔드 연결.
- 기존 Ollama 지원과 더불어 새로운 OpenAI 프로바이더 및 팩토리 통합.
- RAG 레이어 리팩토링:
AsyncEmbeddingEngine및AsyncVectorStoreEngine도입; 기존AsyncSearchEngine제거;ensure_space()및 네임드 벡터(named-vectors) 흐름 추가. - Conversation Agent를 클래스 기반 작업으로 전면 리팩토링하여 의도/카테고리 라우팅 및 UX 중심의 제안 기능 개선.
- 감지 시나리오 보강 파이프라인 통합 및 "enrich_scenario"로 명칭 변경; 사전 등록 흐름 지원을 위해
camera_id처리 완화. - 일관되고 재현 가능한 환경을 위해 VLM (Qwen2.5-VL:32B v2.2.0) 및 RAG Visual Agent (v2.2.0)를 위한 새로운 버전별 설정 추가.
Breaking Changes
-
Vision API 스키마
-
VisualQueryRequest에vlm_model_name필수 포함. -
퓨샷 템플릿이 이제
VLMScenarioAnalysis에서 파생됨; 필드 접근 방식 업데이트,feedback_content가feedback_message로 변경됨. -
ScenarioEnricher 결과가 래핑됨; VisualAgent는 타입이 지정된 엔벨로프(
LanguageModelAgentResponse[T],ChainBuiltResult)를 반환함. -
Feedback API v2: 요청 명칭 변경 및 확장 —
camera_id추가,feedback이feedback_binary로 변경, 선택적feedback_message추가.main.py의 연결 구조 업데이트. -
RAG/벡터 저장소
-
AsyncVectorStoreEngine추가 및AsyncSearchEngine은퇴; 임베딩 프로토콜 분리 및 이름 변경. -
네임드 벡터 매핑 필수; 카메라별 공간을 위해
ensure_space()호출 필요. -
Conversation
-
IntentClassifier가 더 이상 RAG 컨텍스트를 가져오지 않음; 프롬프트 구성기 업데이트.
Features
-
관측 가능성 (Observability)
-
Langfuse v3 클라이언트 통합; 요청별 트레이스 ID; ainvoke 후 기록되는 프롬프트 미리보기; 이미지 스크러빙 기능.
-
프로바이더
-
테스트가 포함된 OpenAI 프로바이더 구현; 프로바이더 및 모델 이름을 추출하는 유틸리티 추가.
-
Conversation 작업
-
신규 작업: 알림 간격 설정 및 피드백 유사도 임계값 설정 추가.
-
작업 응답에서 다음 행동 제안: 예) 모니터링 시작, 임계값 조정 등.
-
Vision 및 보강
-
시나리오 보강 메시지 및 스키마를
vision/detection_scenario아래로 통합; 새로운 보강 설정 추가. -
Visual Agent 메시지 빌더 분리; 퓨샷 템플릿 누락에 대한 가드 로직 추가.
-
Configuration
-
VLM
qwen2.5vl:32bv2.1.2 및 v2.2.0 추가; RAG 설정visual_agent v2.2.0추가; imagePullSecrets 및 환경 패키지 CLI를 포함한 Helm 개선.
Fixes
-
Conversation 라우팅 및 UX
-
AI 메시지에 대해서만 카테고리 감지 수행; 퀵 버튼 텍스트 정제; 밝기 전략 제거.
-
타겟 설정 시 영어 타겟 강제 적용; 프롬프트 및 검증 세부 조정.
-
알림 간격 기본값/단위 명확화; 최소값 및 변환 로직 테스트 포함.
-
Vision/보강 정확성
-
감지 시나리오 언어를 쿼리와 일치시킴.
-
렌더링된 프롬프트를 스팬 메타데이터에 보존하고 트레이스 업데이트 오류 수정.
-
빌드 및 툴링
-
black 언어 버전 정리; pre-commit/스타일 수정.
v2.1+a1.2 (Sep 10, 2025)
이 버전은 RAG 시스템 강화, 관측 가능성 및 트레이싱 개선, 개발 및 배포 경험 간소화에 중점을 둔 중요한 진전입니다.
Key Features
-
네임드 벡터 RAG 및 검색: RAG 시스템이 네임드 벡터를 지원하도록 업그레이드되었습니다. 이를 통해 이미지, 텍스트, 감지 시나리오 등 다양한 모달리티에 가중치를 둔 정교한 멀티모달 검색이 가능해져 더 정확한 결과를 제공합니다.
-
피드백 인지 알림 교정: 사용자 피드백을 기반으로 알림을 지능적으로 교정하여 스스로 개선되는 피드백 루프를 구축했습니다.
-
LangFuse용 동적 Agent ID: 카메라 정보를 기반으로 동적
agent_id를 사용하여 트레이싱을 수행합니다. 이를 통해 다중 카메라 환경에서 요청 추적 및 디버깅이 훨씬 쉬워졌습니다. -
개발 및 배포 강화:
-
Docker 최적화: 빌드 속도 개선 및 로컬 개발을 위한
docker-compose설정 개선. -
로컬 개발 스크립트: 핫 리로딩이 포함된 로컬 실행용
run_agent.sh추가. -
Ollama 모델 웜업: 컨테이너 시작 시 모델을 미리 로드하여 첫 요청 지연 시간 단축.
-
EKS 배포: Amazon EKS 배포를 위한 설정 작업 완료.
-
GENERAL_CONVERSATION작업 제거: 지원되는 작업 목록에서 일반 대화 작업을 삭제했습니다.
v2.1+a1.1 (Aug 29, 2025)
Summary
RAG 임베딩 시스템과 Langfuse 트레이싱 통합 전반에 걸친 내부 시스템 최적화 및 정제를 통해 성능, 유지보수성, 일관성을 향상시켰습니다.
Key Changes
- RAG 임베딩 시스템 강화: 이미지 임베딩 효율성 개선을 위해 비동기 임베딩 프로바이더 레지스트리 리팩토링.
- Langfuse 트레이싱 통합 개선: 이미지 데이터 처리 로직을 외부화하여 모듈성을 높이고 오버헤드 감소.
- 환경 변수 로딩 표준화: 프로젝트 전반에서 예측 가능한 환경 설정을 위해 로딩 방식 표준화.
v2.1.0 (Aug 26, 2025)
Added
- SET_TARGET 작업 로컬라이제이션: 타겟 설정 응답에 대한 다국어 지원.
- 타겟 관리 작업: 타겟의 추가, 삭제, 설정을 위한 종합 관리 기능 도입.
- 중앙 집중식 Langfuse 트레이싱: 디버깅을 위한 중앙 트레이싱 시스템 통합.
- 대화 이력 활용: 문맥 인지를 위해 대화 이력을 Agent 프롬프트에 포함.
- 동적 LLM 프로바이더: 다양한 LLM 백엔드 간 쉬운 전환 및 관리 메커니즘 추가.
- 신규 대화 작업:
ANSWER_SYSTEM_QUESTION(시스템 질문 답변),HANDLE_UNSUPPORTED_REQUEST(지원되지 않는 요청 처리) 추가. - VLM 프롬프트 설정: v2.1.0 등 다양한 VLM 프롬프트 버전 추가 및 관리.
v2.0.0 (Aug 8, 2025)
대화형 및 Visual AI Agent인 EVA Agent의 첫 번째 공식 릴리즈입니다.
Added
- Conversational Agent: 의도 분류 및 동적 프롬프트 구성 기능이 포함된 대화형 Agent 구현.
- Visual Agent: 구성 가능한 VLM 백엔드를 활용한 이미지 분석용 Agent 도입.
- RAG 파이프라인: 지식 베이스의 컨텍스트를 활용하여 사용자 쿼리를 보강하는 파이프라인 구축.
- 벡터 저장소: FAISS 및 Qdrant 통합 지원.
- FastAPI 애플리케이션: RESTful API를 통해 기능을 서빙하는 견고한 애플리케이션 개발.
- Docker 기반 배포: Ollama, Qdrant 등 의존성을 포함한 멀티 서비스 환경 구축.