Gemini Code Assist की मदद से, कोड में अपने हिसाब से बदलाव करने की सुविधा को कॉन्फ़िगर करना

इस दस्तावेज़ में, Gemini Code Assist में कोड को पसंद के मुताबिक बनाने की सुविधा को सेट अप करने का तरीका बताया गया है. इसके लिए, Gemini Code Assist को अपनी निजी कोड रिपॉज़िटरी से कनेक्ट करें. इस सुविधा की मदद से, आपको कोड के सुझाव मिलते हैं. ये सुझाव, आपकी कंपनी की इंटरनल लाइब्रेरी, निजी एपीआई, और कोडिंग स्टाइल से लिए जाते हैं.

शुरू करने से पहले

चुनें कि कौनसी निजी रिपॉज़िटरी कनेक्ट की गई हैं

सबसे सही तरीके के तौर पर, पक्का करें कि आपने ऐसी रिपॉज़िटरी कनेक्ट की हों जो:

  • आपके पास ऐसा कोड होना चाहिए जो उस कोड के स्टाइल या स्ट्रक्चर से मिलता-जुलता हो जिसे आपको अपने डेवलपर से लिखवाना है.
  • आपके पास ऐसी निजी लाइब्रेरी या एपीआई होने चाहिए जिन्हें आपको मौजूदा कोडबेस से कॉल करना है.

(ज़रूरी नहीं) चुनें कि किन फ़ाइलों को इंडेक्स नहीं किया जाएगा

डिफ़ॉल्ट रूप से, कोड को पसंद के मुताबिक बनाने की सुविधा, आपकी चुनी गई रिपॉज़िटरी में मौजूद इस्तेमाल की जा सकने वाली सभी कोड फ़ाइलों को इंडेक्स करती है.

अगर आपको ऐसे कोड को इंडेक्स होने से रोकना है जिसे इंडेक्स नहीं करना है, तो ब्रांच पैटर्न का इस्तेमाल करके, अपने इंडेक्स के ऐक्सेस को कंट्रोल करें. साथ ही, main जैसी स्टेबल ब्रांच का इस्तेमाल करें.

इसके अलावा, इंडेक्स से फ़ाइलों को बाहर रखने के लिए, .aiexclude फ़ाइल बनाई जा सकती है.

इंडेक्स बनाना

कोड को पसंद के मुताबिक बनाने की सुविधा, इंडेक्स पर निर्भर करती है. यह इंडेक्स, आपकी रिपॉज़िटरी का विश्लेषण करता है और उसे पार्स करता है. इससे कोड जनरेट करने के सुझाव तेज़ी से मिलते हैं और लुकअप भी तेज़ी से होता है.

gcloud

इंडेक्स बनाने के लिए, शेल एनवायरमेंट में gemini code-repository-indexes create कमांड का इस्तेमाल करें:

gcloud gemini code-repository-indexes create INDEX_NAME \
    --project=PROJECT_ID \
    --location=REGION

Terraform

resource "google_gemini_code_repository_index" "example" {
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
}

इनकी जगह ये डालें:

  • INDEX_NAME: आपके इंडेक्स का नाम. अहम जानकारी: अपने इंडेक्स का नाम रिकॉर्ड करें. इस दस्तावेज़ में दिए गए कई चरणों को पूरा करने के लिए, आपको इसकी ज़रूरत होगी.
  • PROJECT_ID: यह आपके Google Cloud प्रोजेक्ट का आईडी है.
  • REGION: यह एक ऐसा देश/इलाका होना चाहिए जहां यह सुविधा उपलब्ध है. इस पेज के शुरू करने से पहले सेक्शन में इसकी जानकारी दी गई है. साथ ही, आपने इसे Google Cloud प्रोजेक्ट में Developer Connect में कॉन्फ़िगर किया हो.

आम तौर पर, इंडेक्स बनाने में 30 मिनट लगते हैं. हालांकि, इसमें एक घंटा भी लग सकता है.

Google, हर प्रोजेक्ट और संगठन के लिए कोड रिपॉज़िटरी इंडेक्स की संख्या को एक तक सीमित रखता है.

रिपॉज़िटरी ग्रुप का इस्तेमाल करके, अपने इंडेक्स के ऐक्सेस को कंट्रोल करना

रिपॉज़िटरी ग्रुप, इंडेक्सिंग कॉन्फ़िगरेशन के लिए एक कंटेनर होता है. इसमें रिपॉज़िटरी और उनके ब्रांच पैटर्न शामिल होते हैं. रिपॉज़िटरी ग्रुप, IAM को ज़्यादा बारीकी से कंट्रोल करने के लिए डिज़ाइन किए गए हैं. इससे डेवलपर को उन ग्रुप से इंडेक्स किए गए डेटा का ऐक्सेस मिलता है जहां उनके पास cloudaicompanion.repositoryGroups.use अनुमति होती है.

