assistant2: Add support for using tools (#21190)

This PR adds rudimentary support for using tools to `assistant2`. There
are currently no visual affordances for tool use.

This is gated behind the `assistant-tool-use` feature flag.

<img width="1079" alt="Screenshot 2024-11-25 at 7 21 31 PM"
src="https://github.com/user-attachments/assets/64d6ca29-c592-4474-8e9d-c344f855bc63">

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-11-25 19:44:34 -05:00 committed by GitHub
parent 3901d46101
commit f059b6a24b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 263 additions and 37 deletions

View file

@ -1,6 +1,7 @@
use editor::{Editor, EditorElement, EditorStyle};
use feature_flags::{FeatureFlagAppExt, ToolUseFeatureFlag};
use gpui::{AppContext, FocusableView, Model, TextStyle, View};
use language_model::LanguageModelRegistry;
use language_model::{LanguageModelRegistry, LanguageModelRequestTool};
use settings::Settings;
use theme::ThemeSettings;
use ui::{prelude::*, ButtonLike, ElevationIndex, KeyBinding};
@ -55,7 +56,21 @@ impl MessageEditor {
self.thread.update(cx, |thread, cx| {
thread.insert_user_message(user_message);
let request = thread.to_completion_request(request_kind, cx);
let mut request = thread.to_completion_request(request_kind, cx);
if cx.has_flag::<ToolUseFeatureFlag>() {
request.tools = thread
.tools()
.tools(cx)
.into_iter()
.map(|tool| LanguageModelRequestTool {
name: tool.name(),
description: tool.description(),
input_schema: tool.input_schema(),
})
.collect();
}
thread.stream_completion(request, model, cx)
});