index.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { LITELLM_API_BASE_URL } from '$lib/constants';
  2. export const getLiteLLMModels = async (token: string = '') => {
  3. let error = null;
  4. const res = await fetch(`${LITELLM_API_BASE_URL}/v1/models`, {
  5. method: 'GET',
  6. headers: {
  7. Accept: 'application/json',
  8. 'Content-Type': 'application/json',
  9. ...(token && { authorization: `Bearer ${token}` })
  10. }
  11. })
  12. .then(async (res) => {
  13. if (!res.ok) throw await res.json();
  14. return res.json();
  15. })
  16. .catch((err) => {
  17. console.log(err);
  18. error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
  19. return [];
  20. });
  21. if (error) {
  22. throw error;
  23. }
  24. const models = Array.isArray(res) ? res : res?.data ?? null;
  25. return models
  26. ? models
  27. .map((model) => ({
  28. id: model.id,
  29. name: model.name ?? model.id,
  30. external: true,
  31. source: 'litellm'
  32. }))
  33. .sort((a, b) => {
  34. return a.name.localeCompare(b.name);
  35. })
  36. : models;
  37. };
  38. export const getLiteLLMModelInfo = async (token: string = '') => {
  39. let error = null;
  40. const res = await fetch(`${LITELLM_API_BASE_URL}/model/info`, {
  41. method: 'GET',
  42. headers: {
  43. Accept: 'application/json',
  44. 'Content-Type': 'application/json',
  45. ...(token && { authorization: `Bearer ${token}` })
  46. }
  47. })
  48. .then(async (res) => {
  49. if (!res.ok) throw await res.json();
  50. return res.json();
  51. })
  52. .catch((err) => {
  53. console.log(err);
  54. error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
  55. return [];
  56. });
  57. if (error) {
  58. throw error;
  59. }
  60. const models = Array.isArray(res) ? res : res?.data ?? null;
  61. return models;
  62. };
  63. type AddLiteLLMModelForm = {
  64. name: string;
  65. model: string;
  66. api_base: string;
  67. api_key: string;
  68. rpm: string;
  69. };
  70. export const addLiteLLMModel = async (token: string = '', payload: AddLiteLLMModelForm) => {
  71. let error = null;
  72. const res = await fetch(`${LITELLM_API_BASE_URL}/model/new`, {
  73. method: 'POST',
  74. headers: {
  75. Accept: 'application/json',
  76. 'Content-Type': 'application/json',
  77. ...(token && { authorization: `Bearer ${token}` })
  78. },
  79. body: JSON.stringify({
  80. model_name: payload.name,
  81. litellm_params: {
  82. model: payload.model,
  83. ...(payload.api_base === '' ? {} : { api_base: payload.api_base }),
  84. ...(payload.api_key === '' ? {} : { api_key: payload.api_key }),
  85. ...(isNaN(parseInt(payload.rpm)) ? {} : { rpm: parseInt(payload.rpm) })
  86. }
  87. })
  88. })
  89. .then(async (res) => {
  90. if (!res.ok) throw await res.json();
  91. return res.json();
  92. })
  93. .catch((err) => {
  94. console.log(err);
  95. error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
  96. return [];
  97. });
  98. if (error) {
  99. throw error;
  100. }
  101. return res;
  102. };
  103. export const deleteLiteLLMModel = async (token: string = '', id: string) => {
  104. let error = null;
  105. const res = await fetch(`${LITELLM_API_BASE_URL}/model/delete`, {
  106. method: 'POST',
  107. headers: {
  108. Accept: 'application/json',
  109. 'Content-Type': 'application/json',
  110. ...(token && { authorization: `Bearer ${token}` })
  111. },
  112. body: JSON.stringify({
  113. id: id
  114. })
  115. })
  116. .then(async (res) => {
  117. if (!res.ok) throw await res.json();
  118. return res.json();
  119. })
  120. .catch((err) => {
  121. console.log(err);
  122. error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
  123. return [];
  124. });
  125. if (error) {
  126. throw error;
  127. }
  128. return res;
  129. };