रिपॉज़िटरी ग्रुप में, एक ही प्रोजेक्ट और जगह से Developer Connect रिपॉज़िटरी या लिंक होते हैं.

एडमिन ये काम कर सकते हैं:

  • कोड रिपॉज़िटरी इंडेक्स रिसॉर्स बनाएं.
  • उसी प्रोजेक्ट और जगह पर, Developer Connect का नया कनेक्शन कॉन्फ़िगर करें.
  • कनेक्शन में Git रिपॉज़िटरी लिंक करें.
  • लिंक के संसाधन के नाम पाएं. हर लिंक के लिए इंडेक्स करने के लिए ब्रांच पैटर्न चुनें और उसे एक या उससे ज़्यादा रिपॉज़िटरी ग्रुप में डालें.

gcloud

रिपॉज़िटरी ग्रुप बनाने के लिए, शेल एनवायरमेंट में gemini code-repository-indexes repository-groups create कमांड का इस्तेमाल करें:

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "BRANCH_NAMES"}]'

Terraform

resource "google_gemini_repository_group" "example" {
  location = "REGION"
  code_repository_index = "INDEX_NAME"
  repository_group_id = "REPOSITORY_GROUP"
  repositories {
    resource = "REPOSITORY_RESOURCE_NAME"
    branch_pattern = "BRANCH_NAMES"
  }
}

इनकी जगह ये डालें:

  • REPOSITORY_GROUP: रिपॉज़िटरी ग्रुप का नाम, जैसे कि default.
  • PROJECT_ID: यह आपके Google Cloud प्रोजेक्ट का आईडी है.
  • REGION: यह एक ऐसा देश/इलाका है जहां यह सुविधा काम करती है. इसके बारे में इस पेज के शुरू करने से पहले सेक्शन में बताया गया है. आपने इसे Google Cloud प्रोजेक्ट में Developer Connect में कॉन्फ़िगर किया हो.
  • INDEX_NAME: यह उस इंडेक्स का नाम है जिसे आपने इंडेक्स बनाने के लिए, पिछले चरण में बनाया था.
  • REPOSITORY_RESOURCE_NAME: Developer Connect कनेक्शन में मौजूद रिपॉज़िटरी का नाम. रिपॉज़िटरी का नाम ढूंढने के लिए, Google Cloud Console में Developer Connect पेज पर जाएं. इसके बाद, Repositories टैब में, टेबल के Connection कॉलम में मौजूद Connection ID ढूंढें. संसाधन का नाम कॉपी करने के लिए, ज़्यादा विकल्पों के लिए more_vert मेन्यू पर क्लिक करें. इसके बाद, संसाधन का पाथ कॉपी करें को चुनें.
  • BRANCH_NAMES: उन ब्रांच के नाम जिन्हें आपको इंडेक्स करना है. जैसे, main|dev.

JSON (या YAML) फ़ाइल में तय की गई रिपॉज़िटरी का इस्तेमाल करके, रिपॉज़िटरी ग्रुप भी बनाया जा सकता है. इसके लिए, फ़ाइल को इस तरह से फ़ॉर्मैट करें:

JSON

[
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "main|dev"
  },
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "dev"
  }
]

YAML

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: main|dev

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: dev

JSON या YAML फ़ाइल के आधार पर कोई रिपॉज़िटरी ग्रुप बनाने के लिए, शेल एनवायरमेंट में gemini code-repository-indexes repository-groups create कमांड का इस्तेमाल करें:

JSON

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.json

YAML

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.yaml

अगर आपको पसंद है, तो Cloud Key Management Service के ज़रिए, ग्राहक की ओर से मैनेज की जाने वाली एन्क्रिप्शन कुंजी (सीएमईके) का इस्तेमाल करके, अपने डेटा को एन्क्रिप्ट (सुरक्षित) किया जा सकता है और उसे कंट्रोल किया जा सकता है. CMEK का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, ग्राहक की ओर से मैनेज की जाने वाली एन्क्रिप्शन कुंजियों की मदद से डेटा को एन्क्रिप्ट (सुरक्षित) करना लेख पढ़ें.

किसी प्रोजेक्ट पर, रिपॉज़िटरी ग्रुप को IAM भूमिका असाइन करना

