refactor: remove file path header (#7)
This commit is contained in:
parent
de459b3789
commit
ba4b20e6d5
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1021,7 +1021,7 @@ checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "llm-ls"
|
name = "llm-ls"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"home",
|
"home",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
|
|
|
@ -1,413 +0,0 @@
|
||||||
use crate::LanguageComment;
|
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
pub fn build_language_comments() -> HashMap<String, LanguageComment> {
|
|
||||||
HashMap::from([
|
|
||||||
(
|
|
||||||
"abap".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "*".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"bat".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "REM".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"bibtex".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "%".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"clojure".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: ";;".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"coffeescript".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"c".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"cpp".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"csharp".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"css".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "/*".to_owned(),
|
|
||||||
close: Some("*/".to_owned()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"diff".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"dart".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"dockerfile".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"elixir".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"erlang".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "%".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"fsharp".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"git-commit".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"git-rebase".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"go".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"groovy".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"handlebars".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "{{!--".to_owned(),
|
|
||||||
close: Some("--}}".to_owned()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"html".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "<!--".to_owned(),
|
|
||||||
close: Some("-->".to_owned()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"ini".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: ";".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"java".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"javascript".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"javascriptreact".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"json".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"latex".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "%".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"less".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"lua".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "--".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"makefile".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"markdown".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "<!--".to_owned(),
|
|
||||||
close: Some("-->".to_owned()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"objective-c".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"objective-cpp".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"perl".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"perl6".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"php".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"powershell".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"jade".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"python".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"r".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"razor".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "@*".to_owned(),
|
|
||||||
close: Some("*@".to_owned()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"ruby".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"rust".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"scss".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"sass".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"scala".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"shaderlab".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"shellscript".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"sql".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "--".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"swift".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"toml".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"typescript".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"typescriptreact".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"tex".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "%".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"vb".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "'".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"xml".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "<!--".to_owned(),
|
|
||||||
close: Some("-->".to_owned()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"xsl".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "<!--".to_owned(),
|
|
||||||
close: Some("-->".to_owned()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"yaml".to_owned(),
|
|
||||||
LanguageComment {
|
|
||||||
open: "#".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
])
|
|
||||||
}
|
|
62
src/main.rs
62
src/main.rs
|
@ -1,6 +1,3 @@
|
||||||
mod language_comments;
|
|
||||||
|
|
||||||
use language_comments::build_language_comments;
|
|
||||||
use reqwest::header::AUTHORIZATION;
|
use reqwest::header::AUTHORIZATION;
|
||||||
use ropey::Rope;
|
use ropey::Rope;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
@ -18,12 +15,6 @@ use tracing::{error, info};
|
||||||
use tracing_appender::rolling;
|
use tracing_appender::rolling;
|
||||||
use tracing_subscriber::EnvFilter;
|
use tracing_subscriber::EnvFilter;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
|
||||||
pub struct LanguageComment {
|
|
||||||
open: String,
|
|
||||||
close: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
struct RequestParams {
|
struct RequestParams {
|
||||||
max_new_tokens: u32,
|
max_new_tokens: u32,
|
||||||
|
@ -112,7 +103,6 @@ struct Backend {
|
||||||
document_map: Arc<RwLock<HashMap<String, Document>>>,
|
document_map: Arc<RwLock<HashMap<String, Document>>>,
|
||||||
http_client: reqwest::Client,
|
http_client: reqwest::Client,
|
||||||
workspace_folders: Arc<RwLock<Option<Vec<WorkspaceFolder>>>>,
|
workspace_folders: Arc<RwLock<Option<Vec<WorkspaceFolder>>>>,
|
||||||
language_comments: HashMap<String, LanguageComment>,
|
|
||||||
tokenizer_map: Arc<RwLock<HashMap<String, Tokenizer>>>,
|
tokenizer_map: Arc<RwLock<HashMap<String, Tokenizer>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,45 +133,10 @@ fn internal_error<E: Display>(err: E) -> Error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_path_comment(
|
|
||||||
file_url: Url,
|
|
||||||
file_language_id: &str,
|
|
||||||
workspace_folders: Option<&Vec<WorkspaceFolder>>,
|
|
||||||
language_comments: &HashMap<String, LanguageComment>,
|
|
||||||
) -> String {
|
|
||||||
let mut file_path = file_url.path().to_owned();
|
|
||||||
let path_in_workspace = if let Some(workspace_folders) = workspace_folders {
|
|
||||||
for workspace_folder in workspace_folders {
|
|
||||||
let workspace_folder_path = workspace_folder.uri.path();
|
|
||||||
if file_path.starts_with(workspace_folder_path) {
|
|
||||||
file_path = file_path.replace(workspace_folder_path, "");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_path
|
|
||||||
} else {
|
|
||||||
file_path
|
|
||||||
};
|
|
||||||
let lc = match language_comments.get(file_language_id) {
|
|
||||||
Some(id) => id.clone(),
|
|
||||||
None => LanguageComment {
|
|
||||||
open: "//".to_owned(),
|
|
||||||
close: None,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
let close = if let Some(close) = lc.close {
|
|
||||||
format!(" {close}")
|
|
||||||
} else {
|
|
||||||
"".to_owned()
|
|
||||||
};
|
|
||||||
format!("{} {path_in_workspace}{close}\n", lc.open)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn build_prompt(
|
fn build_prompt(
|
||||||
pos: Position,
|
pos: Position,
|
||||||
text: &Rope,
|
text: &Rope,
|
||||||
fim: &FimParams,
|
fim: &FimParams,
|
||||||
file_path: String,
|
|
||||||
tokenizer: Tokenizer,
|
tokenizer: Tokenizer,
|
||||||
context_window: usize,
|
context_window: usize,
|
||||||
) -> Result<String> {
|
) -> Result<String> {
|
||||||
|
@ -229,8 +184,7 @@ fn build_prompt(
|
||||||
after_line = after_iter.next();
|
after_line = after_iter.next();
|
||||||
}
|
}
|
||||||
Ok(format!(
|
Ok(format!(
|
||||||
"{}{}{}{}{}{}",
|
"{}{}{}{}{}",
|
||||||
file_path,
|
|
||||||
fim.prefix,
|
fim.prefix,
|
||||||
before.into_iter().rev().collect::<Vec<_>>().join(""),
|
before.into_iter().rev().collect::<Vec<_>>().join(""),
|
||||||
fim.suffix,
|
fim.suffix,
|
||||||
|
@ -257,11 +211,7 @@ fn build_prompt(
|
||||||
token_count -= tokens;
|
token_count -= tokens;
|
||||||
before.push(line);
|
before.push(line);
|
||||||
}
|
}
|
||||||
Ok(format!(
|
Ok(before.into_iter().rev().collect::<Vec<_>>().join(""))
|
||||||
"{}{}",
|
|
||||||
file_path,
|
|
||||||
&before.into_iter().rev().collect::<Vec<_>>().join("")
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,12 +332,6 @@ impl Backend {
|
||||||
let document = document_map
|
let document = document_map
|
||||||
.get(params.text_document_position.text_document.uri.as_str())
|
.get(params.text_document_position.text_document.uri.as_str())
|
||||||
.ok_or_else(|| internal_error("failed to find document"))?;
|
.ok_or_else(|| internal_error("failed to find document"))?;
|
||||||
let file_path = file_path_comment(
|
|
||||||
params.text_document_position.text_document.uri,
|
|
||||||
&document.language_id,
|
|
||||||
self.workspace_folders.read().await.as_ref(),
|
|
||||||
&self.language_comments,
|
|
||||||
);
|
|
||||||
let tokenizer = get_tokenizer(
|
let tokenizer = get_tokenizer(
|
||||||
¶ms.model,
|
¶ms.model,
|
||||||
&mut *self.tokenizer_map.write().await,
|
&mut *self.tokenizer_map.write().await,
|
||||||
|
@ -401,7 +345,6 @@ impl Backend {
|
||||||
params.text_document_position.position,
|
params.text_document_position.position,
|
||||||
&document.text,
|
&document.text,
|
||||||
¶ms.fim,
|
¶ms.fim,
|
||||||
file_path,
|
|
||||||
tokenizer,
|
tokenizer,
|
||||||
params.context_window,
|
params.context_window,
|
||||||
)?;
|
)?;
|
||||||
|
@ -534,7 +477,6 @@ async fn main() {
|
||||||
document_map: Arc::new(RwLock::new(HashMap::new())),
|
document_map: Arc::new(RwLock::new(HashMap::new())),
|
||||||
http_client,
|
http_client,
|
||||||
workspace_folders: Arc::new(RwLock::new(None)),
|
workspace_folders: Arc::new(RwLock::new(None)),
|
||||||
language_comments: build_language_comments(),
|
|
||||||
tokenizer_map: Arc::new(RwLock::new(HashMap::new())),
|
tokenizer_map: Arc::new(RwLock::new(HashMap::new())),
|
||||||
})
|
})
|
||||||
.custom_method("llm-ls/getCompletions", Backend::get_completions)
|
.custom_method("llm-ls/getCompletions", Backend::get_completions)
|
||||||
|
|
Loading…
Reference in a new issue