XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Show only enabled models in gui

eff97ed3
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

5 个文件 +62 -28
Modified g4f/api/__init__.py +1 -5
@@ -276,16 +276,12 @@ class Api:
276 276 HTTP_200_OK: {"model": List[ModelResponseModel]},
277 277 })
278 278 async def models():
279 model_list = dict(
280 (model, g4f.models.ModelUtils.convert[model])
281 for model in g4f.Model.__all__()
282 )
283 279 return [{
284 280 'id': model_id,
285 281 'object': 'model',
286 282 'created': 0,
287 283 'owned_by': model.base_provider
288 } for model_id, model in model_list.items()]
284 } for model_id, model in g4f.models.ModelUtils.convert.items()]
289 285
290 286 @self.app.get("/v1/models/{model_name}", responses={
291 287 HTTP_200_OK: {"model": ModelResponseModel},
Modified g4f/gui/client/static/css/style.css +1 -1
@@ -778,7 +778,7 @@ select:hover,
778 778 background-color: var(--button-hover);
779 779 }
780 780
781 #provider option:disabled[value] {
781 #provider option:disabled[value], #model option:disabled[value] {
782 782 display: none;
783 783 }
784 784
Modified g4f/gui/client/static/js/chat.v1.js +17 -1
@@ -1296,6 +1296,13 @@ async function on_load() {
1296 1296
1297 1297 const load_provider_option = (input, provider_name) => {
1298 1298 if (input.checked) {
1299 modelSelect.querySelectorAll(`option[data-disabled_providers*="${provider_name}"]`).forEach(
1300 (el) => {
1301 el.dataset.disabled_providers = el.dataset.disabled_providers ? el.dataset.disabled_providers.split(" ").filter((provider) => provider!=provider_name).join(" ") : "";
1302 el.dataset.providers = (el.dataset.providers ? el.dataset.providers + " " : "") + provider_name;
1303 modelSelect.querySelectorAll(`option[value="${el.value}"]`).forEach((o)=>o.removeAttribute("disabled", "disabled"))
1304 }
1305 );
1299 1306 providerSelect.querySelectorAll(`option[value="${provider_name}"]`).forEach(
1300 1307 (el) => el.removeAttribute("disabled")
1301 1308 );
@@ -1303,6 +1310,13 @@ const load_provider_option = (input, provider_name) => {
1303 1310 (el) => el.removeAttribute("disabled")
1304 1311 );
1305 1312 } else {
1313 modelSelect.querySelectorAll(`option[data-providers*="${provider_name}"]`).forEach(
1314 (el) => {
1315 el.dataset.providers = el.dataset.providers ? el.dataset.providers.split(" ").filter((provider) => provider!=provider_name).join(" ") : "";
1316 el.dataset.disabled_providers = (el.dataset.disabled_providers ? el.dataset.disabled_providers + " " : "") + provider_name;
1317 if (!el.dataset.providers) modelSelect.querySelectorAll(`option[value="${el.value}"]`).forEach((o)=>o.setAttribute("disabled", "disabled"))
1318 }
1319 );
1306 1320 providerSelect.querySelectorAll(`option[value="${provider_name}"]`).forEach(
1307 1321 (el) => el.setAttribute("disabled", "disabled")
1308 1322 );
@@ -1342,7 +1356,9 @@ async function on_api() {
1342 1356 models = await api("models");
1343 1357 models.forEach((model) => {
1344 1358 let option = document.createElement("option");
1345 option.value = option.text = option.dataset.label = model;
1359 option.value = model.name;
1360 option.text = model.name + (model.image ? " (Image Generation)" : "");
1361 option.dataset.providers = model.providers.join(" ");
1346 1362 modelSelect.appendChild(option);
1347 1363 });
1348 1364 providers = await api("providers")
Modified g4f/gui/server/api.py +11 -3
@@ -13,7 +13,7 @@ from g4f.errors import VersionNotFoundError
13 13 from g4f.image import ImagePreview, ImageResponse, copy_images, ensure_images_dir, images_dir
14 14 from g4f.Provider import ProviderType, __providers__, __map__
15 15 from g4f.providers.base_provider import ProviderModelMixin
16 from g4f.providers.retry_provider import BaseRetryProvider
16 from g4f.providers.retry_provider import IterListProvider
17 17 from g4f.providers.response import BaseConversation, FinishReason, SynthesizeData
18 18 from g4f.client.service import convert_to_provider
19 19 from g4f import debug
@@ -24,7 +24,15 @@ conversations: dict[dict[str, BaseConversation]] = {}
24 24 class Api:
25 25 @staticmethod
26 26 def get_models():
27 return models._all_models
27 return [{
28 "name": model.name,
29 "image": isinstance(model, models.ImageModel),
30 "providers": [
31 getattr(provider, "parent", provider.__name__)
32 for provider in providers
33 ]
34 }
35 for model, providers in models.__models__.values()]
28 36
29 37 @staticmethod
30 38 def get_provider_models(provider: str, api_key: str = None):
@@ -126,7 +134,7 @@ class Api:
126 134 for chunk in result:
127 135 if first:
128 136 first = False
129 if isinstance(provider, BaseRetryProvider):
137 if isinstance(provider, IterListProvider):
130 138 provider = provider.last_provider
131 139 yield self._format_json("provider", {**provider.get_dict(), "model": model})
132 140 if isinstance(chunk, BaseConversation):
Modified g4f/models.py +32 -18
@@ -59,6 +59,9 @@ class Model:
59 59 """Returns a list of all model names."""
60 60 return _all_models
61 61
62 class ImageModel(Model):
63 pass
64
62 65 ### Default ###
63 66 default = Model(
64 67 name = "",
@@ -559,100 +562,98 @@ any_uncensored = Model(
559 562 #############
560 563
561 564 ### Stability AI ###
562 sdxl = Model(
565 sdxl = ImageModel(
563 566 name = 'sdxl',
564 567 base_provider = 'Stability AI',
565 568 best_provider = IterListProvider([ReplicateHome, Airforce])
566 569
567 570 )
568 571
569 sd_3 = Model(
572 sd_3 = ImageModel(
570 573 name = 'sd-3',
571 574 base_provider = 'Stability AI',
572 575 best_provider = ReplicateHome
573
574 576 )
575 577
576 578 ### Playground ###
577 playground_v2_5 = Model(
579 playground_v2_5 = ImageModel(
578 580 name = 'playground-v2.5',
579 581 base_provider = 'Playground AI',
580 582 best_provider = ReplicateHome
581
582 583 )
583 584
584 585
585 586 ### Flux AI ###
586 flux = Model(
587 flux = ImageModel(
587 588 name = 'flux',
588 589 base_provider = 'Flux AI',
589 590 best_provider = IterListProvider([Blackbox, Airforce])
590 591 )
591 592
592 flux_pro = Model(
593 flux_pro = ImageModel(
593 594 name = 'flux-pro',
594 595 base_provider = 'Flux AI',
595 596 best_provider = Airforce
596 597 )
597 598
598 flux_dev = Model(
599 flux_dev = ImageModel(
599 600 name = 'flux-dev',
600 601 base_provider = 'Flux AI',
601 602 best_provider = AmigoChat
602 603 )
603 604
604 flux_realism = Model(
605 flux_realism = ImageModel(
605 606 name = 'flux-realism',
606 607 base_provider = 'Flux AI',
607 608 best_provider = IterListProvider([Airforce, AmigoChat])
608 609 )
609 610
610 flux_anime = Model(
611 flux_anime = ImageModel(
611 612 name = 'flux-anime',
612 613 base_provider = 'Flux AI',
613 614 best_provider = Airforce
614 615 )
615 616
616 flux_3d = Model(
617 flux_3d = ImageModel(
617 618 name = 'flux-3d',
618 619 base_provider = 'Flux AI',
619 620 best_provider = Airforce
620 621 )
621 622
622 flux_disney = Model(
623 flux_disney = ImageModel(
623 624 name = 'flux-disney',
624 625 base_provider = 'Flux AI',
625 626 best_provider = Airforce
626 627 )
627 628
628 flux_pixel = Model(
629 flux_pixel = ImageModel(
629 630 name = 'flux-pixel',
630 631 base_provider = 'Flux AI',
631 632 best_provider = Airforce
632 633 )
633 634
634 flux_4o = Model(
635 flux_4o = ImageModel(
635 636 name = 'flux-4o',
636 637 base_provider = 'Flux AI',
637 638 best_provider = Airforce
638 639 )
639 640
640 641 ### OpenAI ###
641 dall_e_3 = Model(
642 dall_e_3 = ImageModel(
642 643 name = 'dall-e-3',
643 644 base_provider = 'OpenAI',
644 645 best_provider = IterListProvider([Airforce, CopilotAccount, OpenaiAccount, MicrosoftDesigner, BingCreateImages])
645 646 )
646 647
647 648 ### Recraft ###
648 recraft_v3 = Model(
649 recraft_v3 = ImageModel(
649 650 name = 'recraft-v3',
650 651 base_provider = 'Recraft',
651 652 best_provider = AmigoChat
652 653 )
653 654
654 655 ### Other ###
655 any_dark = Model(
656 any_dark = ImageModel(
656 657 name = 'any-dark',
657 658 base_provider = 'Other',
658 659 best_provider = Airforce
@@ -863,4 +864,17 @@ class ModelUtils:
863 864 'any-dark': any_dark,
864 865 }
865 866
866 _all_models = list(ModelUtils.convert.keys())
867 # Create a list of all working models
868 __models__ = {model.name: (model, providers) for model, providers in [
869 (model, [provider for provider in providers if provider.working])
870 for model, providers in [
871 (model, model.best_provider.providers
872 if isinstance(model.best_provider, IterListProvider)
873 else [model.best_provider]
874 if model.best_provider is not None
875 else [])
876 for model in ModelUtils.convert.values()]
877 ] if providers}
878 # Update the ModelUtils.convert with the working models
879 ModelUtils.convert = {model.name: model for model, _ in __models__.values()}
880 _all_models = list(ModelUtils.convert.keys())