Skip to main content

EVA Agent Release Note

v2.6.0 (Mar 17, 2026)

Highlights

  • Visual agent mode split: Add detection_mode to the scenario contract, split out the vm_only path, 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 lang migration, 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 downstream eva-agent-vllm chart, and expand Qdrant operational utilities.

Breaking Changes

  • Scenario request contract update: Visual request scenario_list items now include detection_mode, and graph selection depends on that field.
  • Enrich output contract update: Enriched scenarios now include detection_mode, and capture mode behavior is expressed with Timeline semantics instead of the earlier temporal wording.
  • Response schema adjustments: AnalysisItem.label is now optional, and response consumers should tolerate agent_meta.vector_search_info being attached per analysis item.
  • Language field migration: app_lang has transitioned to lang; clients still relying on the old field should update request/response handling.

Features

  • Detection mode support: Add schema/config support for vm_only vs multi_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_body support 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.label optional, align detection-mode/capture-mode schema handling, and fix parsing/normalization edge cases.
  • Chat/enrich request cleanup: Fix chatstate -> chatinput request 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.0 release line.
  • vLLM stack update: Move the default vLLM image to 0.17.1 and add a downstream eva-agent-vllm Helm 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
  • d002689 update: default image tag to 2.6.0
  • cbad2e7 update: chart version to 2.6.0
  • 8b18017 add: extra_body for vllm's instruction mode (Qwen3.5 VL model only)
  • 933737b add: qwen3.5-vl-9b model confif yaml files
  • 4397cf5 update: vllm default image tag to 0.17.1 to use qwen3.5 family
  • 33f33d7 upgrade message
  • 50df0e3 change prompt for set target
  • 8bd2573 update: docker compose yaml file
  • 50f0935 add: span + trace level score at feedback apply graph (node-level)
  • 72ba9e2 modify config & fix node utils
  • c96065f modify config
  • 0c93142 rm files
  • b832ab0 upgrade configs
  • 09dfc37 upgrade chat/alert message
  • 8fca3be add: trace metadata for mfm early returned requests
  • d6000ea update function
  • bb063a6 apply MR commnets
  • 7bb5fe1 fix lang
  • 14dc255 fix capture mode to lower
  • 4d1bb3c fix: apply updated img description schema for vm-only graph
  • 6f6ce6d rm logs
  • 5c2d24b upgrade chat
  • 4eaaf58 update: trace name for each mode for visual agent API
  • 0d1fce2 fix: apply mfm for vm_only to control detection interval
  • e4c5602 update: set vm_only mode's threshold value to 0.98 (from 0.99)
  • 099c895 upgrade vision model info for chat agent
  • d49f405 fix code based on the MR's comment
  • c51e1ba hotfix: update vm_only threshold value to 0.99
  • d59a67c fix normalize function
  • 643fbe5 fix normalize function
  • 326131f clean enrich state
  • 1b02e35 fix chatstate->chatinput for the chat api request
  • c410b75 change get language function name
  • 26bce9c fix: _resolve_graph_name always return vm_graph
  • 7d5b4b7 Applied parallel
  • 2c8b12f Changed description abatch -> ainvoke
  • 2824baa rm Exceptions
  • 1723047 update chat messages
  • 0c9dd5f rm lines from mfm preprocess
  • a324013 rm configs (exaone-vlm)
  • 11fe760 upgrade enricher
  • 3ef75ad Added VmState & Seperated VmGraph
  • 54d5f9a upgrade configs(Exaone)
  • 728ada2 upgrade multi step
  • 362deeb Edit get_output.py
  • 420dc60 fix codes based on Merge Review's comments
  • b2ed805 add enricher's edge
  • 20ebaac Edit v2.5.0.yaml
  • 52cfaaa Formated vm_only detection message
  • f904b8d change order of the complied graph's input
  • 0533f24 change priority list
  • 687af55 add edge
  • cc51307 update normalize ndoe
  • e8e81e6 add function type and capitalize to the frame mode
  • ff87870 add var
  • 4cad6be upgrade priority chat
  • 1a01bef update context
  • 29a63b4 change the name of the context schema
  • 16015dd add logic
  • 233a3e1 del test code
  • 4be6474 update enricher;'s capture mode
  • ee7430b change capture mode
  • 6632b88 fixed bug
  • 6f5471d Added detection mode node
  • 3c6b98e upgrade temporal logic
  • 4ee6805 upgrade enrich prompt
  • ff668e4 upgrade priority
  • cf8065a upgrade chat1
  • 2de6c6e change priority;s default value to standard
  • d911b68 change low state to standard state
  • f3cf1e7 change str type
  • 3c181e4 rm priority from enrich
  • 12e794b upgrade multi frame
  • e372aa0 update img_description and check user query section
  • f2635a2 upgrade the exception logic
  • 5e84ce4 reverse upgrade
  • 7431ed3 fix parsing bug
  • 33741c8 fix: update AnalysisItem.label as optional
  • 7d9f6bc feat(schema): align detection mode and app-level config contract
  • d63c599 update enrich schema and rm debug log
  • 630ef2a feat(visual-agent): persist per-analysis vector search meta
  • 8402a86 rm logs
  • 83fcbd7 updage enrich fewshot
  • 0c35698 update multi image agent logic and preprocessing logic
  • 1ebd4a2 rm priority from enriched input
  • 7e2c806 clean states(enrich/chat)
  • 676cf0f change configs to llm(Exaone)
  • 36068fa rm logs; solve bugs
  • 96c4499 update english fewshots
  • f166d91 update english logits
  • d78a8b4 update configs
  • d944ec9 update configs
  • 0f83ff9 update configs
  • b477b7f update enrich
  • 5b46dc4 upgrade configs
  • d0e4009 update configs
  • cf778e5 upgrade enricher
  • 4c4ad0f upgrade enrich
  • 5038f2a change exception_condition_per_exception to exception_condition_per_scenario
  • f23160d add annotations; chat
  • aca1994 add annotations; enricher
  • f3eafcf refactor; enricher state
  • ab0657b refactor; chat state; change input state
  • 3ad9ac1 refactor; chat state
  • 1593ed4 update logic
  • 3971f8b update configs
  • 6ece08d update english fewshot
  • 24e5f5c update enrich
  • c252985 rm logs
  • 92bcab2 revert complete(collab upload version
  • 5c8752f revert 2ab7f3608e53e3e1a4141cfa32e76fb5aafcf518
  • e27216d revert 2ab7f3608e53e3e1a4141cfa32e76fb5aafcf518
  • 33b391f revert 2ab7f3608e53e3e1a4141cfa32e76fb5aafcf518
  • ec44b6f update detection performance
  • c0fcf41 revoke the exception upgrade
  • 37d924e upgrade detection logic(exception upgrade)
  • 6f3d1db upgrade schema
  • 0189600 update schema
  • efbd365 upgrade enrich
  • b49d619 update mask situation
  • 24014fd update schema and enrich fewshot
  • 44e7bf1 upgrade
  • c789218 update multi frame
  • dd7081d update prompt
  • 2ab7f36 update va schema
  • 8f21536 upgrade enrich
  • bd891c3 upgrade logic
  • 88594b5 upgrade fewshot
  • 97d1c00 fix bug
  • 58f2fe2 fix error
  • ce0212f update VA logic
  • f3fbb5a upgrade schema
  • 414a98c rm logs
  • 8a99abd upgrade exception logic (change to it to batch logic)
  • 619e0e5 change exceptions to excluded situations
  • 427ca0b app_lang->lang
  • 3c0bddc style: camera package log
  • 8eceb78 rm videos
  • 8d0bb2b resolve conflict
  • fea49c9 fix check user query bug
  • 1aa0d08 feat(graph_runtime): GraphExecutor를 CompiledStateGraph cache 중심 구조로 전환
  • 392e5e1 refactor(config): normalize YAML discovery + path parsing helpers (no behavior change)
  • 76d50a3 refactor(visual-api): delegate feedback apply stage to ApplyFeedbackGraph
  • 920426d refactor(feedback-api): route record endpoint through RecordFeedbackGraph
  • d4534b5 refactor(feedback-pipeline): extract feedback graph/node service layer foundation
  • 14ba636 refactor(graph-runtime): fix decorator typing + tighten graph instance types
  • 14cfcb9 fix(helm): gate s3 sync init container by flag
  • 5a854c3 feat: qdrant migration & backup helper utils
  • a57a346 remove: deprecated files
  • 59ba357 fix: chart behaviour (allow dynamic pv with values)
  • f2ff678 add: downstream custom vllm chart (allow dynamic shared pv + helm annotation)
  • 6cfa020 remove: helm values override yaml files
  • 07e5b04 feat: Package Control based on Detection Interval (Alert-Interval)
  • 31c9e9b refactor: minor changes
  • 2c41451 update eng fewshot
  • a781edf update pyproject
  • 925e488 upgrade agent logic
  • af8d6e3 fix last frame
  • 3aef014 add TODO
  • 57f8b51 update VA and EA for multi frame
  • 7a7665e refact: mfm refactor
  • 5bfeec4 fix: request param error
  • 60d25eb update: early return if no package
  • 181638d update: package class for visual agent
  • f830971 feat: add multi-frame manager and queues
  • 7f44c07 merge: save router as snapshot to merge develop branch (reflect latest)
  • 68f4eb1 merge: save router as snapshot to merge develop branch (reflect latest)

Operationally impactful chores

  • 7189158 Bump the minor version baseline to 2.6.0
  • 8da76ce Add the deploy/ folder to .dockerignore

v2.5.0 (Feb 12, 2026)

Highlights

  • Chat interface cleanup: Start the transition from chat_lang to lang, and reorganize the shared meta schema by introducing MetaBase.
  • Visual-RAG pipeline improvements: Split detection_scenario and detection_case to improve the accuracy of the embedding/upsert/search flow.
  • RAG search quality improvements: Add weighted_sum_power scoring and introduce the text embedding model intfloat/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_lang is planned to be removed in v2.6.0; use lang.
  • 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.lock to 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.sh to support agent scoping and model_type syncing.

Changelog (non-chore, 35 commits)

Show details
  • 97b69ee Date: 2025-02-xx Scope: Visual agent vector embedding pipeline (shared embeddings, upsert/search flow)
  • 012e504 upgrade chat history
  • e2a2930 upgrade chat
  • e3fae36 update config
  • b81fd83 add: intfloat/multilingual-e5-small (text) embedding model
  • 9beba0c feat: custom parser for simpler format instruction
  • d55a20c feat(rag): add weighted_sum_power scoring
  • abbf149 feat(visual-rag): split detection_scenario vs detection_case for embedding + ChatState validation + traceback logging + shared embed latency debug
  • 9fa158b rm _ infront of function's name
  • 15cd4eb add TODO
  • c078393 rm redundent logic
  • 1c90f1d add edge for handle error
  • 81d9f6a add get_history node
  • eda1c7f refactor format_history
  • 52fa1c7 refactor format_history
  • 7ab2689 add todo
  • 2721184 rm error log
  • 045738b upgrade handel_error prompt
  • d7f8124 exaone prompt
  • 30e7c6d update: change chat_lang to lang (chat-lang will be deprecated from 2.6.0)
  • 98ca11c refactor(api): MetaBase 도입으로 Meta 분리
  • 1972859 fix: request 422 error
  • 17a503c update: base python version to 3.12 from 3.11
  • 9ba03d6 deprecate: ollama docker configs
  • e2bf6dd remove: custom qdrant and use official image
  • 5d8b641 update: qdrant healthcheck to use bash only (official image doesn't install curl)
  • 983ffe5 docs: update README
  • e115bc9 docs: update README
  • 1a097e3 docs: update .env.sample comment unnecessary fields & remove deprecated variable
  • ef9a6e1 remove: ollama related env files
  • e5f1950 remove: qdrant env files
  • 96d5f57 feat: loosen logit registry get policy (return empty dict if not exist)
  • 7212dcb remove: Exaone 4.0 configs from vlm relate agents
  • 37550bf update: config files to sync prompt & model_type
  • f288f47 feat(config): extend model_config_util with agent scoping and model_type update

Operationally impactful chores

  • 6b81e03 Add deploy utility scripts (AWS/S3/Kubectl/Qdrant)
  • f0f16b5 Normalize executable permissions for deploy scripts

v2.4.3 (Feb 09, 2026)

Highlights

  • Align the set_target_threshold range 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_threshold allowed range to [0.1, 1).

Config & Deployment

  • Sync threshold validation rules in action nodes/config files.

Upgrade Notes

  • Clients that previously sent 1.0 or values below 0.1 must adjust to the [0.1, 1) range.

Changelog (non-chore, 1 commit)

Show details
  • 4d894e3 fix: 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_values propagation.
  • History handling overhaul: Reorganize the get_history path 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_type propagation, and parser exception handling in a series of patches.
  • Improve missing/incorrect get_history behavior 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
  • a4dc6fd change translation state to Any
  • f9f45b2 update route_task function and rm route_brightness function
  • d229cec change get_history
  • 0be5635 change chat_history 's type
  • cb42b84 change get_history function
  • 78c1fe7 set language
  • 08009b4 change set_target.py
  • c039bc7 rm () from keys
  • d3909d3 update prompts
  • e12d8fa add guide
  • fbf027e refactor chat llm
  • 772e98a update configs
  • 83fdb81 update configs(Exaone)
  • 7744092 add router value
  • 48fb79c add router value to router functions
  • f76bd93 fix error; action_router returns router_values
  • 0116c54 fix error; qna_router returns router_values
  • 9e5af87 fix error; give task_type to qna router
  • 573396b fix error; get_history
  • 47a0a8b add prompt
  • cabbf8e rm files and change history length
  • 31f05a2 update configs
  • 9975060 update configs
  • d5126af upgrade chat llm
  • 3d5c675 (fin) upgrade chat agent for 2.5.0
  • d9ae263 rm logs
  • 814c530 del Low in priority
  • 7536580 add detection case in visual agent schema
  • 472b70f change get output function
  • 53fd05a add lower to priority
  • bb98fd6 add lower to capture mode
  • 3b844a4 change output
  • aa3e3c6 update VA
  • d2c7bce update agent
  • 810ba76 fix bug
  • 8d967f6 change schemas
  • 658dbea add defence logic
  • 4395b58 change get_history
  • 8ed689a fix parsers
  • ad25013 fix error
  • 5f1f606 upgrade chat
  • aace1ce rm false positive feedback
  • 7d0feee update configs
  • 1079d55 change logs
  • 44924ed change camera
  • 2be4746 rm folders
  • bdc5782 rm vars
  • f2ff78a change settings
  • 596ebbc clean codes
  • 1790751 resolve conflict

v2.4.1 (Feb 01, 2026)

Highlights

  • Visual graph/node refactor: Reorganize one_step/two_step into single_step/multi_step and share the chain/message builders.
  • Enrich pipeline expansion: Reorganize pre_enrich/enrich_scenario, strengthen meta_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_scenariopre_enrich, single_scenarioenrich_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
  • bf2be72 add utils.py and build_messages function within
  • 110d6de add build_messages function to two step and fix bug in build_messages function
  • 6142c38 add build_messages function to one step node
  • bf18573 add build_messages function to img_description node
  • ff655b2 add build_messages function to alert_message node
  • e80bc6f add get_input_list function in utils.py
  • 9077a91 add get_input_list function to one_step node
  • 74615f1 fix typo
  • 18786e3 add get_input_list function to two_step node
  • 366c967 add get_input_list and build_message function to two_step node(exception node)
  • c7f4119 rm get_input_list function
  • 9cebc30 rm get_input_list function
  • 2f7afec add build_visual_llm_runnable
  • 6ca40e5 apply build_visual_llm_runnable
  • c39f0ad change build_llm_runner to chain builder
  • 20692f6 refactor build vlm chain
  • 82a7805 refactor basic_graph.py and base graph
  • 28d253b refactor base.py
  • e9d1f4a refactor one_step, two_step graphs
  • 2dbd6d8 change the one-step graph;s name to single-step
  • 9ff5916 change the two-step graph's name to multi-step
  • 6c407c5 change result to plural
  • c1a3803 clean state
  • 0db9cae rm area state
  • d116b54 seperate multi step graph's node
  • 500b6c4 clean node level python files
  • 6425524 change exception to exception condition
  • 18f41dc change exception to exception condition
  • 93eaada rm print and refactor check user query
  • 23efe54 refactor image processor
  • 656e124 add english to the language condition
  • e1a9ee4 apply get_vlm_chain function to enrich agent's node
  • 0da0953 refactor enrich-agent
  • b5fc250 seperate kor/eng fewshot
  • 6a6d75a fix error
  • 5d89744 rm translation node and rm logs
  • 354e95c rm logs
  • 1ea5fc4 rm unused fields
  • ed0f7c4 rm unused module
  • 04c60e3 add required translation
  • 402fbe3 refactor get_output.py
  • 3b27e9c change the folder level of enrich agent
  • 446747f change the node config for enrich agent"
  • 4cfd8f2 change the path of the configs for enrich agent(multi_scenario to pre_enrich and single_scenario to enrich_scenario
  • b047a39 update version of the configs
  • 10bcc08 update config version to 2.4.1
  • c71d44d change metadata to meta_core for adding the meta_priority and duration
  • 53b7780 add priority node and apply to overall enrich pipeline
  • 0d28fd6 add int>string convertion logic for priority
  • 680a197 add temporal scope node and apply to overall enrich pipeline
  • 596b4d6 upgrade priority prompt and fewshot
  • e14dd2b upgrade enrich priority's fewshot / prompt
  • 79398df update temporal scope description
  • e3e9cd3 change temporal_scope to window
  • b4c5895 rm annotations
  • f3a29d3 change window logic
  • e6840bb change window logic
  • 900a59b change window to monitoring and add monitoring range
  • c1a43ab rm korean examples from monitoring schema
  • e3f7cab change output format
  • 0171d90 update config versions"
  • 799b871 update check user query logic
  • 476b556 upgrade config's version
  • 53c9bea rm logger.error
  • d9e15d5 PR Title feat(helm): eva-agent에 model cache PVC 도입 + Service를 ClusterIP로 전환 (Chart/App 2.4.0)
  • cd05124 update utils.py
  • 3a7a218 update image type for Visual Agent request
  • c1992e0 upgrade utils.py
  • c39ecf4 rm getattr in single_enricher.py
  • eaec6ac rm useless getattr in this branch
  • 37ca4bf change output type of route_by_translation function(in single enricher)
  • 29ac7e8 change required_translation field to boolen type
  • 8e278bf rm logger in multi_step graph
  • 147a04a add START node
  • f109434 change enricher's logger (dict->pydantic)
  • b09224d rm translator-related functions from base.py
  • e73ef2e change output type of build_graph
  • cb2faf8 add translation nodes/and graph
  • 2189664 rm getattr
  • fced1d2 rm none
  • 2b69797 clean logs
  • f5ad44f add assert and clean enrich agent
  • fbb922d add defend logic
  • ae56d1c change type of the fewshotexample's payload
  • 17195be add language option to build_vlm_chain
  • 79bd30f apply defense logic
  • efad507 assign response's type
  • 98eed36 rm importing the time module for every node
  • c994878 update get_output
  • 0574a2a add defense logic
  • 97871b8 change the type of the content
  • 888586d allow more ascii chars in translation utils
  • 894e933 rm image_b64 from build_vlm_chain';s output
  • a355e7d rm assert scneario_list
  • 208b265 change type of the vars
  • 0daf8e0 clean enrich state(sep fewhsgot state
  • 89bb455 update utils.py
  • 7dbd221 clean states
  • 196a721 rm logs
  • eb53946 rm list type from images
  • 335f14e add mode/priority to agent logic
  • bae1e17 add defense logic for priority
  • 4a3fcf6 change logic for mode/prioirty
  • 8bab795 change camera settings to detection settings
  • d659fcd change logic to detection settings
  • ca7b2e8 change mod_str->monitoring_str
  • 7b0783c change monitoring to capture
  • 3bd66fb add type for parser
  • 8bdd7da change build_vlm_chain to build_chain
  • e7e3398 change state type from dict to basemodel
  • 6a13c29 change typed dict state to basemodel state
  • 6e391d3 add defense logic ( task_type=state.task_type or None, )
  • dc68000 add defense logic
  • c22ef3d apply build_chain(to classify task type node
  • f647832 replace codelines to the build_chain functions
  • 6d13a88 add is_vlm var to build_chain
  • c155a6a rm unused modules
  • 56e6cc9 limit chat history
  • ba2cecf clean configs and add src for chat_history
  • 88231d6 change prompt
  • 2269815 error fixed
  • 3a05ad3 clean prompt
  • c4e9475 upgrade chat llm
  • 5014a52 upgrade chat
  • 1d1f6de upgrade chat agent
  • 9c43e96 upgrade chat
  • e972f6d upgrade chat
  • 884e3e1 upgrade configs
  • 385ec25 add eng descriptions
  • 66649a0 add annotations
  • 32b2cd7 add schemas
  • 59e82d2 refactor llm agent
  • 9ed6f57 add defense logic
  • d5363ca change debugger's port
  • 7d7acaf update messages
  • d7dd0b2 update messages
  • dd79a12 update messages
  • b926f35 add defense logic
  • 5aeba08 update configs
  • 56b764e feat(chart): add ECR refresh + S3 model cache
  • e45f304 fix: visual agent feedback's metadata pydantic model validation

Operationally impactful chores (selected)

  • 3637012 Add model config helper script (model_config_util.sh)
  • 3565456 Remove 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_PORT were removed; use QDRANT_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=True results 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.sample and 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_id and 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
  • 7c56352 fix(providers): probe model catalog concurrently
  • de528a5 change the schema of the detection_results
  • 77e07eb fix sort_dictionary function
  • 9e0ef08 fix sort_dictionary function in validator
  • 0fd63bd fix bug; add cls var in sort_dictionary in validator function
  • 65254ce fix bug; update exceptions
  • 242752c add comments
  • 1c5ed86 rm print func
  • 87a969f change the func name (sort_dictionary to sort_list)
  • 1b9f369 Add grouping node
  • 0773ded Add grouping schema
  • 4cf20c1 add fewshot examples for multi-scenario grouping function
  • 068d600 add situation explaination to collapsed person fewshot example
  • f2ecf1a refact: apply LLM registry's llm call pattern for each nodes
  • f0aa8c4 Add: build-system to .toml
  • 0cc3c57 remove: deprecated visual-agent code
  • b7b777b Refactor: move /app/api to /src/eva_agent/api and resolve import path
  • 3b48a63 remove: deprecated chat-agent related code
  • 70b548b Refact: move /src/rag to /src/eva_agent/core/rag to follow src layout
  • 8b2d111 Refact: move langfuse related to /src/eva_agent/o11y/langfuse
  • 9f00230 Remove: unused app/provider (replaced by src/providers)
  • b88aeb5 Refact: move src/providers to src/eva_agent/core/providers to follow src layout
  • 48a58f9 remove: init from src(src is not module)
  • 8f3c0ce refact: move /app/core to corresponing name (graph / config) under eva_agent module's core
  • f55deef Refact: move app/node & app/schemas under src/eva_agent/nodes/ src/eva_agent/schemas
  • 89e39d2 Refact: move app/graph under src/eva_agent/graph
  • 5bd9e2d remove: main.py's path config (decouple import path dependency)
  • 274bdbf remove: deprecated app's module init.py
  • 50e1dc3 Refact: move src/agents/models.py to src/eva_agent/core/providers/models.py
  • 548883e Refact: move src/vision/schemas.py to schemas/common.py & feedback.py
  • 22c7f12 Remove: deprecated vision directory
  • 1afa147 Update: build stage (copy src code first for uv build)
  • c52b990 Update: exclude READMD.md from docker ignore (toml's readme section added)
  • af91b46 fix: type
  • 7ebafa6 add logs and prompt line for translation node
  • a733a2e change log level(info->debug)
  • 698f8ab change lang var flexible
  • 444b039 change lang var non-flexible
  • 8956f80 update translation prompt
  • bccae6f update translation logic
  • 83406ed Update: default kv-cache-dtype for vllm to auto not fp8
  • aadc86e Update: image tag for docker-image to 2.3-a3.1
  • d70fefb Update: bump patch version (hotfix for translation logic)
  • 7843db1 fix data type of area_num to int
  • d436177 update translation config
  • dfb944e update the config(max_tokens) of enrich-agent
  • 7550ca3 update the config(max_tokens) of enrich-agent(detection step)
  • 2f002a2 Refact: visual agent API typing
  • a756eda add optional to enrich schema
  • 55b4425 update visual agent(detection,exception) config
  • 0d3aabd feat(docker): make venv copy deterministic and scope compile step to app code
  • 2dd23aa update: image tag version bump (patch)
  • b7d7451 update: proejct package version bump to 2.3.2
  • e7fa623 refact: add "model_type" key in registry and yaml
  • 9824398 docs: create Exaone4.0 yaml files in chat agent
  • d9dccd7 update: fall-back to prompt and metadata part for configs
  • 1f69838 update: add new seperated vllm endpoint for vlm/llm respectively to dockker-compose.yml
  • 4de7e72 update: .env.eva-agent.sample to reflect env(runtime) split
  • a53d754 fix: raise timeout 5s(default) to 10s for langfuse client
  • c5c6793 update: add timeout(30s) to each provider's default llm invoke parameter
  • 814a8db remove: deprecated qdrant related env vars
  • 6d4025b Remove: QDRANT_HOST, QDRANT_PORT and replace them by QDRANT_BASE_URL
  • 4d4b72c Refact: stricter output validation for enrich agent output
  • 13631cc remove: host & port from vector store factory method (AsyncVectorStoreEngine)
  • 5dfefb8 refactor(api): split enrich agent into package + router module
  • f546af2 refactor(api): wire visual agent router via package export in main
  • 800eccf refactor(api): convert chat_agent v1 endpoint into package
  • 85530d9 refactor(api): convert feedback v1 endpoint into package
  • 9b90658 refactor(api): extract FastAPI app + lifecycle out of main
  • 0dc6bef refactor(api): centralize router/graph registries
  • 7001c89 Refactor GraphExecutor wiring to FastAPI DI (app.state + Depends)
  • 0555e5a Refactor: extract visual-agent RAG bootstrap into lifecycle service
  • 09f3842 Add graph bootstrap registry loader (register_graphs) and update lifecycle/docs
  • c5ecaef add scenario_case in ScenarioList Schema
  • e8af38b add scenario_case in function classyfiy steps
  • 9323b65 change detection scenario to case in function get_output
  • 7a8948b consider the situation when the case is None
  • 143e914 feat(rag): broaden Qdrant metadata filtering
  • 2be4c71 refactor(rag): widen metadata_filter signature to accept MetadataFilterSpec (keep dict)
  • 9968272 Apply similarity score threshold in Qdrant store (preserve retrieved points)
  • d9e9e9e add analysis id into analysisItem schema
  • c5d857a add analysis id into get_output function
  • c5aa82b feat(feedback): add analysis-scoped identifiers to visual feedback payload
  • ffdc927 feat(visual-agent): auto-upsert vectors for alert=True analysis items
  • 3aee412 fix(visual-agent): preserve analysis_id and use UUID type end-to-end
  • 5e434ed feat(feedback): upsert feedback by analysis_id and carry image_id in metadata
  • 3446d62 first commit
  • 6d3e4f5 fix: make camera_context allow None (validation fails)
  • 346f803 add: qwen3-vl-8b model logit_bias for KO/EN
  • f38c7b7 Add: logit_bias registry class
  • c60aaeb add language settings and multi-processing nodes
  • 8c3385b add language logic
  • 20b81de add logit bias to img description node
  • e351885 update translation agent and rm useless function
  • 19d69be update enrich agent(logic bias
  • 851eef5 update alert response
  • aca6df2 change print->logger.debug and rm useless debugs
  • ef505cc rm scenario list and detection results
  • d12f235 rm current step
  • a57581a rm non-used field in the visual agent's state
  • 73573a1 rm useless lines
  • 2bf101c rm logs
  • 111ca63 rm unnessesary code
  • 7e4f01f add description for the functions and rm unnessesary function in translator
  • 6393597 add docstring
  • 3753d22 add node config
  • 253ed34 change the location of the image description
  • 6293746 add description edge to basic graph
  • a1627d6 clean visual agent's state
  • 0fad732 allow numeric words for translator pre-check logic
  • 8f5a997 rm useless edge
  • fc2b633 re-name two-step graph's node
  • f36d0b5 update the description of the alert message schema
  • acda558 refact: language correction
  • cfa43f4 rm non-used configs
  • f152b1f rm logs
  • 475f552 modify lang setting for visual agent
  • 46e651a modify lang setting for enrich agent
  • 41f37a8 modify lang setting for visual agent(change upper to lower letter
  • 05a25a6 change the folder level of alert_message and img_description node
  • c3af090 change the graph nome for alert_message and image_description nodes
  • 61ee3a4 change llm_runnable for alert_message and image_description nodes
  • d694a77 change llm_runners for enrich agent
  • ab9adc8 fix dictionary unbound prob
  • 2435467 add logit for exaone
  • 13675fc fix(providers): ignore config options to prevent cached default leakage
  • a43d256 Docs: update REAMD.md to reflect latest version (v2.4.0)
  • 878c3ef docs: remove unnecessary sentences
  • eef0f0b add language force lines to the config filse
  • 0327e30 add language to the human message
  • e66d470 add try/except to the enrich classifier
  • 7ad7397 modify visual agent's prompt

Operationally impactful chores (selected)

  • 870b36c Pin uv version in Dockerfile
  • 1a54b1c Remove 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), add GraphRegistry/GraphExecutor, and implement a YAML ConfigLoader with version resolution.
  • Visual Agent v1 overhaul: Run 1-step and 2-step sub-graphs in parallel in basic_graph to 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}.yaml layout, 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-FP8 and add vLLM performance flags; bump the eva-agent image tag to 2.3-a3.0.

Breaking Changes

  • API schema and payload changes (important)

  • Visual query moved from the legacy single vision.schemas.VisualQueryRequest/Response flow to app.schemas.visual_agent.VisualAgentRequest/Response (scenario_list-based, with a unified meta model).

  • Feedback recording request schema is aligned around the unified meta, and the endpoint is exposed as /api/v1/agents/feedback/record.

  • The unified meta schema is now enforced as Pydantic models in app/schemas/common.py, so client meta payload shape is validated strictly.

  • Config path/file layout changes (important)

  • Legacy config trees like config/vlm/**, config/enrich_scenario/**, and config/llm/prompts/conversational_agent_system_prompt.md were removed or replaced; the server expects the new ConfigLoader path 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/** and src/vision/detection_scenario/** was removed and replaced by the new app layer; internal import paths changed significantly.

  • Infra endpoint removed

  • The legacy /infra/models endpoint 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} and app/api/dependency.py.

  • Add a 422 validation exception handler and provide health/healthz endpoints.

  • Visual Agent

  • Multi-scenario requests: scenario_list input and per-scenario results returned in analysis_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.md and 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 None area 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 meta model; update clients using app/schemas/*.py as 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/** and config/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 is 8888; 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 AsyncEmbeddingEngine and AsyncVectorStoreEngine; retire legacy AsyncSearchEngine; add ensure_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_id handling 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

  • VisualQueryRequest now requires vlm_model_name.

  • Few-shot template now derives from VLMScenarioAnalysis; field access updated, feedback_contentfeedback_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, rename feedback to feedback_binary, add optional feedback_message. Wiring updated in main.py.

  • RAG/Vector store

  • Add AsyncVectorStoreEngine and retire AsyncSearchEngine; split/rename embedding protocols.

  • Named vector mapping required; call ensure_space() for camera-scoped spaces.

  • Conversation

  • IntentClassifier no 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:32b v2.1.2 and v2.2.0; added RAG config visual_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_id based 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-compose for local development.

  • Local development scripts: Added run_agent.sh for 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_CONVERSATION task: 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) and HANDLE_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.