Commit Graph
8 Commits
Author SHA1 Message Date
MaojiaSheng 47da6ce129 refactor(bot): simplify vikingbot installation - merge all bot-* extras into [bot] (#3037) 2026-07-06 16:17:19 +08:00
yepper 9ebfd59342 feat(metrics): add vikingbot feedback observability (#2037)
* feat(metrics): add vikingbot feedback observability

* fix(bot): align feedback observability contracts

* fix(metrics): decouple feedback collector bootstrap
2026-05-15 17:30:24 +08:00
yepper 21854b5c58 feat(observability): add response feedback tracking to openapi (#1660)
* feat(observability): add response feedback tracking to openapi

Persist response, feedback, and outcome signals so OpenAPI clients can attach stable feedback to assistant replies. Sync the same business events to Langfuse to make Q&A effectiveness observable across restarts.

* refactor: remove response tracking and feedback features

This commit removes the response tracking, feedback submission, and Langfuse integration features. The changes include:
- Removing ResponseCompletedEvent and related response_id fields
- Removing feedback models and endpoints
- Removing Langfuse client integration
- Simplifying the OpenAPI channel by removing response persistence
- Updating tests to reflect these removals

* docs: align feedback observability design with current implementation

* feat(bot): implement phase 1 feedback observability primitives

* feat(bot): add explicit feedback submission flow

* feat(bot): add phase 3 response outcome evaluation

* style: clean up imports and fix code style issues

- remove unnecessary blank lines
- reorder imports to follow conventions
- fix string formatting in logging
- group related imports together
- fix import ordering in multiple files

* refactor: remove unused abstract attribute and update config type

Remove unused abstract attribute from MemoryStore and update config parameter type in resolve_require_mention to MochatChannelConfig for better type clarity

* feat(observability): rename abandoned to follow_up_without_feedback for clarity

refactor(session): add session locking and metadata merging
- Implement per-session file locks to prevent concurrent write conflicts
- Add metadata merging logic to preserve existing data during updates
- Introduce update_session method for atomic read-modify-write operations

fix(agent): skip outcome evaluation for heartbeat messages
2026-04-30 17:12:34 +08:00
chenjw 4cf688852b feat: add --sender parameter to chat commands (#562)
* feat: add --sender parameter to chat commands

- Add --sender option to Python CLI chat command
- Add --sender option to Rust CLI chat command
- Pass sender ID through to channels
- Display sender in interactive mode header
- Update langfuse integration for compatibility

* fix: align default sender ID to "user" for consistency

Align default sender ID in SingleTurnChannel from "default" to "user" to
match ChatChannel's default, ensuring consistent sender identification
across interactive and single-turn chat modes.

* style: add trailing comma for consistency

* fix: align Rust CLI default sender to "user"

Change Rust CLI's default sender from "cli_user" to "user" to match
Python side (ChatChannel and SingleTurnChannel), ensuring consistent
default sender identification across both Rust and Python CLI tools.

* fix: pass through total_tokens in langfuse usage conversion

When converting from old usage format (prompt_tokens/completion_tokens/total_tokens)
to usage_details format, also pass through total_tokens as 'total' field if
it's available in the usage dict.

* fix: protect langfuse.flush() with try/except

Wrap self.langfuse.flush() calls in try/except blocks to prevent
flush failures from discarding successfully obtained LLM responses.

- In success path: flush() failure only logs debug message
- In error path: flush() failure silently ignored (already in error handling)

* fix: disable langfuse propagate_attributes to fix generator error

Temporarily disable langfuse propagate_attributes context manager to fix
RuntimeError: generator didn't stop after throw(). The context manager
had exception handling issues when exceptions were thrown inside the block.

This preserves the API while avoiding the runtime error.

* fix: properly implement langfuse propagate_attributes without generator error

Reimplement propagate_attributes with manual __enter__/__exit__ management to
avoid the 'generator didn't stop after throw()' error. Key changes:

- Use local variable to avoid name shadowing with the method
- Only catch exceptions when entering the context manager
- Let inner block exceptions propagate normally
- Always exit the context manager in finally block
- Restore session_id/user_id propagation to langfuse
2026-03-13 14:02:05 +08:00
8d9773675a feat(resource): add preserve_structure option for directory scanning (#509)
* feat(resource): add preserve_structure option for directory scanning

Support preserving nested directory structure when adding resources.
When preserve_structure=True (default), files maintain their relative
path hierarchy under the resource URI root.
When False, all files are flattened to a single level (legacy behavior).

Configurable default via ov.conf.

Closes #490

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(lint): resolve all ruff format and lint errors for PR

- Fix import sorting (I001) across 15+ files
- Remove unused imports (F401): signal, hashlib, time, asyncio, pytest, etc.
- Remove unused variables (F841): level, e
- Rename unused loop vars (B007): idx -> _idx
- Replace lambda with def (E731) in feishu.py
- Replace dict() with literal (C408) in resources.py
- Remove f-strings without placeholders (F541)
- Add TYPE_CHECKING imports for ExecToolConfig/CronService (F821)
- Add FastAPI/Depends/Header imports in openapi.py (F821)
- Remove duplicate import of load_config (F811)
- Auto-format 4 files with ruff format

---------

Co-authored-by: r266-tech <r266-tech@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:09:06 +08:00
chenjwandDuTao c4cdb5fb1b Fix/bot Fix Memory Consolidation Issues and Integrate Vikingbot as OpenViking Optional Dependency (#492)
* fix

* add log

* add log

* update

* Opt memory

* Opt memory

* Opt memory

* Opt memory

* Fix memory consolidation issues: duplicate session write, hook error, and async

- Fix _consolidate_memory hook error by creating temporary Session when given message list
- Remove duplicate session save logic from _consolidate_memory (handled by caller)
- Make normal memory consolidation async like /new command
- Other fixes: streaming response in CLI and OpenAPI channel

* Integrate vikingbot as openviking optional dependency

- Add vikingbot dependencies to pyproject.toml optional-dependencies
- Update install prompts from vikingbot[X] to openviking[bot-X]
- Update README installation instructions
- Configure setuptools to find vikingbot in bot/ directory
- Add vikingbot package data and script entry

* Remove bot/pyproject.toml

vikingbot is now integrated as part of openviking, no need for separate pyproject.toml

* Update vikingbot installation instructions in root READMEs

- Update from 'uv pip install -e bot/' to 'uv pip install -e ".[bot]"'
- Add quotes around openviking[bot] for shell safety

* update

* Use singleton pattern for VikingClient in hooks

Cache VikingClient instances by workspace_id to avoid repeated client creation
- Add _client_cache dictionary for caching
- Add get_cached_client() helper function
- Update both hooks to use cached client

* Use global singleton for VikingClient instead of per-workspace cache

- Change from per-workspace_id cache to true global singleton
- Create client with None as agent_id (works for all workspaces)
- Simplify client management

* uv run ruff format

---------

Co-authored-by: DuTao <dutao.1786@bytedance.com>
2026-03-09 22:11:03 +08:00
chenjw 57b320611c FIX: fixes multiple issues in the OpenViking chat functionality and unifies session ID generation logic between Python and Rust CLI implementations. (#446)
* refactor(sandbox): remove docker/aiosandbox backends, simplify SRT config

- Remove docker and aiosandbox from available backends
- Remove settings_path from SrtBackendConfig (now auto-generated in workspace)
- Update SRT settings path to workspace/sandboxes/{session}-srt-settings.json
- Update README examples to use srt backend and remove settingsPath

* refactor(sandbox): remove docker/aiosandbox backends, simplify SRT config

- Remove docker and aiosandbox from available backends
- Remove settings_path from SrtBackendConfig (now auto-generated in workspace)
- Update SRT settings path to workspace/sandboxes/{session}-srt-settings.json
- Update README examples to use srt backend and remove settingsPath

* fix: remove unused handle_chat_direct function and fix unused logs variable

* Fix UTF-8 issues in chat command

* Add tab indentation to Think, Calling, and Result lines in CLI output

* Add first release workflow

* Update release workflow with correct working directory

* 修改 SessionKey 构建逻辑:统一使用 type="cli",channel_id 默认 "default",chat_id 作为 session_id 使用

* Implement machine unique ID as default session ID for ov chat

* Remove unsupported --logs parameter from chat command

* 统一 Python 和 Rust CLI 的默认 session ID 生成逻辑

* 修改日志

* 去掉log依赖

* docs: add VikingBot quick start section to READMEs

* fix: use vikingbot chat instead of ov chat in READMEs

* Revert "fix: use vikingbot chat instead of ov chat in READMEs"

This reverts commit 59f4e87ba0.

* fix: use UUID v4 for machine ID generation in both Rust and Python

* refactor: move truncate_utf8 to utils, fix chat history path, and use BotProcess dataclass

* refactor: update machine ID generation and remove unused chat_v2

- Update Python to use py-machineid library
- Update Rust to use machine-uid crate
- Remove unused chat_v2.rs
- Move machine ID from file storage to system-provided IDs
- Add fallback to "default" if system ID is unavailable

* 优化格式

* ruff format .
2026-03-06 11:12:42 +08:00
1b175344e8 Feature/vikingbot_opt: OpenAPI interface standardization;Feishu multi-user experience; observability enhancements; configuration system modernization. (#419)
* feat: add ov chat command and refactor channel architecture

- Add ChatChannel for interactive chat with User:/Bot: labels and thinking display
- Add SingleTurnChannel for one-off -m mode with minimal output
- Add StdioChannel for JSON-based IPC with Rust TUI
- Rename 'vikingbot agent' to 'vikingbot chat'
- Add Python 'ov chat' command that proxies to vikingbot chat
- Add Rust 'ov chat' command that proxies to vikingbot chat
- Refactor ChannelManager to support both config and direct channel addition
- Update event types for better thinking/tool_call/tool_result display
- Default session key: cli__chat__default

* feishu channel opt

* feishu channel opt

* fix: IM channels only process RESPONSE messages

- Update feishu, dingtalk, discord, email, qq, slack, telegram, whatsapp
- Add filter in send() to skip thinking/tool_call/tool_result messages
- Only process is_normal_message (RESPONSE type)

* feat(tracing): add abstract trace decorator for session-aware observability

- Add vikingbot/utils/tracing.py with backend-agnostic @trace decorator
- Use ContextVar for session_id propagation through nested calls
- Implement lazy binding to Langfuse via propagate_attributes
- Update AgentLoop._process_message() to use @trace decorator
- Simplify langfuse initialization logging in commands.py
- Add session_id parameter to litellm_provider.chat()
- Clean up redundant code in utils/helpers.py

The trace decorator abstracts observability concerns, allowing future
switching between Langfuse, OpenTelemetry, or other backends without
modifying business logic.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

* feat: add tracing base on langfuse

* 1. feishu channel opt
2. support multi users

* 1. feishu channel opt
2. support multi users

* 1. feishu channel opt
2. support multi users

* fix(langfuse): use module-level propagate_attributes from SDK v3

The propagate_attributes function is a module-level export in Langfuse
Python SDK v3, not a method of the Langfuse client instance.

- Import propagate_attributes from langfuse module
- Remove misleading warning when propagate_kwargs is empty
- Reduce log noise by changing info logs to debug

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: unify workspace_id naming and improve tracing integration

Standardize terminology and clean up tracing/Langfuse integration:

- Rename sandbox_key to workspace_id across agent, memory, and tools
- Delete deprecated langfuse_decorator.py (superseded by tracing.py)
- Fix Langfuse v3 SDK propagate_attributes usage (module-level function)
- Improve session_id extraction with better signature inspection
- Reduce log noise in Langfuse attribute propagation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* 1. feishu channel opt
2. support multi users

* feat(tracing): add user_id extraction support for Langfuse

Add extract_user_id parameter to @trace decorator to enable user
tracking in Langfuse. This allows grouping traces by user in the UI.

- Add extract_user_id parameter to @trace decorator
- Extract user_id from InboundMessage.sender_id
- Pass user_id to Langfuse propagate_attributes
- Update loop.py to use new lambda style for session_id extraction

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix http server

* fix http server

* fix http server

* fix(langfuse): change propagate_attributes log level to info

* feat(tracing): add @observe decorator to create Langfuse traces

* fix(tracing): apply @observe at decoration time, not runtime

* fix http server

* fix(tracing): add detailed diagnostics for Langfuse client status

* fix(langfuse): add diagnostic logging for client initialization

* fix(langfuse): add diagnostic logging for config check

* 飞书chat

* opt http client

* docs(readme): add Langfuse observability configuration guide

* opt http client

* opt http client

* opt http client

* opt http client

* opt http client

* fix(langfuse): fix token reporting to use usage_details format

- Change usage to usage_details for Langfuse v3 SDK compatibility
- Add support for cache_read_input_tokens (OpenAI/Anthropic prompt caching)
- Add logger import and debug logging for token reporting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* opt http client

* eval command

* eval command

* eval command

* md

* cleanup(tests): remove obsolete test suite and related docs

Remove the entire legacy test suite including:
- Unit tests (test_agent, test_bus, test_channels, test_config)
- Integration tests (test_agent_e2e)
- Test fixtures, utilities, and OpenSpec config
- Test runner tools (tester/)

These tests were outdated and no longer maintained. Future testing
should use a modern testing framework.

* docs(readme): update configuration paths and chat examples

- Update default config path to ~/.openviking/ov.conf
- Add interactive chat mode examples (--no-markdown, --logs flags)
- Remove VKE deployment guide section
- Update Docker volume mount paths

* docs(agent): add comprehensive docstrings to core classes

Add detailed Google-style docstrings to:
- AgentLoop.__init__() - parameters and examples
- AgentLoop._publish_thinking_event() - event publishing
- ToolContext - all attributes documented
- Tool base class - complete usage example

Improves code maintainability and IDE support.

* feat(server): add bot API proxy support and CLI integration

Server changes:
- Add --with-bot flag to enable Bot API proxy
- Register bot_router at /bot/v1 prefix
- Add bot_api_url configuration option
- Initialize bot proxy in bootstrap process

CLI changes:
- Update ov chat endpoint to /bot/v1/chat
- Fix UTF-8 input handling
- Add endpoint configuration via env var

* feat(core): improve agent tools, tracing and session management

- Enhance tool registry with better error handling
- Update OpenAPI channel configuration
- Improve session manager with better state handling
- Enhance Langfuse tracing integration with diagnostic logging

* feat(cli): add agent tools and improve CLI commands

- Enhance CLI commands with new agent tool integration
- Move plugin analysis doc to docs directory
- Add RFC for OpenViking CLI ov-chat command
- Add server restart script

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: DuTao <dutao.1786@bytedance.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: fujiajie.1030 <fujiajie.1030@bytedance.com>
2026-03-04 20:48:11 +08:00