Skip to content
Snippets Groups Projects
Commit 99ed16ca authored by Benedikt Schäfer's avatar Benedikt Schäfer
Browse files

Remove unused code

parent 724f1f78
No related branches found
No related tags found
No related merge requests found
...@@ -54,39 +54,6 @@ export const useChat = () => { ...@@ -54,39 +54,6 @@ export const useChat = () => {
}); });
}; };
// export const useChat = () => {
// const { keys, model } = useSettings();
// return useBaseChat({
// id: 'editor',
// api: '/api/ai/command',
// body: {
// // !!! DEMO ONLY: don't use API keys client-side
// // apiKey: keys.openai,
// model: model.value,
// },
// fetch: async (input, init) => {
// const res = await fetch(input, init);
// if (!res.ok) {
// // Mock the API response. Remove it when you implement the route /api/ai/command
// await new Promise((resolve) => setTimeout(resolve, 400));
// const stream = fakeStreamText();
// return new Response(stream, {
// headers: {
// Connection: 'keep-alive',
// 'Content-Type': 'text/plain',
// },
// });
// }
// return res;
// },
// });
// };
// Used for testing. Remove it after implementing useChat api. // Used for testing. Remove it after implementing useChat api.
const fakeStreamText = ({ const fakeStreamText = ({
chunkCount = 10, chunkCount = 10,
...@@ -124,84 +91,4 @@ const fakeStreamText = ({ ...@@ -124,84 +91,4 @@ const fakeStreamText = ({
controller.close(); controller.close();
}, },
}); });
}; };
\ No newline at end of file
const streamOllamaText = async ({
messages,
model = 'phi3',
streamProtocol = 'data',
}: {
messages: any[];
model?: string;
streamProtocol?: 'data' | 'text';
}) => {
const ollama = createOllama({
baseURL: process.env.OLLAMA_BASE_URL || 'http://localhost:11434/api'
});
const encoder = new TextEncoder();
return new ReadableStream({
async start(controller) {
try {
const response = await fetch(`${ollama.baseURL}/chat`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: model,
messages: messages,
stream: true,
}),
});
const reader = response.body?.getReader();
if (!reader) throw new Error('No reader available');
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = new TextDecoder().decode(value);
const lines = chunk.split('\n').filter(Boolean);
for (const line of lines) {
const json = JSON.parse(line);
if (streamProtocol === 'text') {
controller.enqueue(encoder.encode(json.message?.content || ''));
} else {
controller.enqueue(
encoder.encode(`0:${JSON.stringify(json.message?.content || '')}\n`)
);
}
}
}
if (streamProtocol === 'data') {
controller.enqueue(
encoder.encode(`d:{"finishReason":"stop","usage":{"promptTokens":0,"completionTokens":0}}\n`)
);
}
controller.close();
} catch (error) {
controller.error(error);
}
},
});
};
// Usage in API route
export async function POST(req: Request) {
const { messages } = await req.json();
const stream = await streamOllamaText({
messages,
model: 'phi3', // or any other Ollama model
streamProtocol: 'data'
});
return new StreamingTextResponse(stream);
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment