ciyidogan commited on
Commit
03e23b5
Β·
verified Β·
1 Parent(s): 31c83a9

Update llm/llm_factory.py

Browse files
Files changed (1) hide show
  1. llm/llm_factory.py +96 -96
llm/llm_factory.py CHANGED
@@ -1,97 +1,97 @@
1
- """
2
- LLM Provider Factory for Flare
3
- """
4
- import os
5
- from typing import Optional
6
- from dotenv import load_dotenv
7
-
8
- from llm_interface import LLMInterface
9
- from llm_spark import SparkLLM
10
- from llm_openai import OpenAILLM
11
- from config.config_provider import ConfigProvider
12
- from utils.logger import log_info, log_error, log_warning, log_debug
13
-
14
- class LLMFactory:
15
- @staticmethod
16
- def create_provider() -> LLMInterface:
17
- """Create LLM provider based on configuration"""
18
- cfg = ConfigProvider.get()
19
- llm_config = cfg.global_config.llm_provider
20
-
21
- if not llm_config:
22
- raise ValueError("No LLM provider configured")
23
-
24
- provider_name = llm_config.name
25
- log_info(f"🏭 Creating LLM provider: {provider_name}")
26
-
27
- # Get provider definition
28
- provider_def = cfg.global_config.get_provider_config("llm", provider_name)
29
- if not provider_def:
30
- raise ValueError(f"Unknown LLM provider: {provider_name}")
31
-
32
- # Get API key
33
- api_key = LLMFactory._get_api_key(provider_name, llm_config.api_key)
34
-
35
- # Create provider based on name
36
- if provider_name == "spark":
37
- return LLMFactory._create_spark_provider(llm_config, api_key, provider_def)
38
- elif provider_name == "spark_cloud":
39
- return LLMFactory._create_spark_provider(llm_config, api_key, provider_def)
40
- elif provider_name in ["gpt-4o", "gpt-4o-mini"]:
41
- return LLMFactory._create_gpt_provider(llm_config, api_key, provider_def)
42
- else:
43
- raise ValueError(f"Unsupported LLM provider: {provider_name}")
44
-
45
- @staticmethod
46
- def _create_spark_provider(llm_config, api_key, provider_def):
47
- """Create Spark LLM provider"""
48
- endpoint = llm_config.endpoint
49
- if not endpoint:
50
- raise ValueError("Spark endpoint not configured")
51
-
52
- # Determine variant based on environment
53
- is_cloud = bool(os.environ.get("SPACE_ID"))
54
- variant = "hfcloud" if is_cloud else "on-premise"
55
-
56
- return SparkLLM(
57
- spark_endpoint=endpoint,
58
- spark_token=api_key,
59
- provider_variant=variant,
60
- settings=llm_config.settings
61
- )
62
-
63
- @staticmethod
64
- def _create_gpt_provider(llm_config, api_key, provider_def):
65
- """Create OpenAI GPT provider"""
66
- return OpenAILLM(
67
- api_key=api_key,
68
- model=llm_config.name,
69
- settings=llm_config.settings
70
- )
71
-
72
- @staticmethod
73
- def _get_api_key(provider_name: str, configured_key: Optional[str]) -> str:
74
- """Get API key from config or environment"""
75
- # First try configured key
76
- if configured_key:
77
- # Handle encrypted keys
78
- if configured_key.startswith("enc:"):
79
- from utils.encryption_utils import decrypt
80
- return decrypt(configured_key)
81
- return configured_key
82
-
83
- # Then try environment variables
84
- env_mappings = {
85
- "spark": "SPARK_TOKEN",
86
- "gpt-4o": "OPENAI_API_KEY",
87
- "gpt-4o-mini": "OPENAI_API_KEY"
88
- }
89
-
90
- env_var = env_mappings.get(provider_name)
91
- if env_var:
92
- key = os.environ.get(env_var)
93
- if key:
94
- log_info(f"πŸ“Œ Using API key from environment: {env_var}")
95
- return key
96
-
97
  raise ValueError(f"No API key found for provider: {provider_name}")
 
