Skip to content

Add group agent chat mode#361

Open
ModerRAS wants to merge 2 commits into
masterfrom
feature/agent-chat-mode
Open

Add group agent chat mode#361
ModerRAS wants to merge 2 commits into
masterfrom
feature/agent-chat-mode

Conversation

@ModerRAS
Copy link
Copy Markdown
Owner

@ModerRAS ModerRAS commented May 31, 2026

Summary

  • Add a per-group Agent chat mode with guided batching and sequential queue modes.
  • Auto-trigger Agent replies from normal text, captions, and OCR/QR/ASR pipeline output when enabled.
  • Persist mode settings in GroupSettings and add admin commands/docs for enabling, disabling, and status.

Commands

  • 开启Agent聊天 / 开启Agent引导聊天: enable guided short-window batching.
  • 开启Agent队列聊天: enable sequential per-message queueing.
  • 关闭Agent聊天 / Agent聊天状态: disable or inspect current group mode.

Validation

  • dotnet test TelegramSearchBot.LLM.Test\TelegramSearchBot.LLM.Test.csproj --filter "GroupLlmSettingsServiceTests"
  • dotnet test TelegramSearchBot.Test\TelegramSearchBot.Test.csproj --filter "LLMTaskQueueServiceTests"
  • dotnet build TelegramSearchBot.sln --configuration Debug --no-restore

Notes

  • Build currently reports existing package vulnerability warnings for Magick.NET-Q16-HDRI-AnyCPU and Scriban; no build errors.

Summary by CodeRabbit

  • New Features

    • Added Agent Chat Mode for group administrators with guided batch and sequential processing options for bulk LLM message handling.
    • New admin commands to enable, configure, disable, and check Agent Chat Mode status with customizable batch window durations.
  • Documentation

    • Updated user guide and README with new Agent Chat Mode commands and configuration requirements.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 31, 2026

Review Change Stack

Warning

Review limit reached

@ModerRAS, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 41 minutes and 14 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 171df3cd-bd3e-47aa-ad8a-21049c19aad4

📥 Commits

Reviewing files that changed from the base of the PR and between 09e191f and bcf5de5.

📒 Files selected for processing (9)
  • Docs/Bot_Commands_User_Guide.md
  • README.md
  • TelegramSearchBot.Common/Model/AI/LlmAgentContracts.cs
  • TelegramSearchBot.LLM/Service/AI/LLM/GroupLlmSettingsService.cs
  • TelegramSearchBot/Controller/AI/LLM/AgentChatModeController.cs
  • TelegramSearchBot/Controller/AI/LLM/GeneralLLMController.cs
  • TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs
  • TelegramSearchBot/Service/AI/LLM/AgentChatBatchQueueService.cs
  • TelegramSearchBot/Service/Manage/AdminService.cs
📝 Walkthrough

Walkthrough

This PR adds administrator-controlled Agent chat mode for group chats. Admins can enable guided (batched) or sequential message processing through LLM agents. The system persists settings in the database, routes incoming messages through a new controller, buffers messages to Redis with configurable batch windows, and dispatches batches via background worker.

Changes

Agent Chat Mode System

