EVA Agent Release Note
v2.6.0 (Mar 17, 2026)
Highlights
- Visual agent mode split: Add
detection_modeto the scenario contract, split out thevm_onlypath, and route visual analysis by graph mode. - Multi-frame reasoning expansion: Introduce/expand multi-frame manager and queueing paths, and strengthen vm-only/timeline interval control.
- Feedback pipeline refactor: Move feedback record/apply flow behind dedicated graphs and preserve per-analysis vector search metadata for downstream use.
- Chat/enrich contract alignment: Continue the
langmigration, normalize capture/priority/query handling, and align enrich/visual schemas with app-facing detection mode rules. - Model and deployment refresh: Add Qwen3.5-VL configs, move the default vLLM image to
0.17.1, introduce the downstreameva-agent-vllmchart, and expand Qdrant operational utilities.
Breaking Changes
- Scenario request contract update: Visual request
scenario_listitems now includedetection_mode, and graph selection depends on that field. - Enrich output contract update: Enriched scenarios now include
detection_mode, and capture mode behavior is expressed withTimelinesemantics instead of the earlier temporal wording. - Response schema adjustments:
AnalysisItem.labelis now optional, and response consumers should tolerateagent_meta.vector_search_infobeing attached per analysis item. - Language field migration:
app_langhas transitioned tolang; clients still relying on the old field should update request/response handling.
Features
- Detection mode support: Add schema/config support for
vm_onlyvsmulti_step, including app-aligned detection-mode classification. - Multi-frame manager support: Add multi-frame manager/queue components and detection-interval based package control for timeline-style reasoning.
- Vector-search metadata exposure: Persist per-analysis vector search metadata and surface it in visual-agent responses for downstream feedback and app handling.
- Feedback graph split: Route feedback record/apply through dedicated feedback graphs and service-layer nodes.
- Model coverage expansion: Add Qwen3.5-VL prompt/config variants and vLLM instruction-mode
extra_bodysupport for the Qwen3.5 family. - Enrich logic: Update enrich logic so scenarios that can operate on multi-frame inputs are enriched accordingly.
- Chat logic: Update chat logic so responses align with the newly added capabilities and changed behavior.
Fixes
- VM-only routing stability: Fix graph-name resolution and vm-only schema/prompt mismatches that could route requests incorrectly.
- Threshold and interval tuning: Repeatedly tune vm-only threshold handling and detection-interval control to reduce false behavior in monitoring mode.
- Schema/parser hardening: Make
AnalysisItem.labeloptional, align detection-mode/capture-mode schema handling, and fix parsing/normalization edge cases. - Chat/enrich request cleanup: Fix
chatstate -> chatinputrequest handling, language normalization, query normalization, and several prompt/config inconsistencies.
Config & Deployment
- Deployment version bump: Update chart/image/docker-compose defaults to the
2.6.0release line. - vLLM stack update: Move the default vLLM image to
0.17.1and add a downstreameva-agent-vllmHelm chart for shared-PV deployment patterns. - Qdrant operations expansion: Add/expand Qdrant migration, snapshot, restore, backup, and vector rebuild/update utilities.
- Helm/runtime cleanup: Refine Helm PV behavior, gate S3 sync init containers by flag, and remove older deploy value override files in favor of the newer chart layout.
Changelog (non-chore, 167 commits)
Show details
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)
Operationally impactful chores
7189158Bump the minor version baseline to2.6.08da76ceAdd thedeploy/folder to.dockerignore
v2.5.0 (Feb 12, 2026)
Highlights
- Chat interface cleanup: Start the transition from
chat_langtolang, and reorganize the shared meta schema by introducingMetaBase. - Visual-RAG pipeline improvements: Split
detection_scenarioanddetection_caseto improve the accuracy of the embedding/upsert/search flow. - RAG search quality improvements: Add
weighted_sum_powerscoring and introduce the text embedding modelintfloat/multilingual-e5-small. - Deployment runtime updates: Switch to Python 3.12 and move Qdrant to the official image.
- Operational automation: Expand AWS/Kubectl/Qdrant operational scripts and improve the model/prompt sync utility.
Breaking Changes
- Chat language field migration:
chat_langis planned to be removed inv2.6.0; uselang. - Meta schema changes: The meta structure has been reorganized around
MetaBase; review any existing meta parsing logic. - Container/env changes: Ollama/Qdrant env files were removed, and the Qdrant container/healthcheck approach changed.
Features
- Parser improvements: Add a custom Pydantic parser to simplify format instructions.
- RAG similarity metric: Add
weighted_sum_power-based score composition logic. - Logit registry relaxation: Return an empty dict when querying an unregistered key.
- Visual-RAG split embeddings: Add split embeddings for detection scenario/case and shared latency logging.
Fixes
- Enrich API stabilization: Fix 422 errors occurring on Enrich requests.
- Chat routing/history hardening: Improve
get_history, error paths, router value propagation, and parser guard logic. - Vector embedding pipeline cleanup: Refine the shared Visual Agent vector embedding/upsert/search flow.
Config & Deployment
- Baseline version upgrade: Align
Dockerfile/pyproject.toml/uv.lockto Python 3.12. - Qdrant runtime change: Remove the custom Qdrant image and switch to the official image with bash-based healthchecks.
- Model/prompt config sync: Extend
model_config_util.shto support agent scoping andmodel_typesyncing.
Changelog (non-chore, 35 commits)
Show details
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
Operationally impactful chores
6b81e03Add deploy utility scripts (AWS/S3/Kubectl/Qdrant)f0f16b5Normalize executable permissions for deploy scripts
v2.4.3 (Feb 09, 2026)
Highlights
- Align the
set_target_thresholdrange with EVA App.
Breaking Changes
- No breaking changes to external interfaces.
Features
- No new features (compatibility hotfix release).
Fixes
- Fix the app/agent mismatch by fixing the
set_target_thresholdallowed range to[0.1, 1).
Config & Deployment
- Sync threshold validation rules in action nodes/config files.
Upgrade Notes
- Clients that previously sent
1.0or values below0.1must adjust to the[0.1, 1)range.
Changelog (non-chore, 1 commit)
Show details
4d894e3fix: match target threshold range to EVA App [0.1, 1)
v2.4.2 (Feb 04, 2026)
Highlights
- Chat routing refactor: Rework the action/qna router flow around
router_valuespropagation. - History handling overhaul: Reorganize the
get_historypath and state types to strengthen QnA/error handling integration. - Visual/Enrich output alignment: Sync schemas/outputs (including
detection_case) and normalize priority/capture mode representations.
Breaking Changes
- Chat internal routing contract changes: State fields passed from pre-chat → router → action/qna were adjusted; re-check any custom node extensions.
- Output schema adjustments: Some enrich/visual field names and normalized output values were updated.
Features
- Expand Chat QnA/Router prompts and guidance copy, and add per-path guard logic.
- Bulk-update Exaone/Qwen config files to align chat flows and prompt versions.
Fixes
- Fix QnA router return values,
task_typepropagation, and parser exception handling in a series of patches. - Improve missing/incorrect
get_historybehavior and error-handling paths. - Reduce downstream parsing errors by normalizing Visual/Enrich output types and values.
Config & Deployment
- Update action/router/validator configs primarily under
config/chat_agent/**.
Changelog (non-chore, 50 commits)
Show details
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 graph/node refactor: Reorganize
one_step/two_stepintosingle_step/multi_stepand share the chain/message builders. - Enrich pipeline expansion: Reorganize
pre_enrich/enrich_scenario, strengthenmeta_core/priority/window handling, and add translation graph integration. - Chat architecture improvements: Switch state to BaseModel, unify build_chain, improve history handling, and add guard logic.
- Helm deployment improvements: Add model cache (PVC/S3) and ECR refresh paths, and reflect service configuration changes.
Breaking Changes
- Graph/node naming changes: Naming changes in the visual graph and some nodes require re-checking internal imports/config paths.
- Enrich config path changes: The structure changed from
multi_scenario→pre_enrich,single_scenario→enrich_scenario.
Features
- Introduce input-list/message-building utilities in Visual/Enrich nodes to establish a shared processing foundation.
- Add a translation graph/node to clearly separate translation handling paths within the enrich flow.
- Iteratively refactor Chat guard logic/messages/prompts/schemas.
Fixes
- Fix Pydantic validation errors for Visual feedback metadata (hotfix).
- Correct the Visual Agent request image type and resolve various typing/logging issues in enrich/translation paths.
Config & Deployment
- Apply model cache-related settings to the Helm chart and bump the chart version.
- Bulk-sync Chat/Visual/Enrich/Translation config files aligned to v2.4.1/v2.5.0.
Changelog (non-chore, 141 commits)
Show details
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
Operationally impactful chores (selected)
3637012Add model config helper script (model_config_util.sh)3565456Remove deprecated Helm chart (ollama)
v2.4.0 (Jan 21, 2026)
Highlights
- Feedback-vector loop improvements: Add
analysis_id-based feedback upsert and the metadata flow that links Visual results. - RAG/Qdrant search refinements: Expand metadata filters, apply a similarity threshold, and strengthen Qdrant integration options.
- API bootstrap structuring: Package routers, split DI and lifecycle, and introduce graph registry bootstrapping.
- Language/output quality: Improve language handling and output schema alignment across visual/enrich/translation.
Breaking Changes
- Qdrant env var migration:
QDRANT_HOST/QDRANT_PORTwere removed; useQDRANT_BASE_URL. - Vector store factory args cleanup: With the host/port split args removed, review any initialization code that depends on them.
- Output field changes: The output structure related to detection scenario/case was gradually adjusted.
Features
- Support feedback payload expansion including
analysis_id/image_id, and analysis-scoped upsert. - Add automatic vector upsert for
alert=Trueresults to strengthen downstream search/correction flows. - Add KO/EN logit bias registry and language bias settings for Qwen3-VL-8B.
- Parallelize provider/model catalog probing and adjust default timeouts.
Fixes
- Fix provider option cache leakage, dictionary unbound issues, and nullable validation failures for camera context.
- Apply multiple refinements including enrich classifier exception handling, forced language handling, and translation preprocessing (including numeric words).
- Improve stability by cleaning up Visual/Enrich state and schemas, removing unnecessary fields/logging.
Config & Deployment
- Clean up docker build/compose paths and runtime env separation, and reflect vLLM endpoint separation.
- Update
.env.eva-agent.sampleand Qdrant-related env var docs to match the latest structure.
Tests & Quality
- During the large refactor, formatting/type-casting cleanups were accompanied by changes to the test structure.
- This range includes a unit test removal commit, so follow-up test coverage improvements are needed.
Upgrade Notes
- Make sure to switch deployments to use
QDRANT_BASE_URL. - Update clients to handle
analysis_idand extended meta fields for feedback/visual integration. - Re-check app initialization/DI dependency wiring due to the API bootstrap structure changes.
Changelog (non-chore, 132 commits)
Show details
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
Operationally impactful chores (selected)
870b36cPinuvversion in Dockerfile1a54b1cRemove unit tests (follow-up coverage improvements needed)
v2.3+a3.0 (Dec 26, 2025)
Highlights
- Large refactor to a LangGraph-based architecture: Introduce a new
app/layer (API/Core/Graph/Node/Provider/Schema), addGraphRegistry/GraphExecutor, and implement a YAMLConfigLoaderwith version resolution. - Visual Agent v1 overhaul: Run 1-step and 2-step sub-graphs in parallel in
basic_graphto consolidate results, and optionally run translation and image-description generation as a single end-to-end pipeline. - Stronger Feedback ↔ RAG loop: Add
/api/v1/agents/feedback/record, extract vector-store helpers/DI, and run vector search after visual queries to correct alerts based on historical feedback. - Config system redesign: Standardize the
config/{agent}/{graph}/{node}/{model}/{version}.yamllayout, add Qwen3-VL (FP8) configs, and keep legacy aliases (qwen2.5-vl-32b-awq) for compatibility. - Packaging/deployment defaults update: Switch the docker-compose default model to
Qwen3-VL-8B-Instruct-FP8and add vLLM performance flags; bump the eva-agent image tag to2.3-a3.0.
Breaking Changes
-
API schema and payload changes (important)
-
Visual query moved from the legacy single
vision.schemas.VisualQueryRequest/Responseflow toapp.schemas.visual_agent.VisualAgentRequest/Response(scenario_list-based, with a unifiedmetamodel). -
Feedback recording request schema is aligned around the unified
meta, and the endpoint is exposed as/api/v1/agents/feedback/record. -
The unified
metaschema is now enforced as Pydantic models inapp/schemas/common.py, so clientmetapayload shape is validated strictly. -
Config path/file layout changes (important)
-
Legacy config trees like
config/vlm/**,config/enrich_scenario/**, andconfig/llm/prompts/conversational_agent_system_prompt.mdwere removed or replaced; the server expects the newConfigLoaderpath convention. -
Environment variable cleanup
-
Deprecated provider/env vars (e.g.,
LLM_PROVIDER,LLM_MODEL,OLLAMA_BASE_URL) were removed from.env.eva-agent.sample; deployments should align to the updated sample. -
Internal module path changes
-
Legacy code such as
src/messages/**andsrc/vision/detection_scenario/**was removed and replaced by the new app layer; internal import paths changed significantly. -
Infra endpoint removed
-
The legacy
/infra/modelsendpoint was removed (main.py refactor).
Features
-
API layer
-
Router modularization and docs: dependency injection for RAG engines and vector-store config mapping via
app/api/v1/{visual,chat,enrich,feedback}andapp/api/dependency.py. -
Add a 422 validation exception handler and provide
health/healthzendpoints. -
Visual Agent
-
Multi-scenario requests:
scenario_listinput and per-scenario results returned inanalysis_list. -
Vector-search-based alert correction: search feedback-backed few-shot data to adjust alerts; record embedding/search/correction steps in Langfuse spans.
-
Translation pipeline: when an alert triggers, translate only the candidates via
TranslatorGraph, in parallel with image-description generation. -
Enrich Agent
-
Refactor Enrich graphs into async nodes, strengthen output schema/fields, and reflect area/metadata more consistently.
-
(Experimental) Multi-scenario enrichment: add classifier/decomposer-driven case splitting.
-
Providers and model catalog
-
(Internal) Improve per-provider model listings and consolidate catalog utilities.
-
Observability
-
Stronger Langfuse tracing for Visual-Agent/Feedback/Chat-Agent: hierarchical spans, trace metadata updates, scenario context propagation.
-
Content-aware image redaction: scrub not only base64/data URLs but also payloads that decode to known image-byte signatures.
-
Documentation
-
Add
README_DEV.mdand layer-specific guides for App/Core/Graph/Node.
Fixes
-
Visual Agent stability and correctness
-
Fix 2-step inference edge cases (exceptions), sorting, and output schema issues; stabilize scenario ordering.
-
Fix
Nonearea handling and language-related issues (e.g., forcing English for area strings). -
Fix translation logic (duplicate generation/update bugs) and output formatting.
-
Chat Agent UX and consistency
-
Improve unsupported request flow and prevent task type leakage into system answers.
-
Clarify detection interval units/messages, adjust false detection cutoff range, and fix target extraction/validation.
-
RAG/Qdrant
-
Improve Qdrant URL/env handling and related utilities (e.g., base URL support).
Config & Deployment
-
Docker Compose
-
Switch vLLM default model to Qwen3-VL (FP8) and add flags like KV cache dtype, chunked prefill, and prefix caching.
-
Update eva-agent image version to
eva-agent:2.3-a3.0. -
Config
-
Add large sets of versioned YAML configs for Visual/Chat/Enrich/Translation agents under the new path convention.
Tests & Quality
- Apply pre-commit formatting/style fixes (black/isort, whitespace cleanup, etc.).
Upgrade Notes
-
API clients
-
Visual query/feedback/enrich/chat payloads are now based on the unified
metamodel; update clients usingapp/schemas/*.pyas the source of truth. -
Visual query now returns per-scenario results via
analysis_list; update any legacy single-scenario response parsing. -
Config
-
Migrate any legacy
config/vlm/**andconfig/enrich_scenario/**setups to the new convention:config/{agent}/{graph}/{node}/{model}/{version}.yaml. -
Env & Docker
-
Align environment variables with
.env.eva-agent.sample(deprecated vars removed) and review vLLM/Agent settings after the docker-compose default model/options change. -
For local runs (
python main.py), the default port is8888; review any existing port/healthcheck assumptions.
v2.2+a2.0 (Oct 2, 2025)
Highlights
- End-to-end Vision API v2 wiring across visual, scenario-enrichment, and feedback flows with typed envelopes and Langfuse v3 observability.
- New OpenAI provider and factory integration, alongside existing Ollama support.
- RAG layer refactor: introduce
AsyncEmbeddingEngineandAsyncVectorStoreEngine; retire legacyAsyncSearchEngine; addensure_space()and named-vectors flow. - Conversation Agent fully refactored into class-based tasks with improved intent/category routing and UX-oriented suggestions.
- Detection scenario enrichment pipeline consolidated and renamed to "enrich_scenario";
camera_idhandling relaxed to support pre-registration flows. - New, versioned configs for VLM (Qwen2.5-VL:32B v2.2.0) and RAG Visual Agent (v2.2.0) for consistent, reproducible environments.
Breaking Changes
-
Vision API schemas
-
VisualQueryRequestnow requiresvlm_model_name. -
Few-shot template now derives from
VLMScenarioAnalysis; field access updated,feedback_content→feedback_message. -
ScenarioEnricher result is now wrapped; VisualAgent returns a typed envelope (
LanguageModelAgentResponse[T],ChainBuiltResult). -
Feedback API v2: Request naming changed and extended: add
camera_id, renamefeedbacktofeedback_binary, add optionalfeedback_message. Wiring updated inmain.py. -
RAG/Vector store
-
Add
AsyncVectorStoreEngineand retireAsyncSearchEngine; split/rename embedding protocols. -
Named vector mapping required; call
ensure_space()for camera-scoped spaces. -
Conversation
-
IntentClassifierno longer pulls RAG context; prompt composer updated.
Features
-
Observability
-
Langfuse v3 client integration; per-request trace IDs; prompt previews recorded after ainvoke; image scrubbing.
-
Providers
-
Implemented an OpenAI provider with tests; added utilities to extract provider and model names.
-
Conversation tasks
-
New tasks: set notification interval and set feedback similarity threshold.
-
Suggested next actions in task responses (e.g., start monitoring, adjust thresholds).
-
Vision and enrichment
-
Consolidated scenario enrichment messages and schemas under
vision/detection_scenario; added new enrichment configs. -
Split the Visual Agent message builder; added guard logic for missing few-shot templates.
-
Configuration
-
Added VLM
qwen2.5vl:32bv2.1.2 and v2.2.0; added RAG configvisual_agent v2.2.0; improved Helm (including imagePullSecrets and an environment package CLI).
Fixes
-
Conversation routing and UX
-
Performed category detection only for AI messages; refined quick button text; removed the brightness strategy.
-
Forced English targets when setting targets; tuned prompt and validation details.
-
Clarified default/unit for notification intervals; added tests for minimum values and conversion logic.
-
Vision/enrichment correctness
-
Aligned detection scenario language with the query.
-
Preserved rendered prompts in span metadata and fixed trace update errors.
-
Build and tooling
-
Cleaned up the black language version; adjusted pre-commit/style.
v2.1+a1.2 (Sep 10, 2025)
This release is a major step forward, focusing on strengthening the RAG system, improving observability and tracing, and simplifying the development and deployment experience.
Key Features
-
Named-vector RAG and search: The RAG system was upgraded to support named vectors. This enables more precise multimodal search with weighted modalities (e.g., images, text, detection scenarios), delivering more accurate results.
-
Feedback-aware alert correction: Alerts are intelligently corrected based on user feedback, creating a self-improving feedback loop.
-
Dynamic Agent ID for LangFuse: Tracing uses a dynamic
agent_idbased on camera information, making request tracing and debugging much easier in multi-camera environments. -
Development and deployment improvements:
-
Docker optimization: Improved build speed and refined
docker-composefor local development. -
Local development scripts: Added
run_agent.shfor local runs with hot reloading. -
Ollama model warm-up: Preloads models on container startup to reduce first-request latency.
-
EKS deployment: Completed configuration work for Amazon EKS deployments.
-
Removed the
GENERAL_CONVERSATIONtask: Removed the general conversation task from the list of supported tasks.
v2.1+a1.1 (Aug 29, 2025)
Summary
Improved performance, maintainability, and consistency through internal system optimizations and refinements across the RAG embedding system and Langfuse tracing integration.
Key Changes
- RAG embedding improvements: Refactored the async embedding provider registry to improve image embedding efficiency.
- Improved Langfuse tracing integration: Externalized image data handling to increase modularity and reduce overhead.
- Standardized environment variable loading: Standardized loading behavior across the project for predictable configuration.
v2.1.0 (Aug 26, 2025)
Added
- SET_TARGET task localization: Added multilingual support for target-setting responses.
- Target management tasks: Introduced comprehensive management for adding, deleting, and setting targets.
- Centralized Langfuse tracing: Integrated a centralized tracing system for debugging.
- Conversation history usage: Included conversation history in agent prompts for context awareness.
- Dynamic LLM providers: Added a mechanism for easy switching and management across LLM backends.
- New conversation tasks: Added
ANSWER_SYSTEM_QUESTION(answer system questions) andHANDLE_UNSUPPORTED_REQUEST(handle unsupported requests). - VLM prompt configuration: Added and managed multiple VLM prompt versions, including v2.1.0.
v2.0.0 (Aug 8, 2025)
This is the first official release of EVA Agent, a conversational and visual AI agent.
Added
- Conversational Agent: Implemented a conversational agent with intent classification and dynamic prompt composition.
- Visual Agent: Introduced an agent for image analysis using configurable VLM backends.
- RAG pipeline: Built a pipeline that enriches user queries using knowledge base context.
- Vector stores: Added integration support for FAISS and Qdrant.
- FastAPI application: Developed a robust application serving capabilities via a RESTful API.
- Docker-based deployment: Built a multi-service environment including dependencies like Ollama and Qdrant.