1
+ """
2
+ LLM Provider Factory for Flare
3
+ """
4
+ import os
5
+ from typing import Optional
6
+ from dotenv import load_dotenv
7
+
8
+ from .llm_interface import LLMInterface
9
+ from .llm_spark import SparkLLM
10
+ from .llm_openai import OpenAILLM
11
+ from config.config_provider import ConfigProvider
12
+ from utils.logger import log_info, log_error, log_warning, log_debug
13
+
14
+ class LLMFactory:
15
+ @staticmethod
16
+ def create_provider() -> LLMInterface:
17
+ """Create LLM provider based on configuration"""
18
+ cfg = ConfigProvider.get()
19
+ llm_config = cfg.global_config.llm_provider
20
+
21
+ if not llm_config:
22
+ raise ValueError("No LLM provider configured")
23
+
24
+ provider_name = llm_config.name
25
+ log_info(f"🏭 Creating LLM provider: {provider_name}")
26
+
27
+ # Get provider definition
28
+ provider_def = cfg.global_config.get_provider_config("llm", provider_name)
29
+ if not provider_def:
30
+ raise ValueError(f"Unknown LLM provider: {provider_name}")
31
+
32
+ # Get API key
33
+ api_key = LLMFactory._get_api_key(provider_name, llm_config.api_key)
34
+
35
+ # Create provider based on name
36
+ if provider_name == "spark":
37
+ return LLMFactory._create_spark_provider(llm_config, api_key, provider_def)
38
+ elif provider_name == "spark_cloud":
39
+ return LLMFactory._create_spark_provider(llm_config, api_key, provider_def)
40
+ elif provider_name in ["gpt-4o", "gpt-4o-mini"]:
41
+ return LLMFactory._create_gpt_provider(llm_config, api_key, provider_def)
42
+ else:
43
+ raise ValueError(f"Unsupported LLM provider: {provider_name}")
44
+
45
+ @staticmethod
46
+ def _create_spark_provider(llm_config, api_key, provider_def):
47
+ """Create Spark LLM provider"""
48
+ endpoint = llm_config.endpoint
49
+ if not endpoint:
50
+ raise ValueError("Spark endpoint not configured")
51
+
52
+ # Determine variant based on environment
53
+ is_cloud = bool(os.environ.get("SPACE_ID"))
54
+ variant = "hfcloud" if is_cloud else "on-premise"
55
+
56
+ return SparkLLM(
57
+ spark_endpoint=endpoint,
58
+ spark_token=api_key,
59
+ provider_variant=variant,
60
+ settings=llm_config.settings
61
+ )
62
+
63
+ @staticmethod
64
+ def _create_gpt_provider(llm_config, api_key, provider_def):
65
+ """Create OpenAI GPT provider"""
66
+ return OpenAILLM(
67
+ api_key=api_key,
68
+ model=llm_config.name,
69
+ settings=llm_config.settings
70
+ )
71
+
72
+ @staticmethod
73
+ def _get_api_key(provider_name: str, configured_key: Optional[str]) -> str:
74
+ """Get API key from config or environment"""
75
+ # First try configured key
76
+ if configured_key:
77
+ # Handle encrypted keys
78
+ if configured_key.startswith("enc:"):
79
+ from utils.encryption_utils import decrypt
80
+ return decrypt(configured_key)
81
+ return configured_key
82
+
83
+ # Then try environment variables
84
+ env_mappings = {
85
+ "spark": "SPARK_TOKEN",
86
+ "gpt-4o": "OPENAI_API_KEY",
87
+ "gpt-4o-mini": "OPENAI_API_KEY"
88
+ }
89
+
90
+ env_var = env_mappings.get(provider_name)
91
+ if env_var:
92
+ key = os.environ.get(env_var)
93
+ if key:
94
+ log_info(f"πŸ“Œ Using API key from environment: {env_var}")
95
+ return key
96
+
97
  raise ValueError(f"No API key found for provider: {provider_name}")