आपको सिर्फ़ इंडेक्स में मौजूद रिपॉज़िटरी से सुझाव मिलते हैं. हर रिपॉज़िटरी, एक या उससे ज़्यादा रिपॉज़िटरी ग्रुप से जुड़ी होती है. सुझाव ऐक्सेस करने के लिए, आपको Cloud AI कंपैनियन के रिपॉज़िटरी ग्रुप के उपयोगकर्ता की IAM भूमिका (roles/cloudaicompanion.repositoryGroupsUser) असाइन करनी होगी. इसमें cloudaicompanion.repositoryGroups.user IAM की ज़रूरी अनुमति शामिल होती है. इसके लिए, इनमें से कोई एक तरीका अपनाएं:

  • प्रिंसिपल को पूरे इंडेक्स को ऐक्सेस करने की अनुमति दें.
  • मुख्य खातों को इंडेक्स के सबसेट का ऐक्सेस दें.

प्रिंसिपल को पूरे इंडेक्स को ऐक्सेस करने की अनुमति देना

  1. किसी प्रोजेक्ट के लिए आईएएम नीति को बाइंड करने के लिए, शेल एनवायरमेंट में projects add-iam-policy-binding कमांड का इस्तेमाल करें:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member='PRINCIPAL' \
        --role='roles/cloudaicompanion.repositoryGroupsUser'
    

    इनकी जगह ये डालें:

    • PROJECT_ID: वह प्रोजेक्ट आईडी जहां रिपॉज़िटरी ग्रुप मौजूद है.
    • PRINCIPAL: प्रिंसिपल का वह ईमेल पता जिसे ऐक्सेस की ज़रूरत है. उदाहरण के लिए, किसी व्यक्ति के लिए user:test-user@gmail.com या किसी ग्रुप के लिए group:admins@example.com.

    ज़्यादा जानकारी के लिए, gcloud projects set-iam-policy देखें.

  2. जब आपसे कोई शर्त तय करने के लिए कहा जाए, तब None डालें.

मुख्य खातों को इंडेक्स के सबसेट का ऐक्सेस देना

एक से ज़्यादा रिपॉज़िटरी ग्रुप बनाए जा सकते हैं. साथ ही, अलग-अलग आईएएम प्रिंसिपल को आईएएम की भूमिकाएं असाइन की जा सकती हैं.

gcloud

आईएम नीति सेट अप करने के लिए, आपको आईएम नीति की JSON या YAML फ़ाइल तैयार करनी होगी. इसमें आईएम ग्रुप और असाइन की गई भूमिकाओं की सूची शामिल होगी. उदाहरण के लिए:

bindings:
- members:
  - group:my-group@example.com
  - user:test-user@example.com
  role: roles/cloudaicompanion.repositoryGroupsUser

ज़्यादा जानकारी और सिंटैक्स के लिए, अनुमति देने की नीतियों के बारे में जानकारी लेख पढ़ें.

आईएएम नीति सेट करने के लिए, शेल एनवायरमेंट में gemini code-repository-indexes repository-groups set-iam-policy कमांड का इस्तेमाल करें:

gcloud gemini code-repository-indexes repository-groups set-iam-policy GROUP_NAMEPOLICY_FILE \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME

इनकी जगह ये डालें:

Terraform

data "google_iam_policy" "foo" {
  binding {
    role = "roles/cloudaicompanion.repositoryGroupsUser"
    members = ["test-user@example.com"]
  }
}

resource "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  policy_data = data.google_iam_policy.foo.policy_data
}

data "google_gemini_repository_group_iam_policy" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  depends_on = [
    google_gemini_repository_group_iam_policy.foo
  ]
}

बाइंडिंग भी बनाई जा सकती है:

resource "google_gemini_repository_group_iam_binding" "foo" {
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  role = "roles/cloudaicompanion.repositoryGroupsUser"
  members = ["test-user@example.com"]
}

इनकी जगह ये डालें:

इंडेक्सिंग की स्थिति देखना

