Loading
Loading
Gemini is Google's most powerful multimodal models — understanding text, images, video, and audio.
Gemini can automatically call external functions — like web search or database reading — just like Claude and GPT.
import json
import random
from dataclasses import dataclass, field
from typing import List, Dict, Any, Optional
# ─── محاكاة Gemini SDK (google.generativeai) ───────────────
GEMINI_MODELS = {
"gemini-1.5-pro": {
"ctx": 1_000_000, "in_price": 0.00350, "out_price": 0.01050,
"capabilities": ["text", "image", "video", "audio", "pdf"],
},
"gemini-1.5-flash": {
"ctx": 1_000_000, "in_price": 0.000075, "out_price": 0.000300,
"capabilities": ["text", "image", "video"],
},
"gemini-2.0-flash": {
"ctx": 1_000_000, "in_price": 0.0001, "out_price": 0.0004,
"capabilities": ["text", "image", "video", "audio", "realtime"],
},
}
@dataclass
class FunctionDeclaration:
name: str
description: str
parameters: Dict[str, Any]
@dataclass
class GeminiResponse:
text: str
input_tokens: int
output_tokens: int
finish_reason: str = "STOP"
function_call: Optional[Dict] = None
class GeminiModel:
def __init__(self, model_name: str = "gemini-1.5-flash"):
if model_name not in GEMINI_MODELS:
raise ValueError(f"النموذج '{model_name}' غير متاح")
self.model_name = model_name
self._info = GEMINI_MODELS[model_name]
self._functions: List[FunctionDeclaration] = []
self._total_cost = 0.0
self._calls = 0
def add_function(self, fn: FunctionDeclaration):
self._functions.append(fn)
def generate_content(self, prompt: str, history: List[Dict] = None) -> GeminiResponse:
self._calls += 1
in_tok = int(len(prompt.split()) * 1.3)
out_tok = 70
# محاكاة Function Calling
fn_call = None
if self._functions and any(kw in prompt.lower() for kw in ["ابحث", "search", "جو", "weather"]):
fn = random.choice(self._functions)
fn_call = {"name": fn.name, "args": {"query": prompt[:50]}}
response_text = f"[Function Call → {fn.name}]"
else:
response_text = f"[Gemini/{self.model_name}] ردّي على: {prompt[:55]}..."
cost = (in_tok/1000)*self._info["in_price"] + (out_tok/1000)*self._info["out_price"]
self._total_cost += cost
return GeminiResponse(response_text, in_tok, out_tok, function_call=fn_call)
def count_tokens(self, text: str) -> int:
return int(len(text.split()) * 1.3)
def cost_summary(self):
cost_s = "$" + f"{self._total_cost:.7f}"
print(f"\n📊 ملخص Gemini:")
print(f" النموذج : {self.model_name}")
print(f" المكالمات : {self._calls}")
print(f" التكلفة : {cost_s}")
# ─── عرض النماذج ───────────────────────────────────────────
print("🌐 Gemini API — نماذج Google AI:")
print("=" * 55)
print("\n📦 النماذج المتاحة:")
print(f" {'Model':<22} {'Context':>10} {'In/1K':>10} {'Out/1K':>10}")
print(" " + "-"*55)
for name, info in GEMINI_MODELS.items():
ctx_s = f"{info['ctx']:,}"
in_s = "$" + f"{info['in_price']:.5f}"
out_s = "$" + f"{info['out_price']:.5f}"
caps = ", ".join(info["capabilities"][:3])
print(f" {name:<22} {ctx_s:>10} {in_s:>10} {out_s:>10}")
print(f" {'':22} {caps}")
print()
# ─── اختبار Gemini 1.5 Flash ──────────────────────────────
print("\n💬 اختبار Gemini 1.5 Flash:")
print("-" * 45)
model = GeminiModel("gemini-1.5-flash")
questions = [
"ما هو الفرق بين Gemini وClaude؟",
"اشرح Vertex AI في جملة واحدة",
"كيف أختار بين Flash وPro؟",
]
for q in questions:
resp = model.generate_content(q)
tok_s = f"{resp.input_tokens}in+{resp.output_tokens}out"
print(f"\n❓ {q}")
print(f"💡 {resp.text}")
print(f" tokens: {tok_s}")
# ─── Function Calling ──────────────────────────────────────
print(f"\n\n⚡ Function Calling (استدعاء دوال خارجية):")
model_pro = GeminiModel("gemini-1.5-pro")
search_fn = FunctionDeclaration(
name="web_search",
description="ابحث في الويب عن معلومات محددة",
parameters={"query": {"type": "string", "description": "نص البحث"}},
)
model_pro.add_function(search_fn)
fn_prompts = [
"ابحث عن أحدث إصدارات Gemini",
"ما هو الطقس في دبي اليوم؟",
"اشرح لي Vertex AI Pipelines",
]
for prompt in fn_prompts:
resp = model_pro.generate_content(prompt)
if resp.function_call:
fn_name = resp.function_call["name"]
fn_args = json.dumps(resp.function_call["args"], ensure_ascii=False)
print(f" 🔧 '{prompt[:40]}' → {fn_name}({fn_args})")
else:
print(f" 💬 '{prompt[:40]}' → {resp.text[:50]}")
model.cost_summary()
model_pro.cost_summary()
print(f"\n✅ Gemini API جاهز للاستخدام!")