Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-llm/src/lexigram/ai/llm/selection/_scoring.py: 100%

15 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""Selector factory presets for model scoring tradeoffs.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7if TYPE_CHECKING: 

8 from lexigram.ai.llm.selection.core import ModelSelector 

9 

10 

11def create_cost_optimized_selector( 

12 budget_per_1k_tokens: float = 2.0, 

13) -> ModelSelector: 

14 """Create a cost-optimized model selector.""" 

15 from lexigram.ai.llm.selection.core import ModelSelector, SelectionStrategy 

16 

17 _ = budget_per_1k_tokens 

18 strategies = [ 

19 SelectionStrategy( 

20 name="budget_tiny", 

21 model="claude-3-haiku-20240307", 

22 conditions={"max_tokens": 500}, 

23 priority=10, 

24 description=None, 

25 ), 

26 SelectionStrategy( 

27 name="budget_small", 

28 model="gpt-3.5-turbo", 

29 conditions={"max_tokens": 2000}, 

30 priority=9, 

31 description=None, 

32 ), 

33 SelectionStrategy( 

34 name="budget_medium", 

35 model="claude-3-sonnet-20240229", 

36 conditions={"max_tokens": 10000}, 

37 priority=8, 

38 description=None, 

39 ), 

40 ] 

41 

42 return ModelSelector( 

43 default_model="gpt-3.5-turbo", 

44 strategies=strategies, 

45 fallback_chain=[ 

46 "claude-3-haiku-20240307", 

47 "gpt-3.5-turbo", 

48 "ollama/llama3", 

49 ], 

50 ) 

51 

52 

53def create_quality_optimized_selector() -> ModelSelector: 

54 """Create a quality-optimized model selector.""" 

55 from lexigram.ai.llm.selection.core import ModelSelector, SelectionStrategy 

56 

57 strategies = [ 

58 SelectionStrategy( 

59 name="max_quality_long", 

60 model="claude-3-opus-20240229", 

61 conditions={"min_tokens": 1000}, 

62 priority=10, 

63 description=None, 

64 ), 

65 SelectionStrategy( 

66 name="max_quality_short", 

67 model="gpt-4-turbo", 

68 conditions={"max_tokens": 10000}, 

69 priority=9, 

70 description=None, 

71 ), 

72 ] 

73 

74 return ModelSelector( 

75 default_model="gpt-4-turbo", 

76 strategies=strategies, 

77 fallback_chain=[ 

78 "claude-3-opus-20240229", 

79 "gpt-4-turbo", 

80 "claude-3-sonnet-20240229", 

81 "gpt-3.5-turbo", 

82 ], 

83 ) 

84 

85 

86def create_balanced_selector() -> ModelSelector: 

87 """Create a balanced model selector.""" 

88 from lexigram.ai.llm.selection.core import ModelSelector, SelectionStrategy 

89 

90 strategies = [ 

91 SelectionStrategy( 

92 name="simple_fast", 

93 model="claude-3-haiku-20240307", 

94 conditions={"max_tokens": 500}, 

95 priority=10, 

96 description=None, 

97 ), 

98 SelectionStrategy( 

99 name="medium_balanced", 

100 model="claude-3-sonnet-20240229", 

101 conditions={"min_tokens": 500, "max_tokens": 5000}, 

102 priority=9, 

103 description=None, 

104 ), 

105 SelectionStrategy( 

106 name="complex_quality", 

107 model="gpt-4-turbo", 

108 conditions={"min_tokens": 5000}, 

109 priority=8, 

110 description=None, 

111 ), 

112 ] 

113 

114 return ModelSelector( 

115 default_model="claude-3-sonnet-20240229", 

116 strategies=strategies, 

117 fallback_chain=[ 

118 "claude-3-sonnet-20240229", 

119 "gpt-3.5-turbo", 

120 "claude-3-haiku-20240307", 

121 ], 

122 )