आपको जितनी रिपॉज़िटरी इंडेक्स करनी हैं और उनका साइज़ जितना है उसके हिसाब से, कॉन्टेंट को इंडेक्स करने में 24 घंटे तक लग सकते हैं. बड़ी रिपॉज़िटरी को इंडेक्स करने में ज़्यादा समय लग सकता है. इंडेक्सिंग हर 24 घंटे में एक बार होती है. इसमें रिपॉज़िटरी में किए गए सभी बदलाव शामिल होते हैं.

  1. indexing लॉग खोजें. ज़्यादा जानकारी के लिए, क्वेरी की भाषा को लॉग करना लेख पढ़ें.

    कंसोल

    1. Google API Console में, लॉग एक्सप्लोरर पर जाएं.

      Logs Explorer पर जाएं

    2. indexing लॉग देखने के लिए, लॉग के नाम वाले फ़िल्टर का इस्तेमाल करें.

    gcloud

    इंडेक्सिंग लॉग खोजने के लिए, शेल एनवायरमेंट में logging read कमांड का इस्तेमाल करें:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing""
    

    PROJECT_ID की जगह उस प्रोजेक्ट का आईडी डालें जिसमें रिपॉज़िटरी ग्रुप मौजूद है.

    उदाहरण के लिए, indexing लॉग में गड़बड़ियां देखने के लिए, यह कमांड चलाएं:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. इंडेक्स करने की जुड़ी हुई स्थितियां देखें. जैसे:

    • रिपॉज़िटरी की इंडेक्सिंग की शुरुआत-उदाहरण के लिए, Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.
    • अलग-अलग रिपॉज़िटरी की इंडेक्सिंग खत्म होने का समय-उदाहरण के लिए:
      • सफल हुआ: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • पुष्टि नहीं हो सकी: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • रिपॉज़िटरी की इंडेक्सिंग खत्म होने की तारीख. उदाहरण के लिए:
      • सफल हुआ: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • पुष्टि नहीं हो सकी: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 1. Repositories that were not successfully fetched will be retried in the next run.

    इंडेक्स की स्थितियों में, REPOSITORY_NAME वह रिपॉज़िटरी है जिसकी आपको समीक्षा करनी है.

  3. इंडेक्सिंग से जुड़ी गड़बड़ियों की समीक्षा करें. जैसे:

    • रिपॉज़िटरी को फ़ेच नहीं किया जा सका.
    • रिपॉज़िटरी की फ़ाइलों की सूची नहीं बनाई जा सकी.
    • इंडेक्स से रिपॉज़िटरी की जानकारी नहीं मिल सकी.
    • इंडेक्स से फ़ाइलें वापस नहीं लाई जा सकीं.
    • कोई अंदरूनी गड़बड़ी हुई.

कोड को पसंद के मुताबिक बनाने की सुविधा का इस्तेमाल करना

कोड को पसंद के मुताबिक बनाने की सुविधा सेट अप करने के बाद, आपको कोड पूरा करने और कोड जनरेट करने के सुझाव दिखने लगेंगे. ये सुझाव, आपके इंडेक्स किए गए निजी कोड पर आधारित हो सकते हैं. इसके अलावा, ये सुझाव पूरे कोडबेस की जानकारी के आधार पर भी मिल सकते हैं.

कोड को पसंद के मुताबिक बनाने और सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, यह लेख पढ़ें: कोड को पसंद के मुताबिक बनाना.

कोड को पसंद के मुताबिक बनाने की सुविधा बंद करना

  1. शेल एनवायरमेंट में, मौजूदा इंडेक्स के लिए सभी रिपॉज़िटरी ग्रुप की सूची बनाने के लिए, gemini code-repository-indexes repository-groups list कमांड का इस्तेमाल करें:

    gcloud gemini code-repository-indexes repository-groups list --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME --uri
    

    इनकी जगह ये डालें:

    • REGION: यह एक ऐसा देश/इलाका होना चाहिए जहां यह सुविधा काम करती है. इस पेज के शुरू करने से पहले सेक्शन में इसकी जानकारी दी गई है. साथ ही, आपने इसे अपने Google Cloud प्रोजेक्ट में Developer Connect में कॉन्फ़िगर किया हो.
    • PROJECT_ID: यह आपके Google Cloud प्रोजेक्ट का आईडी है.
    • INDEX_NAME: यह उस इंडेक्स का नाम है जिसे आपने इंडेक्स बनाने के लिए, पिछले चरण में बनाया था.
  2. मौजूदा इंडेक्स से किसी रिपॉज़िटरी ग्रुप को मिटाने के लिए, gemini code-repository-indexes repository-groups delete कमांड का इस्तेमाल करें:

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \
        --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME
    
  3. हर रिपॉज़िटरी ग्रुप के लिए तीसरा चरण तब तक दोहराएं, जब तक इंडेक्स से सभी रिपॉज़िटरी ग्रुप मिट न जाएं.

  4. ज़रूरी नहीं: इंडेक्स मिटाने के लिए, शेल एनवायरमेंट में gemini code-repository-indexes delete कमांड का इस्तेमाल करें:

    gcloud gemini code-repository-indexes delete INDEX_NAME \
        --location=REGION \
        --project=PROJECT_ID
    

आगे क्या करना है