mirror of
https://github.com/EthanMarti/infio-copilot.git
synced 2026-01-16 08:21:55 +00:00
udpate , use stream mode all the time
This commit is contained in:
parent
61b42a8a07
commit
db34038acc
@ -1,4 +1,4 @@
|
|||||||
import { TFile, View, WorkspaceLeaf } from 'obsidian'
|
import { View, WorkspaceLeaf } from 'obsidian'
|
||||||
import { Root, createRoot } from 'react-dom/client'
|
import { Root, createRoot } from 'react-dom/client'
|
||||||
|
|
||||||
import ApplyViewRoot from './components/apply-view/ApplyViewRoot'
|
import ApplyViewRoot from './components/apply-view/ApplyViewRoot'
|
||||||
@ -27,7 +27,7 @@ export class ApplyView extends View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDisplayText() {
|
getDisplayText() {
|
||||||
return `Applying: ${this.state?.file?.name ?? ''}`
|
return `Applying: ${this.state?.file ?? ''}`
|
||||||
}
|
}
|
||||||
|
|
||||||
async setState(state: ApplyViewState) {
|
async setState(state: ApplyViewState) {
|
||||||
|
|||||||
@ -128,7 +128,7 @@ export default function ApplyViewRoot({
|
|||||||
</div>
|
</div>
|
||||||
<div className="view-header-title-container mod-at-start">
|
<div className="view-header-title-container mod-at-start">
|
||||||
<div className="view-header-title">
|
<div className="view-header-title">
|
||||||
Applying: {state?.file?.name ?? ''}
|
Applying: {state?.file ?? ''}
|
||||||
</div>
|
</div>
|
||||||
<div className="view-actions">
|
<div className="view-actions">
|
||||||
<button
|
<button
|
||||||
@ -157,8 +157,8 @@ export default function ApplyViewRoot({
|
|||||||
<div className="cm-scroller">
|
<div className="cm-scroller">
|
||||||
<div className="cm-sizer">
|
<div className="cm-sizer">
|
||||||
<div className="infio-inline-title">
|
<div className="infio-inline-title">
|
||||||
{state?.file?.name
|
{state?.file
|
||||||
? state.file.name.replace(/\.[^/.]+$/, '')
|
? state.file.replace(/\.[^/.]+$/, '')
|
||||||
: ''}
|
: ''}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -217,21 +217,34 @@ export const InlineEdit: React.FC<InlineEditProps> = ({
|
|||||||
endLine: defaultEndLine,
|
endLine: defaultEndLine,
|
||||||
});
|
});
|
||||||
|
|
||||||
const response = await llmManager.generateResponse(chatModel, {
|
const stream = await llmManager.streamResponse(
|
||||||
model: chatModel.modelId,
|
chatModel,
|
||||||
messages: requestMessages,
|
{
|
||||||
stream: false,
|
messages: requestMessages,
|
||||||
});
|
model: chatModel.modelId,
|
||||||
|
max_tokens: settings.modelOptions.max_tokens,
|
||||||
|
temperature: settings.modelOptions.temperature,
|
||||||
|
// top_p: settings.modelOptions.top_p,
|
||||||
|
// frequency_penalty: settings.modelOptions.frequency_penalty,
|
||||||
|
// presence_penalty: settings.modelOptions.presence_penalty,
|
||||||
|
stream: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if (!response.choices[0].message.content) {
|
let response_content = ""
|
||||||
|
for await (const chunk of stream) {
|
||||||
|
const content = chunk.choices[0]?.delta?.content ?? ''
|
||||||
|
response_content += content
|
||||||
|
}
|
||||||
|
if (!response_content) {
|
||||||
setIsSubmitting(false);
|
setIsSubmitting(false);
|
||||||
throw new Error("Empty response from LLM");
|
throw new Error("Empty response from LLM");
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedBlock = parseSmartComposeBlock(
|
const parsedBlock = parseSmartComposeBlock(
|
||||||
response.choices[0].message.content
|
response_content
|
||||||
);
|
);
|
||||||
const finalContent = parsedBlock?.content || response.choices[0].message.content;
|
const finalContent = parsedBlock?.content || response_content;
|
||||||
|
|
||||||
if (!activeFile || !(activeFile.path && typeof activeFile.path === 'string')) {
|
if (!activeFile || !(activeFile.path && typeof activeFile.path === 'string')) {
|
||||||
setIsSubmitting(false);
|
setIsSubmitting(false);
|
||||||
|
|||||||
@ -33,12 +33,37 @@ class LLMClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async queryChatModel(messages: RequestMessage[]): Promise<Result<string, Error>> {
|
async queryChatModel(messages: RequestMessage[]): Promise<Result<string, Error>> {
|
||||||
const data = await this.llm.generateResponse(this.model, {
|
const stream = await this.llm.streamResponse(
|
||||||
|
this.model,
|
||||||
|
{
|
||||||
|
messages: messages,
|
||||||
|
model: this.model.modelId,
|
||||||
|
stream: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
let response_content = ""
|
||||||
|
for await (const chunk of stream) {
|
||||||
|
const content = chunk.choices[0]?.delta?.content ?? ''
|
||||||
|
response_content += content
|
||||||
|
}
|
||||||
|
return ok(response_content);
|
||||||
|
}
|
||||||
|
|
||||||
|
async queryChatModelStream(messages: RequestMessage[]): Promise<AsyncIterable<string>> {
|
||||||
|
const stream = await this.llm.streamResponse(this.model, {
|
||||||
model: this.model.modelId,
|
model: this.model.modelId,
|
||||||
messages: messages,
|
messages: messages,
|
||||||
stream: false,
|
stream: true,
|
||||||
})
|
})
|
||||||
return ok(data.choices[0].message.content);
|
// eslint-disable-next-line no-inner-declarations
|
||||||
|
async function* streamResponse(): AsyncIterable<string> {
|
||||||
|
for await (const chunk of stream) {
|
||||||
|
yield chunk.choices[0].delta.content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return streamResponse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user