billyaungmyint commited on
Commit
135756a
·
verified ·
1 Parent(s): 908d59b

Sync from GitHub via hub-sync

Browse files
VERSION CHANGED
@@ -1 +1 @@
1
- d41f44e05d8d4b3e36c81f2091e9f279a0ec4af5
 
1
+ 10b5c8926a4be3ed9767f412aa1b3a4f105ab56b
gemini/gemini_litellm.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from smolagents import LiteLLMModel, CodeAgent
3
+
4
+ gemini_api_key = os.getenv("GEMINI_API_KEY")
5
+
6
+ # LiteLLM uses the 'gemini/' prefix for Gemini models
7
+ model = LiteLLMModel(
8
+ model_id="gemini-2.0-flash", # Use a valid Gemini model ID
9
+ api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
10
+ api_key=gemini_api_key,
11
+ )
12
+
13
+ agent = CodeAgent(tools=[], model=model)
14
+ agent.run("Provide a brief history of the Eiffel Tower.")
gemini/gemini_openai.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from smolagents import CodeAgent, OpenAIModel
3
+
4
+ # Get API key from Windows Environment Variable
5
+ gemini_api_key = os.getenv("GEMINI_API_KEY")
6
+
7
+ # Initialize Gemini Model via smolagents
8
+ model = OpenAIModel(
9
+ model_id="gemini-2.0-flash", # Use a valid Gemini model ID
10
+ api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
11
+ api_key=gemini_api_key,
12
+ )
13
+
14
+ # Initialize Agent
15
+ agent = CodeAgent(tools=[], model=model)
16
+
17
+ # Run Agent
18
+ agent.run("Explain how AI agents work.")
ollama/hello_ollama.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from smolagents import LiteLLMModel, ToolCallingAgent
2
+
3
+
4
+ def main() -> None:
5
+ model = LiteLLMModel(
6
+ model_id="ollama_chat/qwen2:7b",
7
+ api_base="http://127.0.0.1:11434",
8
+ temperature=0.3,
9
+ )
10
+
11
+ # ToolCallingAgent is more reliable than CodeAgent for general chat-like prompts
12
+ # with local Ollama models, because it avoids strict code-block parsing.
13
+ agent = ToolCallingAgent(
14
+ tools=[],
15
+ model=model,
16
+ max_steps=3,
17
+ )
18
+
19
+ prompt = "Explain how AI agents work in 3 bullet points."
20
+
21
+ try:
22
+ answer = agent.run(prompt)
23
+ print(answer)
24
+ except Exception:
25
+ # Some Ollama models intermittently skip tool-call JSON.
26
+ # Fallback to direct model generation while still using smolagents.
27
+ response = model.generate(
28
+ messages=[
29
+ {"role": "system", "content": "You are a concise and helpful assistant."},
30
+ {"role": "user", "content": prompt},
31
+ ]
32
+ )
33
+ print(response.content)
34
+
35
+
36
+ if __name__ == "__main__":
37
+ main()
smolagents/codeagent_litellm_template.py ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import os
3
+ from dataclasses import dataclass
4
+
5
+ from smolagents import CodeAgent, LiteLLMModel
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class ProviderPreset:
10
+ name: str
11
+ api_key_env: str
12
+ api_base_env: str
13
+ model_env: str
14
+ default_api_base: str
15
+ default_model: str
16
+
17
+
18
+ PROVIDERS: dict[str, ProviderPreset] = {
19
+ # GitHub Models (OpenAI-compatible endpoint)
20
+ "github": ProviderPreset(
21
+ name="github",
22
+ api_key_env="GITHUB_TOKEN",
23
+ api_base_env="GITHUB_API_BASE",
24
+ model_env="GITHUB_MODEL_ID",
25
+ default_api_base="https://models.inference.ai.azure.com",
26
+ default_model="openai/gpt-4.1-mini",
27
+ ),
28
+ # Gemini via Google OpenAI-compatible endpoint
29
+ "gemini": ProviderPreset(
30
+ name="gemini",
31
+ api_key_env="GEMINI_API_KEY",
32
+ api_base_env="GEMINI_API_BASE",
33
+ model_env="GEMINI_MODEL_ID",
34
+ default_api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
35
+ default_model="gemini-2.0-flash",
36
+ ),
37
+ # Z.ai / GLM (BigModel) - set ZAI_API_BASE to your account endpoint if needed
38
+ "zai": ProviderPreset(
39
+ name="zai",
40
+ api_key_env="ZAI_API_KEY",
41
+ api_base_env="ZAI_API_BASE",
42
+ model_env="ZAI_MODEL_ID",
43
+ default_api_base="https://open.bigmodel.cn/api/paas/v4/",
44
+ default_model="zhipuai/glm-4.5",
45
+ ),
46
+ # Hugging Face Inference Router (OpenAI-compatible endpoint)
47
+ "huggingface": ProviderPreset(
48
+ name="huggingface",
49
+ api_key_env="HF_TOKEN",
50
+ api_base_env="HF_API_BASE",
51
+ model_env="HF_MODEL_ID",
52
+ default_api_base="https://router.huggingface.co/v1",
53
+ default_model="moonshotai/Kimi-K2.5",
54
+ ),
55
+ # Fireworks (OpenAI-compatible endpoint)
56
+ "fireworks": ProviderPreset(
57
+ name="fireworks",
58
+ api_key_env="FIREWORKS_API_KEY",
59
+ api_base_env="FIREWORKS_API_BASE",
60
+ model_env="FIREWORKS_MODEL_ID",
61
+ default_api_base="https://api.fireworks.ai/inference/v1",
62
+ default_model="accounts/fireworks/models/llama-v3p1-8b-instruct",
63
+ ),
64
+ # Minimax (OpenAI-compatible endpoint)
65
+ "minimax": ProviderPreset(
66
+ name="minimax",
67
+ api_key_env="MINIMAX_API_KEY",
68
+ api_base_env="MINIMAX_API_BASE",
69
+ model_env="MINIMAX_MODEL_ID",
70
+ default_api_base="https://api.minimax.chat/v1",
71
+ default_model="MiniMax-Text-01",
72
+ ),
73
+ }
74
+
75
+
76
+ def build_model(provider: str, model_override: str | None, temperature: float) -> LiteLLMModel:
77
+ preset = PROVIDERS[provider]
78
+
79
+ api_key = os.getenv(preset.api_key_env)
80
+ api_base = os.getenv(preset.api_base_env, preset.default_api_base)
81
+ model_id = model_override or os.getenv(preset.model_env, preset.default_model)
82
+
83
+ if not api_key:
84
+ raise ValueError(
85
+ f"Missing API key. Set environment variable {preset.api_key_env} for provider '{provider}'."
86
+ )
87
+
88
+ return LiteLLMModel(
89
+ model_id=model_id,
90
+ api_base=api_base,
91
+ api_key=api_key,
92
+ temperature=temperature,
93
+ )
94
+
95
+
96
+ def parse_args() -> argparse.Namespace:
97
+ parser = argparse.ArgumentParser(
98
+ description="smolagents CodeAgent + LiteLLMModel template for multi-provider usage"
99
+ )
100
+ parser.add_argument(
101
+ "--provider",
102
+ choices=sorted(PROVIDERS.keys()),
103
+ default="gemini",
104
+ help="Which provider preset to use",
105
+ )
106
+ parser.add_argument(
107
+ "--model",
108
+ default=None,
109
+ help="Optional model override (otherwise uses provider env/default)",
110
+ )
111
+ parser.add_argument(
112
+ "--prompt",
113
+ default="Explain how AI agents work in 3 concise bullet points.",
114
+ help="Prompt to run",
115
+ )
116
+ parser.add_argument(
117
+ "--temperature",
118
+ type=float,
119
+ default=0.2,
120
+ help="Sampling temperature",
121
+ )
122
+ parser.add_argument(
123
+ "--max-steps",
124
+ type=int,
125
+ default=5,
126
+ help="Maximum CodeAgent steps",
127
+ )
128
+ parser.add_argument(
129
+ "--dry-run",
130
+ action="store_true",
131
+ help="Print resolved config without calling the model",
132
+ )
133
+ return parser.parse_args()
134
+
135
+
136
+ def main() -> None:
137
+ args = parse_args()
138
+ preset = PROVIDERS[args.provider]
139
+
140
+ resolved_api_base = os.getenv(preset.api_base_env, preset.default_api_base)
141
+ resolved_model = args.model or os.getenv(preset.model_env, preset.default_model)
142
+
143
+ if args.dry_run:
144
+ print("Provider:", args.provider)
145
+ print("Model:", resolved_model)
146
+ print("API base:", resolved_api_base)
147
+ print("Required API key env:", preset.api_key_env)
148
+ return
149
+
150
+ model = build_model(args.provider, args.model, args.temperature)
151
+
152
+ # CodeAgent works best when models follow strict structured output behavior.
153
+ # 'markdown' tags and structured outputs improve cross-provider reliability.
154
+ agent = CodeAgent(
155
+ tools=[],
156
+ model=model,
157
+ max_steps=args.max_steps,
158
+ code_block_tags="markdown",
159
+ use_structured_outputs_internally=True,
160
+ )
161
+
162
+ answer = agent.run(args.prompt)
163
+ print(answer)
164
+
165
+
166
+ if __name__ == "__main__":
167
+ main()