TODO - [x] Implement PromptEditor::paste - [x] Fix creases on unlink - [x] PromptCompletionProviderDelegate::supports_images - [ ] Fix highlighting in completion menu Release Notes: - N/A --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
64 lines
2.1 KiB
Rust
64 lines
2.1 KiB
Rust
use crate::mention_set::Mention;
|
|
use gpui::{AppContext as _, Entity, Task};
|
|
use language_model::{LanguageModelImage, LanguageModelRequestMessage, MessageContent};
|
|
use ui::App;
|
|
use util::ResultExt as _;
|
|
|
|
use crate::mention_set::MentionSet;
|
|
|
|
#[derive(Debug, Clone, Default)]
|
|
pub struct LoadedContext {
|
|
pub text: String,
|
|
pub images: Vec<LanguageModelImage>,
|
|
}
|
|
|
|
impl LoadedContext {
|
|
pub fn add_to_request_message(&self, request_message: &mut LanguageModelRequestMessage) {
|
|
if !self.text.is_empty() {
|
|
request_message
|
|
.content
|
|
.push(MessageContent::Text(self.text.to_string()));
|
|
}
|
|
|
|
if !self.images.is_empty() {
|
|
// Some providers only support image parts after an initial text part
|
|
if request_message.content.is_empty() {
|
|
request_message
|
|
.content
|
|
.push(MessageContent::Text("Images attached by user:".to_string()));
|
|
}
|
|
|
|
for image in &self.images {
|
|
request_message
|
|
.content
|
|
.push(MessageContent::Image(image.clone()))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Loads and formats a collection of contexts.
|
|
pub fn load_context(mention_set: &Entity<MentionSet>, cx: &mut App) -> Task<Option<LoadedContext>> {
|
|
let task = mention_set.update(cx, |mention_set, cx| mention_set.contents(true, cx));
|
|
cx.background_spawn(async move {
|
|
let mentions = task.await.log_err()?;
|
|
let mut loaded_context = LoadedContext::default();
|
|
loaded_context
|
|
.text
|
|
.push_str("The following items were attached by the user.\n");
|
|
for (_, (_, mention)) in mentions {
|
|
match mention {
|
|
Mention::Text { content, .. } => {
|
|
loaded_context.text.push_str(&content);
|
|
}
|
|
Mention::Image(mention_image) => loaded_context.images.push(LanguageModelImage {
|
|
source: mention_image.data,
|
|
..LanguageModelImage::empty()
|
|
}),
|
|
Mention::Link => {}
|
|
}
|
|
}
|
|
Some(loaded_context)
|
|
})
|
|
}
|