Skip to content

Commit

Permalink
list fix
Browse files Browse the repository at this point in the history
  • Loading branch information
thecodacus committed Dec 6, 2024
1 parent 5ead479 commit 7efad13
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 48 deletions.
10 changes: 8 additions & 2 deletions app/lib/.server/llm/stream-text.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,23 @@ function extractPropertiesFromMessage(message: Message): { model: string; provid
return { model, provider, content: cleanedContent };
}

export async function streamText(messages: Messages, env: Env, options?: StreamingOptions,apiKeys?: Record<string, string>) {
export async function streamText(
messages: Messages,
env: Env,
options?: StreamingOptions,
apiKeys?: Record<string, string>,
) {
let currentModel = DEFAULT_MODEL;
let currentProvider = DEFAULT_PROVIDER.name;
const MODEL_LIST = await getModelList(apiKeys||{});
const MODEL_LIST = await getModelList(apiKeys || {});
const processedMessages = messages.map((message) => {
if (message.role === 'user') {
const { model, provider, content } = extractPropertiesFromMessage(message);

if (MODEL_LIST.find((m) => m.name === model)) {
currentModel = model;
}

currentProvider = provider;

return { ...message, content };
Expand Down
12 changes: 6 additions & 6 deletions app/routes/api.chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ export async function action(args: ActionFunctionArgs) {
return chatAction(args);
}

function parseCookies(cookieHeader:string) {
const cookies:any = {};
function parseCookies(cookieHeader: string) {
const cookies: any = {};

// Split the cookie string by semicolons and spaces
const items = cookieHeader.split(';').map((cookie) => cookie.trim());
Expand All @@ -29,15 +29,15 @@ function parseCookies(cookieHeader:string) {
}

async function chatAction({ context, request }: ActionFunctionArgs) {
const { messages, model } = await request.json<{
const { messages } = await request.json<{
messages: Messages;
model: string;
}>();

const cookieHeader = request.headers.get('Cookie');

// Parse the cookie's value (returns an object or null if no cookie exists)
const apiKeys = JSON.parse(parseCookies(cookieHeader||"").apiKeys || '{}');
const apiKeys = JSON.parse(parseCookies(cookieHeader || '').apiKeys || '{}');

const stream = new SwitchableStream();

Expand All @@ -60,7 +60,7 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
messages.push({ role: 'assistant', content });
messages.push({ role: 'user', content: CONTINUE_PROMPT });

const result = await streamText(messages, context.cloudflare.env, options,apiKeys);
const result = await streamText(messages, context.cloudflare.env, options, apiKeys);

return stream.switchSource(result.toAIStream());
},
Expand All @@ -76,7 +76,7 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
contentType: 'text/plain; charset=utf-8',
},
});
} catch (error:any) {
} catch (error: any) {
console.log(error);

if (error.message?.includes('API key')) {
Expand Down
84 changes: 44 additions & 40 deletions app/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ const PROVIDER_LIST: ProviderInfo[] = [
},
{
name: 'Together',
getDynamicModels: getTogetherModels,
getDynamicModels: getTogetherModels,
staticModels: [
{
name: 'Qwen/Qwen2.5-Coder-32B-Instruct',
Expand Down Expand Up @@ -295,7 +295,6 @@ const staticModels: ModelInfo[] = PROVIDER_LIST.map((p) => p.staticModels).flat(

export let MODEL_LIST: ModelInfo[] = [...staticModels];


export async function getModelList(apiKeys: Record<string, string>) {
MODEL_LIST = [
...(
Expand All @@ -312,43 +311,44 @@ export async function getModelList(apiKeys: Record<string, string>) {

async function getTogetherModels(apiKeys?: Record<string, string>): Promise<ModelInfo[]> {
try {
let baseUrl = import.meta.env.TOGETHER_API_BASE_URL || '';
let provider='Together'
const baseUrl = import.meta.env.TOGETHER_API_BASE_URL || '';
const provider = 'Together';

if (!baseUrl) {
return [];
}
let apiKey = import.meta.env.OPENAI_LIKE_API_KEY ?? ''
if (!baseUrl) {
return [];
}

if (apiKeys && apiKeys[provider]) {
apiKey = apiKeys[provider];
}
let apiKey = import.meta.env.OPENAI_LIKE_API_KEY ?? '';

if (apiKeys && apiKeys[provider]) {
apiKey = apiKeys[provider];
}

if (!apiKey) {
if (!apiKey) {
return [];
}

const response = await fetch(`${baseUrl}/models`, {
headers: {
Authorization: `Bearer ${apiKey}`,
},
});
const res = (await response.json()) as any;
const data: any[] = (res || []).filter((model: any) => model.type == 'chat');

return data.map((m: any) => ({
name: m.id,
label: `${m.display_name} - in:$${m.pricing.input.toFixed(
2,
)} out:$${m.pricing.output.toFixed(2)} - context ${Math.floor(m.context_length / 1000)}k`,
provider,
maxTokenAllowed: 8000,
}));
} catch (e) {
console.error('Error getting OpenAILike models:', e);
return [];
}

const response = await fetch(`${baseUrl}/models`, {
headers: {
Authorization: `Bearer ${apiKey}`,
},
});
const res = (await response.json()) as any;
let data: any[] = (res || []).filter((model: any) => model.type=='chat')
return data.map((m: any) => ({
name: m.id,
label: `${m.display_name} - in:$${(m.pricing.input).toFixed(
2,
)} out:$${(m.pricing.output).toFixed(2)} - context ${Math.floor(m.context_length / 1000)}k`,
provider: provider,
maxTokenAllowed: 8000,
}));
} catch (e) {
console.error('Error getting OpenAILike models:', e);
return [];
}
}


const getOllamaBaseUrl = () => {
const defaultBaseUrl = import.meta.env.OLLAMA_API_BASE_URL || 'http://localhost:11434';
Expand Down Expand Up @@ -396,11 +396,13 @@ async function getOpenAILikeModels(): Promise<ModelInfo[]> {
if (!baseUrl) {
return [];
}

let apiKey = import.meta.env.OPENAI_LIKE_API_KEY ?? '';

let apikeys = JSON.parse(Cookies.get('apiKeys')||'{}')
if (apikeys && apikeys['OpenAILike']){
apiKey = apikeys['OpenAILike'];

const apikeys = JSON.parse(Cookies.get('apiKeys') || '{}');

if (apikeys && apikeys.OpenAILike) {
apiKey = apikeys.OpenAILike;
}

const response = await fetch(`${baseUrl}/models`, {
Expand Down Expand Up @@ -458,6 +460,7 @@ async function getLMStudioModels(): Promise<ModelInfo[]> {
if (typeof window === 'undefined') {
return [];
}

try {
const baseUrl = import.meta.env.LMSTUDIO_API_BASE_URL || 'http://localhost:1234';
const response = await fetch(`${baseUrl}/v1/models`);
Expand All @@ -476,6 +479,7 @@ async function getLMStudioModels(): Promise<ModelInfo[]> {

async function initializeModelList(): Promise<ModelInfo[]> {
let apiKeys: Record<string, string> = {};

try {
const storedApiKeys = Cookies.get('apiKeys');

Expand All @@ -486,9 +490,8 @@ async function initializeModelList(): Promise<ModelInfo[]> {
apiKeys = parsedKeys;
}
}

} catch (error) {

} catch (error: any) {
console.warn(`Failed to fetch apikeys from cookies:${error?.message}`);
}
MODEL_LIST = [
...(
Expand All @@ -500,6 +503,7 @@ async function initializeModelList(): Promise<ModelInfo[]> {
).flat(),
...staticModels,
];

return MODEL_LIST;
}

Expand Down

0 comments on commit 7efad13

Please sign in to comment.