Layer / File(s) Summary
Database Schema & Configuration
TelegramSearchBot.Database/Model/Data/GroupSettings.cs, TelegramSearchBot.Database/Migrations/20260531153140_*, TelegramSearchBot.Database/Migrations/DataDbContextModelSnapshot.cs, TelegramSearchBot.Common/Model/AI/LlmAgentContracts.cs
GroupAgentChatMode enum (GuidedBatch/Sequential) and agent-chat columns (IsAgentChatEnabled, AgentChatMode, AgentChatBatchWindowSeconds) added to GroupSettings with corresponding EF Core migration and model snapshot. Redis key constants added for batch queueing (due set, list, metadata, lock, config warnings).
Settings Management Service
TelegramSearchBot.LLM/Interface/AI/LLM/IGroupLlmSettingsService.cs, TelegramSearchBot.LLM/Service/AI/LLM/GroupLlmSettingsService.cs, TelegramSearchBot.LLM.Test/Service/AI/LLM/GroupLlmSettingsServiceTests.cs
GroupAgentChatSettings DTO and interface methods (GetAgentChatSettingsAsync, SetAgentChatModeAsync) added. Implementation retrieves/updates per-chat settings with batch-window normalization (1–60s) and database conflict retry logic. Tests verify default creation and model-field preservation on updates.
Message Models & Task Queue Refactoring
TelegramSearchBot/Model/AI/AgentChatModels.cs, TelegramSearchBot/Service/AI/LLM/LLMTaskQueueService.cs, TelegramSearchBot.Test/Service/AI/LLM/LLMTaskQueueServiceTests.cs
New sealed classes: AgentChatMessageInput (with Telegram conversion helpers), AgentChatExecutionRequest, AgentChatBufferedMessage. New EnqueueMessageTaskAsync overload accepts explicit metadata and custom inputMessage string. Internal task builder refactored to primitive parameters. Test validates custom input in Redis payload.
Agent Chat Mode Controller
TelegramSearchBot/Controller/AI/LLM/AgentChatModeController.cs
New IOnUpdate handler for admin commands (enable/disable agent modes, status). Validates messages, gates on feature flags, loads chat settings, ensures bot identity, deduplicates input. Routes to sequential execution or guided batch based on mode. Includes command parsing (Chinese), bot command detection, Redis rate-limited warnings, and pending state checks.
Batch Message Queueing Service
TelegramSearchBot/Service/AI/LLM/AgentChatBatchQueueService.cs
Buffers incoming messages into Redis per-chat list, computes due timestamp, writes batch metadata and registers chat in due-time sorted set. Applies 30-minute TTL to persisted entries.
Batch Dispatch & Execution Services
TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs, TelegramSearchBot/Service/AI/LLM/AgentChatExecutionService.cs
AgentChatBatchDispatchService background worker (1s loop) queries Redis, acquires per-chat locks, drains and validates buffered messages, dispatches enabled guided batches. AgentChatExecutionService executes requests: enqueues task, streams draft, persists messages, handles terminal chunks with continuation support. Error handling and lock cleanup included.
DI Wiring & Documentation
TelegramSearchBot/Extension/ServiceCollectionExtension.cs, TelegramSearchBot/Controller/AI/ASR/AutoASRController.cs, Docs/Bot_Commands_User_Guide.md, README.md
Registers AgentChatBatchDispatchService as hosted service. Adds safeguard in ASR controller to record output only when non-empty. Documents admin commands, prerequisites, and trigger behavior in user guide and README.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • ModerRAS/TelegramSearchBot#265: Extends the same agent-automation infrastructure by adding Redis key constants and wiring LLMTaskQueueService/execution through the agent-process feature flag.
  • ModerRAS/TelegramSearchBot#350: Builds on identity/provider abstractions by extending GroupLlmSettingsService and wiring IBotIdentityProvider into the new agent-chat mode flow.

Poem

🐰 A rabbit hops through batch-time flows,
Sequential paths and guided rows,
Redis holds the messages tight,
While agents chat throughout the night,
Admins command with whispered grace,
Smart messages find their place! 🎯

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.84% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add group agent chat mode' directly and clearly summarizes the main change: introducing agent chat mode functionality for groups with configuration, commands, and backend services.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/agent-chat-mode

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 31, 2026

PR Check Report

Summary

Test Results

Platform Status Details
Ubuntu Passed Tests passed, artifacts uploaded
Windows Passed Tests passed, artifacts uploaded

Code Quality

  • Code formatting check
  • Security vulnerability scan
  • Dependency analysis
  • Code coverage collection

Test Artifacts

  • Test results artifacts count: 2
  • Code coverage uploaded to Codecov

Links


This report is auto-generated by GitHub Actions

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (6)
README.md (1)

183-185: ⚡ Quick win

Keep README command variants aligned with parser aliases.

Consider listing 开启Agent引导聊天 and 查看Agent聊天 as accepted aliases to match runtime behavior and reduce support friction.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 183 - 185, The README command list currently shows
'开启Agent聊天', '开启Agent队列聊天', and '关闭Agent聊天' / 'Agent聊天状态' but does not include
aliases used by the parser; update the README to include the runtime aliases
'开启Agent引导聊天' and '查看Agent聊天' alongside the existing entries so the docs match
the parser behavior (update the lines listing '开启Agent聊天', '开启Agent队列聊天', and
'关闭Agent聊天' / 'Agent聊天状态' to include the additional accepted variants).
TelegramSearchBot.LLM/Service/AI/LLM/GroupLlmSettingsService.cs (1)

134-140: ⚡ Quick win

Consider extracting magic numbers to named constants.

The batch window clamping uses hardcoded values 1 and 60 without explanation or constants.

♻️ Proposed refactor to improve maintainability
+    private const int MinBatchWindowSeconds = 1;
+    private const int MaxBatchWindowSeconds = 60;
+
     private static int NormalizeBatchWindow(int? batchWindowSeconds) {
         if (!batchWindowSeconds.HasValue || batchWindowSeconds.Value <= 0) {
             return GroupAgentChatSettings.DefaultBatchWindowSeconds;
         }
 
-        return Math.Clamp(batchWindowSeconds.Value, 1, 60);
+        return Math.Clamp(batchWindowSeconds.Value, MinBatchWindowSeconds, MaxBatchWindowSeconds);
     }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@TelegramSearchBot.LLM/Service/AI/LLM/GroupLlmSettingsService.cs` around lines
134 - 140, The NormalizeBatchWindow method uses magic numbers 1 and 60 for
clamping; define private const int MinBatchWindowSeconds = 1 and private const
int MaxBatchWindowSeconds = 60 (near the top of the class) and replace the
literals in Math.Clamp and any other comparisons with these constants while
keeping GroupAgentChatSettings.DefaultBatchWindowSeconds unchanged; update
references in NormalizeBatchWindow to use MinBatchWindowSeconds and
MaxBatchWindowSeconds to improve readability and maintainability.
TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs (1)

53-61: Dispatch processes due chats serially.

DispatchDueBatchesAsync awaits TryDispatchChatBatchAsync per chat, and that call awaits the full LLM run. With many active groups, a single slow agent response stalls dispatch for all other due chats (up to 20 per cycle), and slow runs cause PeriodicTimer ticks to be skipped. Consider bounded-concurrency parallel dispatch (e.g., Task.WhenAll over a degree-limited set) since each chat is independently locked.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs` around
lines 53 - 61, DispatchDueBatchesAsync currently iterates dueChatIds and awaits
TryDispatchChatBatchAsync serially, causing slow LLM runs to block other
dispatches; change this to bounded-concurrency parallel dispatch (e.g., create
tasks for each parsed chatId from dueChatIds and run them with a SemaphoreSlim
or use Parallel.ForEachAsync with a max degree) so multiple
TryDispatchChatBatchAsync(db, chatId, cancellationToken) calls run concurrently
but limited (configurable max concurrency), still removing invalid IDs from
LlmAgentRedisKeys.AgentChatBatchDueSet as before and honoring cancellationToken.
TelegramSearchBot/Service/AI/LLM/AgentChatBatchQueueService.cs (1)

12-13: Confirm Transient lifetime is intentional.

This IService is registered as Transient, but its only dependency (IConnectionMultiplexer) is singleton-safe. The repo convention registers IService implementations as Singleton. Confirm the deviation is intentional.

As per coding guidelines: "Use Scrutor DI scanning for IOnUpdate, IService, and IView implementations with [Injectable(ServiceLifetime.Singleton)] attribute".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@TelegramSearchBot/Service/AI/LLM/AgentChatBatchQueueService.cs` around lines
12 - 13, AgentChatBatchQueueService is marked
[Injectable(ServiceLifetime.Transient)] but project convention requires IService
implementations to be singletons; either change the attribute to
[Injectable(ServiceLifetime.Singleton)] on the AgentChatBatchQueueService class
or, if transient behavior is deliberate, add a brief comment above the class
explaining why Transient is required (and confirm no singleton-safety issues
with any future dependencies), ensuring the class name
AgentChatBatchQueueService and the IService registration follow the Scrutor DI
scanning convention.
TelegramSearchBot/Controller/AI/LLM/AgentChatModeController.cs (2)

282-297: ⚡ Quick win

Use shared Redis key builders for pending-state checks (avoid future drift).

In AgentChatModeController.HasPendingConfigurationStateAsync, the current literals match the key formats used elsewhere (modelselect:{chatId}:state, and image_generation:model_select:{chatId}:{userId} / music_generation:model_select:{chatId}:{userId}), but this method still duplicates the string formats. Extract these into a shared canonical key builder/helper and reuse it here to prevent silent false-negatives if formats change later.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@TelegramSearchBot/Controller/AI/LLM/AgentChatModeController.cs` around lines
282 - 297, HasPendingConfigurationStateAsync currently inlines Redis key strings
which duplicates formats and risks future drift; replace the literal keys with
calls to the shared Redis key builder helpers (e.g., use the existing canonical
key methods such as RedisKeys.GetModelSelectStateKey(chatId),
RedisKeys.GetImageModelSelectKey(chatId, userId) and
RedisKeys.GetMusicModelSelectKey(chatId, userId) or the project's equivalent
key-builder methods) inside HasPendingConfigurationStateAsync so it reads keys
via those helpers, preserving chatId/userId parameters and keeping the same
existence checks against db.StringGetAsync.

27-27: ⚡ Quick win

Fix DI registration concern for AgentChatModeController (IOnUpdate).

