Skip to content

Latest commit

 

History

History
225 lines (181 loc) · 6.19 KB

File metadata and controls

225 lines (181 loc) · 6.19 KB

Rahyana API - مثال‌های JavaScript برای Models

این پوشه شامل مثال‌های کامل برای دریافت و مدیریت مدل‌های موجود در API Rahyana است.

فهرست مثال‌ها

دریافت مدل‌های موجود - دریافت لیست کامل مدل‌های در دسترس

ویژگی‌ها:

  • دریافت تمام مدل‌های موجود
  • فیلتر کردن بر اساس قابلیت
  • جستجو بر اساس شناسه مدل
  • فیلتر بر اساس ارائه‌دهنده

موارد استفاده:

  • نمایش مدل‌های موجود در رابط کاربری
  • انتخاب مدل مناسب برای کاربرد
  • بررسی قابلیت‌های مدل‌ها
  • مدیریت پویای مدل‌ها

نحوه استفاده

اجرای مثال

node get-models.js

استفاده در کد

const { getAvailableModels, filterModelsByCapability } = require('./get-models');

// دریافت تمام مدل‌ها
const models = await getAvailableModels();

// فیلتر مدل‌های متنی
const textModels = await filterModelsByCapability('text');

// فیلتر مدل‌های تصویری
const imageModels = await filterModelsByCapability('image');

قابلیت‌های مدل‌ها

انواع مدل‌ها

  • text: مدل‌های متنی پایه
  • chat: مدل‌های گفتگو
  • image: مدل‌های پردازش تصویر
  • audio: مدل‌های پردازش صدا
  • multimodal: مدل‌های چندوجهی

قابلیت‌های خاص

  • function_calling: پشتیبانی از فراخوانی توابع
  • streaming: پشتیبانی از پاسخ‌های جریانی
  • json_mode: پشتیبانی از حالت JSON
  • web_search: پشتیبانی از جستجوی وب

ساختار پاسخ

{
  "data": [
    {
      "id": "anthropic/claude-sonnet-4.5",
      "name": "Claude Sonnet 4.5",
      "provider": "anthropic",
      "type": "chat",
      "context_length": 200000,
      "capabilities": ["text", "image", "function_calling"],
      "pricing": {
        "input": 0.003,
        "output": 0.015
      }
    }
  ]
}

مثال‌های کاربردی

1. انتخاب مدل بر اساس بودجه

async function selectModelByBudget(maxCostPerToken) {
  const models = await getAvailableModels();
  
  return models.data.filter(model => {
    if (model.pricing && model.pricing.input) {
      return model.pricing.input <= maxCostPerToken;
    }
    return false;
  });
}

2. انتخاب مدل بر اساس قابلیت

async function selectModelForTask(taskType) {
  let capability;
  
  switch(taskType) {
    case 'text_generation':
      capability = 'text';
      break;
    case 'image_analysis':
      capability = 'image';
      break;
    case 'audio_transcription':
      capability = 'audio';
      break;
    default:
      capability = 'text';
  }
  
  return await filterModelsByCapability(capability);
}

3. مقایسه مدل‌ها

async function compareModels(modelIds) {
  const models = await getAvailableModels();
  
  return modelIds.map(id => {
    return models.data.find(model => model.id === id);
  }).filter(Boolean);
}

مدیریت خطاها

try {
  const models = await getAvailableModels();
  // پردازش مدل‌ها
} catch (error) {
  if (error.message.includes('401')) {
    console.error('خطای احراز هویت: کلید API نامعتبر است');
  } else if (error.message.includes('429')) {
    console.error('خطای محدودیت نرخ: درخواست‌های زیادی ارسال شده');
  } else {
    console.error('خطای غیرمنتظره:', error.message);
  }
}

بهترین شیوه‌ها

  1. کش کردن: مدل‌ها را کش کنید تا درخواست‌های مکرر کاهش یابد
  2. فیلتر کردن: فقط مدل‌های مورد نیاز را بارگذاری کنید
  3. اعتبارسنجی: مدل انتخاب شده را قبل از استفاده اعتبارسنجی کنید
  4. مدیریت خطا: خطاهای شبکه و API را مدیریت کنید

مثال کامل

const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://rahyana.ir/api/v1';

class ModelManager {
  constructor(apiKey, baseUrl) {
    this.apiKey = apiKey;
    this.baseUrl = baseUrl;
    this.models = null;
  }

  async loadModels() {
    if (this.models) return this.models;
    
    try {
      const response = await fetch(`${this.baseUrl}/models`, {
        headers: {
          'Authorization': `Bearer ${this.apiKey}`,
          'Content-Type': 'application/json'
        }
      });
      
      const data = await response.json();
      this.models = data.data;
      return this.models;
    } catch (error) {
      console.error('خطا در بارگذاری مدل‌ها:', error);
      throw error;
    }
  }

  async getBestModelForTask(taskType, budget) {
    await this.loadModels();
    
    return this.models
      .filter(model => {
        // بررسی قابلیت
        const hasCapability = model.capabilities && 
          model.capabilities.includes(taskType);
        
        // بررسی بودجه
        const withinBudget = !budget || 
          !model.pricing || 
          model.pricing.input <= budget;
        
        return hasCapability && withinBudget;
      })
      .sort((a, b) => {
        // مرتب‌سازی بر اساس قیمت
        const priceA = a.pricing ? a.pricing.input : 0;
        const priceB = b.pricing ? b.pricing.input : 0;
        return priceA - priceB;
      })[0];
  }
}

// استفاده
const modelManager = new ModelManager(API_KEY, BASE_URL);
const bestModel = await modelManager.getBestModelForTask('text', 0.01);
console.log('بهترین مدل:', bestModel);

پشتیبانی

برای سوالات و پشتیبانی: