Spaces:
Runtime error
Runtime error
from smolagents import Tool | |
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig | |
import torch | |
from wikipedia_utils import * | |
from youtube_utils import * | |
class MathModelQuerer(Tool): | |
name = "math_model" | |
description = "Solves advanced math problems using a pretrained\ | |
large language model specialized in mathematics. Ideal for symbolic reasoning, \ | |
calculus, algebra, and other technical math queries." | |
inputs = { | |
"problem": { | |
"type": "string", | |
"description": "Math problem to solve.", | |
} | |
} | |
output_type = "string" | |
def __init__(self, model_name="deepseek-ai/deepseek-math-7b-base"): | |
print(f"Loading math model: {model_name}") | |
self.tokenizer = AutoTokenizer.from_pretrained(model_name) | |
print("loaded tokenizer") | |
self.model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16) | |
print("loaded auto model") | |
self.model.generation_config = GenerationConfig.from_pretrained(model_name) | |
print("loaded coonfig") | |
self.model.generation_config.pad_token_id = self.model.generation_config.eos_token_id | |
print("loaded pad token") | |
def forward(self, problem: str) -> str: | |
try: | |
print(f"[MathModelTool] Question: {problem}") | |
inputs = self.tokenizer(problem, return_tensors="pt") | |
outputs = self.model.generate(**inputs, max_new_tokens=100) | |
result = self.tokenizer.decode(outputs[0], skip_special_tokens=True) | |
return result | |
except: | |
return f"Failed using the tool {self.name}" | |
class CodeModelQuerer(Tool): | |
name = "code_querer" | |
description = "Generates code snippets based on a natural language description of a\ | |
programming task using a powerful coding-focused language model. Suitable\ | |
for solving coding problems, generating functions, or implementing algorithms." | |
inputs = { | |
"problem": { | |
"type": "string", | |
"description": "Description of a code sample to be generated", | |
} | |
} | |
output_type = "string" | |
def __init__(self, model_name="Qwen/Qwen2.5-Coder-32B-Instruct"): | |
from smolagents import HfApiModel | |
print(f"Loading llm for Code tool: {model_name}") | |
self.model = HfApiModel() | |
def forward(self, problem: str) -> str: | |
try: | |
return self.model.generate(problem, max_new_tokens=512) | |
except: | |
return f"Failed using the tool {self.name}" | |
class WikipediaPageFetcher(Tool): | |
name = "wiki_page_fetcher" | |
description =' Searches and fetches summaries from Wikipedia for any topic,\ | |
across all supported languages and versions. Only a single query string is required as input.' | |
inputs = { | |
"query": { | |
"type": "string", | |
"description": "Topic of wikipedia search", | |
} | |
} | |
output_type = "string" | |
def forward(self, query: str) -> str: | |
try: | |
wiki_query = query(query) | |
wiki_page = fetch_wikipedia_page(wiki_query) | |
return wiki_page | |
except: | |
return f"Failed using the tool {self.name}" | |
class YoutubeTranscriptFetcher(Tool): | |
name = "youtube_transcript_fetcher" | |
description ="Fetches the English transcript of a YouTube video using either a direct video \ | |
ID or a URL that includes one. Accepts a query containing the link or the raw video ID directly. Returns the transcript as plain text." | |
inputs = { | |
"query": { | |
"type": "string", | |
"description": "A query that includes youtube id." | |
}, | |
"video_id" : { | |
"type" : "string", | |
"description" : "Optional string with video id from youtube.", | |
"nullable" : True | |
} | |
} | |
output_type = "string" | |
def forward(self, query: str, video_id=None) -> str: | |
try: | |
if video_id is None: | |
video_id = get_youtube_video_id(query) | |
fetched_transcript = fetch_transcript_english(video_id) | |
return post_process_transcript(fetched_transcript) | |
except: | |
return f"Failed using the tool {self.name}" | |