AgentChatModeController doesn’t need [Injectable] for DI wiring because TelegramSearchBot/Extension/ServiceCollectionExtension.cs registers all IOnUpdate implementations via Scrutor (AddClasses(...AssignableTo<IOnUpdate>()).AsImplementedInterfaces()), so it will be picked up by that scan.

The pending-state Redis keys in HasPendingConfigurationStateAsync are hardcoded, but the current strings match existing key formats used elsewhere (modelselect:{chatId}:state in AdminService, and image_generation:model_select:{chatId}:{userId} / music_generation:model_select:{chatId}:{userId} in GeneralLLMController); consider centralizing these key builders to avoid future drift.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@TelegramSearchBot/Controller/AI/LLM/AgentChatModeController.cs` at line 27,
Remove the unnecessary [Injectable] attribute from the AgentChatModeController
class because the DI registration already scans and registers implementations of
IOnUpdate; update the class declaration for AgentChatModeController to rely on
the Scrutor-based registration instead of explicit attribute wiring. In
HasPendingConfigurationStateAsync, replace the hard-coded Redis key strings
("modelselect:{chatId}:state",
"image_generation:model_select:{chatId}:{userId}",
"music_generation:model_select:{chatId}:{userId}") with a call to a centralized
key-building helper (create a shared KeyBuilder or reuse an existing service)
and use that helper inside HasPendingConfigurationStateAsync so all key formats
are defined in one place and cannot drift. Ensure references to
AgentChatModeController and HasPendingConfigurationStateAsync are updated to use
the centralized key helper.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Docs/Bot_Commands_User_Guide.md`:
- Around line 66-75: Add the accepted command aliases to the Agent chat section:
update the listed command variants for Agent 聊天模式 to include `开启Agent引导聊天`
alongside `开启Agent聊天`, and add `查看Agent聊天` alongside `Agent聊天状态`; ensure the
same alias additions appear in the other occurrence referenced (the other Agent
chat entry). Keep the permission/requirement text unchanged and only append the
extra accepted command strings for discoverability.

In `@TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs`:
- Around line 125-128: The deserialized AgentChatBufferedMessage might have a
null Message causing a NPE when accessing buffered.Message.Content; update the
conditional in AgentChatBatchDispatchService (where buffered is created from
JsonConvert.DeserializeObject<AgentChatBufferedMessage>) to also guard that
buffered.Message != null before checking Content (e.g., require buffered != null
&& buffered.Message != null &&
!string.IsNullOrWhiteSpace(buffered.Message.Content)) and only then call
result.Add(buffered).
- Around line 64-113: TryDispatchChatBatchAsync currently sets a Redis lock
(lockKey) with a lockValue but releases it unconditionally via
db.KeyDeleteAsync, which can delete another worker's lock if the TTL (LockTtl)
expired and ownership changed; replace the unconditional delete with an
ownership-checked compare-and-delete using a small Lua script that only removes
lockKey when its value equals lockValue, and ensure lock ownership is preserved
for the full dispatch by either increasing/parametrizing LockTtl to safely cover
ExecuteAsync or implementing periodic lock renewal (extend the key TTL while
awaiting execution) so the original owner never loses the lock before releasing
it with the compare-and-delete script.

---

Nitpick comments:
In `@README.md`:
- Around line 183-185: The README command list currently shows '开启Agent聊天',
'开启Agent队列聊天', and '关闭Agent聊天' / 'Agent聊天状态' but does not include aliases used
by the parser; update the README to include the runtime aliases '开启Agent引导聊天'
and '查看Agent聊天' alongside the existing entries so the docs match the parser
behavior (update the lines listing '开启Agent聊天', '开启Agent队列聊天', and '关闭Agent聊天' /
'Agent聊天状态' to include the additional accepted variants).

In `@TelegramSearchBot.LLM/Service/AI/LLM/GroupLlmSettingsService.cs`:
- Around line 134-140: The NormalizeBatchWindow method uses magic numbers 1 and
60 for clamping; define private const int MinBatchWindowSeconds = 1 and private
const int MaxBatchWindowSeconds = 60 (near the top of the class) and replace the
literals in Math.Clamp and any other comparisons with these constants while
keeping GroupAgentChatSettings.DefaultBatchWindowSeconds unchanged; update
references in NormalizeBatchWindow to use MinBatchWindowSeconds and
MaxBatchWindowSeconds to improve readability and maintainability.

In `@TelegramSearchBot/Controller/AI/LLM/AgentChatModeController.cs`:
- Around line 282-297: HasPendingConfigurationStateAsync currently inlines Redis
key strings which duplicates formats and risks future drift; replace the literal
keys with calls to the shared Redis key builder helpers (e.g., use the existing
canonical key methods such as RedisKeys.GetModelSelectStateKey(chatId),
RedisKeys.GetImageModelSelectKey(chatId, userId) and
RedisKeys.GetMusicModelSelectKey(chatId, userId) or the project's equivalent
key-builder methods) inside HasPendingConfigurationStateAsync so it reads keys
via those helpers, preserving chatId/userId parameters and keeping the same
existence checks against db.StringGetAsync.
- Line 27: Remove the unnecessary [Injectable] attribute from the
AgentChatModeController class because the DI registration already scans and
registers implementations of IOnUpdate; update the class declaration for
AgentChatModeController to rely on the Scrutor-based registration instead of
explicit attribute wiring. In HasPendingConfigurationStateAsync, replace the
hard-coded Redis key strings ("modelselect:{chatId}:state",
"image_generation:model_select:{chatId}:{userId}",
"music_generation:model_select:{chatId}:{userId}") with a call to a centralized
key-building helper (create a shared KeyBuilder or reuse an existing service)
and use that helper inside HasPendingConfigurationStateAsync so all key formats
are defined in one place and cannot drift. Ensure references to
AgentChatModeController and HasPendingConfigurationStateAsync are updated to use
the centralized key helper.

In `@TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs`:
- Around line 53-61: DispatchDueBatchesAsync currently iterates dueChatIds and
awaits TryDispatchChatBatchAsync serially, causing slow LLM runs to block other
dispatches; change this to bounded-concurrency parallel dispatch (e.g., create
tasks for each parsed chatId from dueChatIds and run them with a SemaphoreSlim
or use Parallel.ForEachAsync with a max degree) so multiple
TryDispatchChatBatchAsync(db, chatId, cancellationToken) calls run concurrently
but limited (configurable max concurrency), still removing invalid IDs from
LlmAgentRedisKeys.AgentChatBatchDueSet as before and honoring cancellationToken.

In `@TelegramSearchBot/Service/AI/LLM/AgentChatBatchQueueService.cs`:
- Around line 12-13: AgentChatBatchQueueService is marked
[Injectable(ServiceLifetime.Transient)] but project convention requires IService
implementations to be singletons; either change the attribute to
[Injectable(ServiceLifetime.Singleton)] on the AgentChatBatchQueueService class
or, if transient behavior is deliberate, add a brief comment above the class
explaining why Transient is required (and confirm no singleton-safety issues
with any future dependencies), ensuring the class name
AgentChatBatchQueueService and the IService registration follow the Scrutor DI
scanning convention.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c37b22a0-d454-4bf0-b19e-ff19d9af6134

📥 Commits

Reviewing files that changed from the base of the PR and between 0023b10 and 09e191f.

📒 Files selected for processing (19)
  • Docs/Bot_Commands_User_Guide.md
  • README.md
  • TelegramSearchBot.Common/Model/AI/LlmAgentContracts.cs
  • TelegramSearchBot.Database/Migrations/20260531153140_AddGroupAgentChatMode.Designer.cs
  • TelegramSearchBot.Database/Migrations/20260531153140_AddGroupAgentChatMode.cs
  • TelegramSearchBot.Database/Migrations/DataDbContextModelSnapshot.cs
  • TelegramSearchBot.Database/Model/Data/GroupSettings.cs
  • TelegramSearchBot.LLM.Test/Service/AI/LLM/GroupLlmSettingsServiceTests.cs
  • TelegramSearchBot.LLM/Interface/AI/LLM/IGroupLlmSettingsService.cs
  • TelegramSearchBot.LLM/Service/AI/LLM/GroupLlmSettingsService.cs
  • TelegramSearchBot.Test/Service/AI/LLM/LLMTaskQueueServiceTests.cs
  • TelegramSearchBot/Controller/AI/ASR/AutoASRController.cs
  • TelegramSearchBot/Controller/AI/LLM/AgentChatModeController.cs
  • TelegramSearchBot/Extension/ServiceCollectionExtension.cs
  • TelegramSearchBot/Model/AI/AgentChatModels.cs
  • TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs
  • TelegramSearchBot/Service/AI/LLM/AgentChatBatchQueueService.cs
  • TelegramSearchBot/Service/AI/LLM/AgentChatExecutionService.cs
  • TelegramSearchBot/Service/AI/LLM/LLMTaskQueueService.cs

Comment thread Docs/Bot_Commands_User_Guide.md
Comment thread TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs
Comment thread TelegramSearchBot/Service/AI/LLM/AgentChatBatchDispatchService.cs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant